Intento agregar muchos términos (~ 200) a un vocabulario, pero no puedo encontrar ningún módulo de importación que esté actualizado para Drupal 8, y parece que las funciones para hacer esto en Drupal 7 no existen en Drupal 8. Entonces, ¿alguien puede señalarme en la dirección correcta para hacer esto?
Intenté hacerlo entity_create
, como se sugiere en los comentarios, con este código:
$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));
pero recibí este error:
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).
¿Algunas ideas?
taxonomy-terms
8
Samsquanch
fuente
fuente
entity_create()
$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));
pero recibí el errorDrupal\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).
. ¿Alguna idea?vid
en lugar devocabulary_name
. Parece que la columna todavía estávid
adentrotaxonomy_term_data
, pero es el nombre del vocabulario en lugar de la identificación ahoraRespuestas:
Sabes que quieres algo del módulo de taxonomía, así que primero debes buscar
Drupal\taxonomy\Entity
, o el directorio correspondiente, encontrarás laTerm
clase allí. Ahora mire la anotación, dice@ContentEntityType
y allí:Entonces, lo que quieres es
porque la
label
clave de entidad esname
y labundle
clave de entidad esvid
. Agregué una->save()
llamada y supongo que también querías guardarla.fuente
$term = \Drupal\taxonomy\Entity\Term::create(array( 'name' => 'whatever', 'vid' => 'tags', )); $term->save();
me da un error grave: Llame al método indefinido Drupal \ taxonomy \ Entity \ Term :: getTypeEn este momento, debe agregar el término de otra manera (en comparación con esta respuesta). Primero, en su archivo, comience, debe escribir
Porque la clase de término aparece en Drupal \ taxonomy \ Entity. Y no necesita pasar taxonomy_term parametr a
porque solo se necesita un parámetro (matriz con valores) (debajo del código listado para este método en el módulo de taxonomía)
Entonces el ejemplo final es
fuente
Entity::save()
devuelve un int. Las constantesSAVED_NEW
oSAVED_UPDATED
dependiendo de la operación realizada. Sin embargo, si elimina->save()
y agrega$term->save();
, verá que$term
se actualiza con la información que se guardó en la base de datos. Ejemplo que ahora puede hacer$tid = $term->tid->value;
Las otras respuestas usan
entity_create()
, que funciona, pero no es tan agradable.fuente
Con
entityTypeManager()
:fuente
Es posible que desee ver cómo devel / devel_generate hace esto.
De devel_generate :
fuente
Antes de crear un término, es mejor verificar si existe, aquí está el código:
Fuente: https://www.btmash.com/article/2016-04-26/saving-and-retrieving-taxonomy-terms-programmatic-drupal-8
fuente