Actuellement, j'utilise cela pour ajouter des champs utilisateur par programme:
function openid_connect_entity_base_field_info(EntityTypeInterface $entity_type) {
if ($entity_type->id() === 'user') {
$fields['field_family_name'] = BaseFieldDefinition::create('string')
->setLabel(t('Family Name'))
->setDescription(t('Add a description'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setDisplayOptions('form', array(
'type' => 'string_text_field',
'weight' => 30,
'default_value' => 0,
))
->setDisplayConfigurable('form', TRUE);
}
return $fields;
}
mais il en résulte que l'administrateur du site ne peut pas désinstaller mon module comme indiqué:
Existe-t-il d'autres moyens d'ajouter par programmation des champs utilisateur sans que l'administrateur du site Web ne soit pas en mesure de désinstaller le module qui a ajouté les champs utilisateur par programmation?
J'ai trouvé une solution en utilisant des fichiers .yml dans le répertoire config/install de vos modules.
1. Créez le champ utilisateur
allez dans Configuration -> Personnes -> Paramètres du compte -> Gérer les champs et appuyez sur "+ Ajouter un champ". Je recommande de donner au champ un nom unique lisible par machine pour éviter les champs utilisateur conflictuels.
Activez le champ utilisateur dans Gérer l'affichage du formulaire et Gérer l'affichage si vous souhaitez qu'il apparaisse dans la page de modification du profil et d'inscription des utilisateurs.
2.Exportation de la configuration du champ utilisateur
allez dans Configuration -> Développement -> Synchronisation de la configuration -> Exporter -> Élément unique
Une fois que vous arrivez à un écran similaire à celui ci-dessous, définissez le type de configuration sur "Champ" puis définissez le nom de la configuration sur le champ que vous avez créé.
Dans vos dossiers Config/install dossier (créez-en un si nécessaire) créez un nouveau fichier nommé d'après le nom de fichier surligné en rouge ci-dessous.
Enfin, copiez le texte yml dans le fichier que vous venez de créer.
puis définissez le type de configuration sur "Field Storage" puis définissez le nom de la configuration sur le champ utilisateur que vous avez créé.
Dans votre dossier Config/install des modules (créez-en un si nécessaire) créez un nouveau fichier nommé d'après le nom de fichier surligné en rouge ci-dessous (ne copiez pas celui de l'exemple votre champ utilisateur aura un nom différent).
Enfin, copiez le texte yml dans le fichier que vous venez de créer.
VOUS AVEZ BESOIN DES DEUX FICHIERS YML POUR CRÉER PAR PROGRAMMATION UN CHAMP UTILISATEUR
Je recommande de le faire pour chaque champ utilisateur que vous souhaitez ajouter par programme plutôt que de copier la configuration et de modifier quelques propriétés.
Avec cette méthode, vous pouvez désinstaller le module qui a créé ces champs utilisateur.
Réponse mise à jour:
Vous pouvez inclure le champ comme configuration par défaut lors de l'installation du module. En ajoutant la configuration de champ aux fichiers exportables (fichiers yaml), ceux-ci peuvent ensuite être installés et ajoutés. Lors de la désinstallation du module, le champ et les données resteront.
Dans votre module, créez les dossiers config/install
et y placer les fichiers de configuration: Par exemple, si j'ajoute un champ field_test_email
Je placerais le stockage sur le terrain puis l'instance sur l'entité Utilisateur.
field.storage.user.field_test_email.yml
field.field.user.user.field_test_email.yml
Ancienne réponse:
Si vous souhaitez conserver les champs et leurs données, la réponse courte est Non, vous ne pouvez pas et ne devriez pas . Les définitions de champ, la configuration sont couplées à son créateur "le module", et lors de la désinstallation tout ce qu'il a fait s'en va avec.
Drupal supportait la désactivation d'un module, mais cela a été supprimé. Voir l'explication ici: https://www.drupal.org/node/2225029
Un énorme débat et une réflexion approfondie ont eu lieu à ce sujet, avec des discussions fortes des deux côtés. Les raisons en sont les suivantes: * Parce que les mises à niveau de certains modules contrib ne fonctionnent pas réellement (et ne peuvent pas> fonctionner) si la mise à niveau est désactivée. * Parce que les données laissées par un module désactivé qui est réactivé par la suite> provoquent des problèmes d'intégrité et des pannes. * Certaines mises à niveau ont laissé derrière elles une perte de données en raison de choses comme des dépendances inattendues, des plugins ou des hooks indisponibles aux moments clés - lorsque les choses ont été désactivées. .. cette question comporte plusieurs centaines d'arguments, il est donc injuste de trop résumer.
Lors d'une désinstallation, différents validateurs sont appelés pour garantir que le système ne casse pas ou ne conserve pas les données qui ne peuvent pas être traitées ultérieurement. Pour votre cas, c'est le validateur FieldModuleUninstallValidator
qui vous donne ces messages d'erreur.
Donc, pour désinstaller le module, toutes les données doivent être supprimées; Vous pouvez essayer d'utiliser la suppression en bloc de l'API de champ pour cela: https://api.drupal.org/api/drupal/core!modules!field!field.purge.inc/group/field_purge/8.2.x