Drupal 8 - Entité - Champ de base « Référence à un terme de taxonomie »

Posté le Vendredi 28 juillet 2017 - 12:01
Dernière mise à jour le Jeudi 11 avril 2019 - 09:26

Pour faire un champ de base référence à un terme de taxonomie, on va utiliser le type "entity_reference", en lui passant évidement le nom du vocabulaire, (ici "option_types") :

$fields['type'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel(t('Catégorie'))
      ->setSetting('target_type', 'taxonomy_term')
      ->setSetting('handler', 'default:taxonomy_term')
      ->setSetting('handler_settings', [
         // ici définir l'id du vocabulaire
          'target_bundles' => [ 'option_types' => 'option_types']
      ])
      //on utilisera l'affichage en mode "radio / checkbox" en fonction de la cardinalité
      ->setDisplayOptions('form', array(
        'type' => 'options_buttons',
        'weight' => 3,
      ))
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

Pour utiliser le formulaire type "tag" :

    $fields['type'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel(t('Catégorie'))
      ->setSetting('target_type', 'taxonomy_term')
      ->setSetting('handler', 'default:taxonomy_term')
      ->setSetting('handler_settings', [
          'target_bundles' => [ 'option_types' => 'option_types']
      ])
      ->setDisplayOptions('form', array(
        'type' => 'entity_reference_autocomplete',
        'weight' => 3,
        'settings' => array(
          'match_operator' => 'CONTAINS',
          'size' => '10',
          'autocomplete_type' => 'tags',
          'placeholder' => '',
        ),
      ))
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

Cardinalité

Pour avoir une cardinalité illimitée (autant de valeurs possibles que l'utilisateur le désir) ajouter l'appel suivant à la déclaration de votre propriété :


->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)

Création automatiques des termes

Pour permettre la création automatique des terme de taxonomy dans le vocabulaire, les lignes :

->setSetting('handler_settings', [
  'target_bundles' => [ 'option_types' => 'option_types']
])

Deviennent :

->setSetting('handler_settings', [
  'target_bundles' => [ 'option_types' => 'option_types'],
  'auto_create' => TRUE,
])

 

 

Aller plus loin ?

Ajouter un commentaire

Ne sera pas publié

CAPTCHA Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...