Il est possible dans drupal 8 et 9 de surcharger l'auto-completion d'un champ « référence à un type d'entité », à la fois la requête générée (pour par exemple faire la recherche sur d'autres champs que le titre, mais aussi le label des éléments retournés.
Entité
-
-
Voici comment ajouter un basefield slug à un type d'entité client. La définition de cette propriété se trouvant dans la méthode baseFieldDefinitions de notre type d'entité :
-
À la différence d'une propriété « lien » (voir :
-
Je me suis rendu compte que je n'avais jamais documenté comment ajouter une propriété « référence à une entité » :
Pour un type d'entité « client » :
-
Voici comment installer un type d'entité personnalisé via un hook_update.
À noter, les types d'entités d'un module sont automatiquement installés lors de l'installation du module. Ce snippet n'est utile que pour un type d'entité créé à postériori.
-
Voici comment définir une propriété (basefield) « e-mail » sur un type d'entité.
-
Voila comment ajouter une propriétée faisant référence à un média sur un type d'entité :
-
Sous Drupal 8 il est possible de surcharger la classe du type d'entité « User » afin de par exemple ajouter nos propres getters et setters ou de modifier l'affichage par défaut d'un nom d'utilisateur.
-
Voici comment ajouter des suggestions de template à un type d'entité personnalisé en fonction du mode d'affichage (view_mode).
Ici mon module s’appelle « mon_module » et mon type d'entité personnalisé « resource » :
-
Voici comment supprimer le basefield « mon_champ_a_suppr » de mon type d'entité personnalisé « mon_type_entite ».
-
Pour un type d'entité personnalisé, les alias peuvent se gérer à l'aide de motifs via le module pathauto.
Mais à l'instar des nœuds, parfois nous voulons pouvoir avoir la main sur l'alias directement.
-
Sous drupal 8, les types d'entités, comme les noeuds, viennent avec leur classe pour gérer le contrôle d'accès (création / modification / visualisation / suppression).
Il est possible de surcharger ces classes pour personnaliser plus finement ce contrôle.
-
Pour modifier le formulaire de création d'un nœud sous drupal 8, on peut utiliser le bon vieux HOOK_form_alter(), mais on peut aussi faire quelque chose de plus « propre » en altérant le type d'entité pour redéfinir son formulaire.
Cela se passe en deux étapes.
-
Dans mon_module.install :
-
Dans mon_module.install :
-
Voici comment altérer un type d'entité config pour lui ajouter une propriété.
-
Prenons deux types d'entités custom : « Bière » et « Brasserie » avec une relation 1-n entre les deux dans le sens :
- Une bière provient d'une et d'une seule brasserie
- Une brasserie peut proposer N bières
Ainsi :
-
Le type nombre décimal peut-être pratique pour stocker tout nombre à virgule (un prix par exemple).
Voici comment attacher une propriété « nombre décimal » à un type d'entité personnalisé.
-
Pour créer un champ de base de type lien, dans la définition de votre entité :
-
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.
-
-
$fields['photos_number'] = BaseFieldDefinition::create('list_integer') ->setLabel(t('Nombre de photos autorisées')) ->setRequired(TRUE) ->setSettings(array( 'allowed_values' => [ 1 => t('1 photo'), 2 => t('2
-
$fields['subtitle'] = BaseFieldDefinition::create('string') ->setLabel(t('Sous-titre')) ->setDescription(t('Sous-titre de la diapositive')) ->setSetting('max_length', 255) ->setSetting('text_processing', 0) ->setDefaultValue('') ->setD
-
$fields['target'] = BaseFieldDefinition::create('list_string') ->setLabel(t('Cible de la diapositive')) ->setRequired(TRUE) ->setSetting('allowed_values', [ 'individuel' => t('individuel'), 'group' => t('groupe
-
$fields['score_team_2'] = BaseFieldDefinition::create('integer') ->setLabel('Score Team 2') ->setSetting('unsigned', TRUE) // Nombre « unsigned » donc sans - (uniquement positif) ->setSetting('min', 0) // valeur minimale ->setS
-
$fields['game_date'] = BaseFieldDefinition::create('datetime') ->setLabel(t('Date')) ->setDescription(t('The game\'s date')) ->setSettings(array( 'default_value' => '', 'max_length' => 50, 'text_processing' => 0, )) ->setDef
-
Ici mon type d'entitée est "group" :
-
Pour faire du ménage sur un site et supprimer tous les contenus de test, on peut biensûr le faire à la main, ou utiliser un script.
Celui qui suit fonctionne à la fois pour les types de contenu mais aussi pour les entités custom.
-
ECK (Entity Construction Kit) est un module qui permet de créer facilement vos types d'entités via l'interface d'administration de Drupal.
-
Chargement d'une entité :
-
Dans une fonction :
-
Le HOOK_install existe encore dans drupal 8, et il est donc possible d'en profiter pour populer automatiquement notre type d'entité lorsque l'on install le module qui la contient.
Toujours dans mon projet de site de pronostics, j'ai un type d'entité "Sport" qui contiendra l'ensemble des sports qui pourront caractériser une compétition.
-
-
Ayant l'envie de tester Drupal 8, sans prendre trop de risques, je me suis décidé à prendre comme prétexte la création d'un site de pronostics pour l'euro 2016 (oui je m'y prends tôt).
Un petit coup de modélisation de mon schéma de données, et hop c'est parti.