Программно создать термин?

Я пытаюсь добавить много терминов (~ 200) в словарь, но я не могу найти модули импорта, которые обновлены для Drupal 8, и, похоже, функции для этого в Drupal 7 don ' t существует в Drupal 8. Итак, может ли кто-нибудь указать мне в правильном направлении для этого?

Я попытался сделать это с помощью entity_create, как это предложено в комментариях, с помощью этого кода:

$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));

, но я получил эту ошибку:

Drupal\Core\Entity\EntityStorageException: Missing bundle for entity type taxonomy_term in Drupal\Core\Entity\FieldableEntityStorageControllerBase->create() (line 65 of core/lib/Drupal/Core/Entity/FieldableEntityStorageControllerBase.php).

Любые идеи?

24 голоса | спросил Samsquanch 2 PMpWed, 02 Apr 2014 20:39:40 +040039Wednesday 2014, 20:39:40

5 ответов


36

Вы знаете, что хотите что-то из модуля таксономии, поэтому сначала вам нужно посмотреть в Drupal\taxonomy\Entity - или соответствующий каталог - вы найдете Term класс. Теперь посмотрите на аннотацию, она говорит @ContentEntityType и там:

*   entity_keys = {
*     "id" = "tid",
*     "bundle" = "vid",
*     "label" = "name",
*     "uuid" = "uuid"
*   },

Итак, вы хотите

$term = Term::create([
  'name' => 'test', 
  'vid' => 'client',
])->save();

, поскольку ключ сущности label - name, а ключ сущности bundle - vid. Я добавил вызов ->save(), а также предположим, что вы тоже хотели его сохранить.

ответил 2 PMpWed, 02 Apr 2014 21:36:25 +040036Wednesday 2014, 21:36:25
12

В это время вы должны добавить термин немного по-другому (в сравнении с этим ответом) Прежде всего, в вашем файле вы должны написать

  

использовать Drupal \ taxonomy \ Entity \ Term;

Поскольку класс Term указан в Drupal \ taxonomy \ Entity. И вам не нужно передавать параметр taxonomy_term в

  

Term :: создать

, потому что необходим только один параметр (массив со значениями) (ниже приведенный код для этого метода в модуле таксономии)

public function create(array $values = array()) {
  // Save new terms with no parents by default.
  if (empty($values['parent'])) {
    $values['parent'] = array(0);
  }
  $entity = parent::create($values);
  return $entity;
}

Итак, последний пример

use Drupal\taxonomy\Entity\Term;
$categories_vocabulary = 'blog_categories'; // Vocabulary machine name
$categories = ['test 1', 'test 2', 'test 3', 'test 4']; // List of test terms
foreach ($categories as $category) {
  $term = Term::create(array(
    'parent' => array(),
    'name' => $category,
    'vid' => $categories_vocabulary,
  ))->save();
}
ответил Сергей Пустынных 28 MonEurope/Moscow2015-12-28T18:35:50+03:00Europe/Moscow12bEurope/MoscowMon, 28 Dec 2015 18:35:50 +0300 2015, 18:35:50
5
Term::create([
 'name' => ''Lama',
 'vid' => $vocabulary_id,
]);

В других ответах используется entity_create(), который работает, но не совсем так.

ответил Wim Leers 15 +03002015-10-15T16:22:28+03:00312015bEurope/MoscowThu, 15 Oct 2015 16:22:28 +0300 2015, 16:22:28
1

Вы можете посмотреть, как это делает devel /devel_generate.

Из devel_generate :

$values['name'] = devel_generate_word(mt_rand(2, $maxlength));
$values['description'] = "description of " . $values['name'];
$values['format'] = filter_fallback_format();
$values['weight'] = mt_rand(0, 10);
$values['langcode'] = LANGUAGE_NOT_SPECIFIED;
$term = entity_create('taxonomy_term', $values);
ответил David Luhman 19 32014vEurope/Moscow11bEurope/MoscowWed, 19 Nov 2014 01:46:24 +0300 2014, 01:46:24
1

С помощью entityTypeManager():

$term = [
  'name'     => $name,
  'vid'      => $vocabulary,
  'langcode' => $language,
];

$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->create($term);
ответил Sándor Juhász 11 J0000006Europe/Moscow 2017, 16:40:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132