Estou tentando adicionar muitos termos (~ 200) a um vocabulário, mas não consigo encontrar nenhum módulo de importação atualizado para o Drupal 8, e parece que as funções para isso no Drupal 7 não existem no Drupal 8. Então, alguém pode me indicar a direção certa para fazer isso?
Tentei fazê-lo entity_create
, como sugerido nos comentários, com este código:
$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));
mas eu recebi este erro:
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).
Alguma ideia?
taxonomy-terms
8
Samsquanch
fonte
fonte
entity_create()
$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));
mas recebi o erroDrupal\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).
- Alguma idéia?vid
no lugar devocabulary_name
. Parece que a coluna ainda estávid
emtaxonomy_term_data
, mas é o nome vocabulário em vez de id agoraRespostas:
Você sabe que deseja algo do módulo de taxonomia; portanto, primeiro você precisa procurar
Drupal\taxonomy\Entity
- ou no diretório correspondente - você encontrará aTerm
classe lá. Agora veja a anotação, e ela diz@ContentEntityType
:Então, o que você quer é
porque a
label
chave da entidade éname
e abundle
chave da entidade évid
. Eu adicionei uma->save()
ligação e presumo que você queira salvá-la também.fonte
$term = \Drupal\taxonomy\Entity\Term::create(array( 'name' => 'whatever', 'vid' => 'tags', )); $term->save();
me dá erro fatal: Chamada de método indefinido Drupal \ taxonomia \ Entidade \ Term :: getTypeNesse momento, você deve adicionar um termo de outra maneira (em comparação com esta resposta) Antes de tudo, no início de seu arquivo, você deve escrever
Porque a classe de termos listados em Drupal \ taxonomy \ Entity. E você não precisa passar o parâmetro taxonomy_term para
porque apenas um parâmetro é necessário (matriz com valores) (código listado abaixo para este método no módulo de taxonomia)
Então o exemplo final é
fonte
Entity::save()
retorna um int. As constantesSAVED_NEW
ouSAVED_UPDATED
dependendo da operação executada. No entanto, se você remover o->save()
e adicionar$term->save();
, verá que$term
é atualizado com as informações salvas no banco de dados. Exemplo que você pode fazer agora$tid = $term->tid->value;
As outras respostas usam
entity_create()
, o que funciona, mas não é tão bom.fonte
Com
entityTypeManager()
:fonte
Você pode ver como o devel / devel_generate faz isso.
De devel_generate :
fonte
Antes de criar um termo, é melhor verificar se ele existe, eis o código:
Fonte: https://www.btmash.com/article/2016-04-26/saving-and-retrieving-taxonomy-terms-programmatically-drupal-8
fonte