Ajouter un champ custom à l'entité User dans un module custom en Drupal 8

  • | Développement
Ajouter Champs à l'entité User

Il arrive fréquemment qu'on veuille customiser les utilisateurs de Drupal en ajoutant par exemple un champs prénom, nom ou age. Voyons comment on va ajouter un champ custom à l'entité User dans un module custom.

On va partir d'un module custom qui s'appelle "mon_module" et d'un champ firstname qu'on souhaite ajouter à notre entité. 

1. Ajouter un champ custom à l'entité User dans l'admin de Drupal

Pour commencer on va aller ajouter notre champ firstname dans l'entité User dans le back-office de Drupal.

On se rend sur /admin/config/people/accounts/fields, on clique sur "Ajouter un champ" et on ajoute le champ firstname.

Ajouter un champ à l'entité User dans l'admin de Drupal 8

On finalise l'ajout :

Ajouter un champ à l'entité User

On enregistre et on valide ce champ.

Quand on va sur admin/config/people/accounts/form-display ou sur admin/config/people/accounts/display ce champ est bien visible dans le formulaire et dans l'affichage de l'entité. Parfait! On peut passer à l'étape suivante.


2. Exporter la configuration du champ

Comme le mentionne cet article https://www.drupal.org/node/2693979 on va aller exporter la configuration, ici non pas pour un type de contenu mais pour les utilisateurs, ce qui est la même chose finalement.

On se rend dans admin/config/development/configuration/single/export et on va rechercher 2 fichiers liés à notre champ.

1. La configuration du champ

On choisit le type de configuration "champ" et on va chercher le champs qu'on veut exporter "Firstname".

Configuration du champ à exporter de l'entité User

On crée un fichier avec le nom de fichier indiqué dans l'export, ici c'est "field.field.user.user.field_firstname.yml" et on colle la configuration du champ.

 

2. La configuration du stockage de champ

On choisit le type de configuration "Stockage de champ" et on va chercher le champ qu'on veut exporter "user.field_firstname".

Configuration du stockage de champ à exporter de l'entité User

On crée un fichier avec le nom de fichier indiqué dans l'export, ici c'est "field.storage.user.field_firstname.yml" et on colle la configuration du stockage de champ.

 

3. Ajouter les fichiers de configuration à notre module custom

Dans notre module "mon_module" et à la racine on crée les répertoires "config/install" et on colle nos 2 fichiers de configuration.

Fichiers de configuration pour créer un champ sur l'entité User

 

Pour tester notre module, on doit au préalable supprimer le champ Firstname qu'on a créé dans le back-office. Puis on peut activer notre module pour tester si le champ est bien créé.

Après avoir activer le module on voit bien notre champ qui est ajouté en revanche le champ n'est pas visible sur le formulaire ni sur l'affichage.

Si vous cherchez à ajouter les 2 fichiers de configurations supplémentaires, pour pallier au problème, core.entity_form_display.user.user.default.yml et core.entity_view_display.user.user.default.yml quand vous installerez le module il y aura un conflit car la config user existe déjà.

Une solution possible ci-dessous.


4. Ajouter une configuration de formulaire et d'affichage de l'entité.

Pour ajouter une configuration de formulaire et d'affichage sans avoir le message d'erreur que la configuration User existe déjà. On peut ajouter un fichier .install à notre module et implémenter hook_install().

<?php

/**
 * Implements hook_install().
 */
function martin_media_user_install() {

  $entity_type         = 'user';
  $bundle              = 'user';
  $field['field_name'] = 'field_firstname'; 

  entity_get_form_display($entity_type, $bundle, 'default')
    ->setComponent($field['field_name'], array())
    ->save();

  entity_get_display($entity_type, $bundle, 'default')
    ->setComponent($field['field_name'], array())
    ->save();

}

Avec ce code on initialise avec une conf vide par défaut la configuration du formulaire et de l'affichage.

On peut également customiser l'affichage en ajoutant de la configuration dans le tableau passé en paramètre de setComponent.

L'auteur de cet article
Julien Krier
Responsable Digital, ayant occupé différents postes en informatique depuis 2001, Julien Krier a travaillé sur de multiples plateformes, sites de contenu ou e-commerce à fort trafic. Il est spécialisé dans les technologies web sur les CMS comme Drupal et les Framework Php comme Symfony.
Cet article vous a aidé?
Average: 4 (1 voter)
Partagez cet article
Articles sur le même sujet
Patcher un module de DrupalIl peut arriver que sur une mise à jour par exemple on se retrouve avec un bug sur un module. Des patchs peuvent alors corriger le problème.
Configurer son environnement de DEV pour Drupal 8Avant de commencer à modifier une instance de Drupal 8 et notamment pour faire le thème du site, il faut configurer son environnement de développement.
hook_help() : créer une page d'aide pour un module en Drupal 8Pour développer de bons modules pérennes, il est important d'avoir des informations ou de la documentation sur le fonctionnement du module ou son installation. Pour enregistrer ces informations on implémente le hook_help().