Drupal 8, 9 & 10 - Ajouter des propriétés à un type d'entité existant

Drupal vient avec des types d'entité prédéfinis (Node, ou User par exemple). À ces type d'entité il est possible d'ajouter des fields, mais il est aussi possible d'ajouter des propriétés.

Voici comment ajouter des propriétés (prénom et nom) aux utilisateurs.

Dans le fichier monmodule.module :

function monmodule_entity_base_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) {
  if ($entity_type->id() === 'user') {
    $fields = [];

    $fields['firstname'] = \Drupal\Core\Field\BaseFieldDefinition::create('string')
      ->setLabel(t('Firstname'))
      ->setSettings(array(
        'max_length' => 100,
        'text_processing' => 0,
      ))
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    $fields['lastname'] = \Drupal\Core\Field\BaseFieldDefinition::create('string')
      ->setLabel(t('Lastname'))
      ->setSettings(array(
        'max_length' => 100,
        'text_processing' => 0,
      ))
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE);

    return $fields;
  }
}

Dans le fichier monmodule.install :

/**
 * Create user additional properties
 */
function monmodule_update_8001() {
  $entity_type_id = 'user';
  $fields = ['firstname', 'lastname'];
  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  \Drupal::entityTypeManager()->clearCachedDefinitions();
  $entity_type = $definition_update_manager->getEntityType($entity_type_id);
  foreach ($fields as $field) {
    $fieldDefinition = monmodule_entity_base_field_info($entity_type)[$field];
    $definition_update_manager->installFieldStorageDefinition($field, $entity_type_id, $entity_type_id, $fieldDefinition);
  }
}

 

Contenus en rapport

Commentaires

C'est quoi un bundle ?

Ajouter un commentaire

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