J'essaie d'ajouter beaucoup de termes (~ 200) à un vocabulaire, mais je ne trouve aucun module d'importation mis à jour pour Drupal 8, et il semble que les fonctions permettant de le faire dans Drupal 7 n'existent pas dans Drupal 8. Alors, quelqu'un peut-il m'indiquer la bonne direction à suivre?
J'ai essayé de le faire avec entity_create
, comme suggéré dans les commentaires, avec ce code:
$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));
mais j'ai eu cette erreur:
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).
Des idées?
taxonomy-terms
8
Samsquanch
la source
la source
entity_create()
$term_create = entity_create('taxonomy_term', array('name' => 'test', 'vocabulary_name' => 'client'));
mais j'ai eu l'erreurDrupal\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).
- Des idées?vid
à la place devocabulary_name
. On dirait que la colonne est encorevid
entaxonomy_term_data
, mais c'est le nom de vocab au lieu de id maintenantRéponses:
Vous savez que vous voulez quelque chose du module taxonomie, vous devez donc commencer par regarder
Drupal\taxonomy\Entity
- ou le répertoire correspondant - vous y trouverez laTerm
classe. Maintenant, regardez l'annotation, il est écrit@ContentEntityType
:Alors, ce que vous voulez c'est
parce que la
label
clé d'entité estname
et labundle
clé d'entité estvid
. J'ai ajouté un->save()
appel et je suppose que vous vouliez le sauvegarder également.la source
$term = \Drupal\taxonomy\Entity\Term::create(array( 'name' => 'whatever', 'vid' => 'tags', )); $term->save();
me donne une erreur fatale: appel de la méthode non définie Drupal \ taxonomy \ Entity \ Term :: getTypeA ce stade, vous devriez ajouter le terme petit à petit d’une autre manière (par rapport à cette réponse). Tout d’abord dans votre fichier, commencez par écrire
Parce que la classe Term est listée dans Drupal \ taxonomy \ Entity. Et vous n'avez pas besoin de passer taxonomy_term parametr à
car un seul paramètre est nécessaire (tableau avec valeurs) (code ci-dessous pour cette méthode dans le module taxonomie)
Donc, le dernier exemple est
la source
Entity::save()
renvoie un int. Soit les constantesSAVED_NEW
ou enSAVED_UPDATED
fonction de l'opération effectuée. Cependant, si vous deviez supprimer->save()
et ajouter$term->save();
, vous verrez alors que$term
les informations qui ont été enregistrées dans la base de données sont mises à jour. Exemple que vous pouvez maintenant faire$tid = $term->tid->value;
Les autres réponses utilisent
entity_create()
, ce qui fonctionne, mais n’est pas aussi agréable.la source
Avec
entityTypeManager()
:la source
Vous voudrez peut-être voir comment devel / devel_generate fait cela.
De devel_generate :
la source
Avant de créer un terme, il est préférable de vérifier s'il existe, voici le code:
Source: https://www.btmash.com/article/2016-04-26/saving-and-retrieving-taxonomy-terms-programmatically-drupal-8
la source