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,
])
Ajouter un commentaire