Я пытаюсь добавить много слов (~ 200) в словарь, но я не могу найти какие-либо модули импорта, которые обновляются для Drupal 8, и кажется, что функции для этого в Drupal 7 не существуют в 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).
Любые идеи?
taxonomy-terms
8
Samsquanch
источник
источник
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).
- Есть идеи?vid
вместоvocabulary_name
. Похоже , колонна все ещеvid
вtaxonomy_term_data
, но это имя Vocab вместо идентификатора в настоящее времяОтветы:
Вы знаете, что хотите что-то из модуля таксономии, поэтому сначала вам нужно заглянуть в
Drupal\taxonomy\Entity
- или соответствующий каталог - вы найдете тамTerm
класс. Теперь посмотрите на аннотацию, там написано@ContentEntityType
:Итак, что вы хотите, это
потому что
label
ключ сущности есть,name
аbundle
ключ сущности естьvid
. Я добавил->save()
звонок, так как полагаю, что ты тоже хотел его сохранить.источник
$term = \Drupal\taxonomy\Entity\Term::create(array( 'name' => 'whatever', 'vid' => 'tags', )); $term->save();
дает мне фатальную ошибку: вызов неопределенного метода Drupal \ taxonomy \ Entity \ Term :: getTypeВ это время вы должны добавить термин немного по-другому (по сравнению с этим ответом). Прежде всего, в начале файла вы должны написать
Потому что термин класс указан в Drupal \ taxonomy \ Entity. И вам не нужно передавать параметр taxonomy_term
потому что нужен только один параметр (массив со значениями) (ниже приведен код для этого метода в модуле таксономии)
Итак, последний пример
источник
Entity::save()
возвращает int. Либо константы,SAVED_NEW
либо вSAVED_UPDATED
зависимости от выполненной операции. Однако, если вы удалите->save()
и добавите$term->save();
, вы увидите, что$term
он обновляется с информацией, которая была сохранена в базе данных. Пример, который вы можете сделать сейчас$tid = $term->tid->value;
Другие ответы используют
entity_create()
, что работает, но не так хорошо.источник
С
entityTypeManager()
:источник
Возможно, вы захотите посмотреть, как это делает devel / devel_generate.
Из devel_generate :
источник
Перед созданием термина лучше проверить, существует ли он, вот код:
Источник: https://www.btmash.com/article/2016-04-26/saving-and-retrieving-taxonomy-terms-programmatics-drupal-8
источник