À la découverte de Drupal 8 - #2 : Création d'une entité avec fields

Posté le Vendredi 7 novembre 2014 - 16:07
Dernière mise à jour le Mercredi 23 novembre 2016 - 16:39

Suite de l'episode 1 : À la découverte de drupal 8 - #1 : Ma première entité

Aujourd'hui, nous continuons notre découverte de Drupal 8. Le but du jeu aujourd'hui est de créer une entité avec un champ personnalisé qui sera créé automatiquement lors de l'installation, via une grande nouveauté de Drupal 8, la gestion de la configuration.

Je continue mon site de pronostics pour l'occasion, c'est que l'euro 2016 arrive à grands pas ! Après l'entité League de l'épisode 1, nous allons cette fois gérer les équipes.Pourquoi je définie une équipe comme une entité et non pas un type de contenu ? Bonne question, pas vraiment de bonne réponse, c'est surtout car j'ai envie de jouer avec les entités !

Alors, comment est structurée une équipe ?

  • Id => La clé primaire
  • name => Le nom de l'équipe
  • logo => Le logo du club

Rien de bien compliqué pour les deux premiers attributs, ce seront des propriétés de base de mon entité. Le logo sera quand à lui un field, semblable à celui que l'on peut créer via l'interface d'administration, dans un type de contenu.

Création de l'entité

Comme dans l'épisode précédent, on va utiliser Console pour générer le module et l'entité.

On commence d'abord par vérifier s'il n'y a pas de mise à jours pour Console, on utilise pour ça composer. Via un terminal, à la racine de l'installation de Drupal :

composer update drupal/console
[scald=12:sdl_editor_representation]
Mise à jour de console via composer

On génère maintenant le module mespronos_teams qui contiendra l'entité

bin/console generate:module
  • Nom du module : Mespronos Teams
  • Nom machine : mespronos_teams
  • Description : Gestion des équipes
  • Pas de contrôleur (on verra ça plus tard)

On génère maintenant l'entité

bin/console generate:entity:content
  • Nom de l'entité : Team
  • Nom machine : team

On active le module via l'administration.

[scald=13:sdl_editor_representation]
Activation du module

Création du Champs

On peut maintenant ajouter des champs à notre entité via la field API (anciennement CCK dans Drupal 6, et dans le core depuis Drupal 7)

Via Gérer > Structure > Team Settings > Gérér les champs on créer un champ de type « image » dont le nom machine sera field_logo.

[scald=14:sdl_editor_representation]
Field logo dans l'administration

La configuration (CMI en action)

C'est super, on peut maintenant créer des équipes et leur affecter un logo. Par contre le soucis ici, c'est que si jamais je désactive mon module, je perds le champs que je viens de créer. Aussi, je ne peux pas en versionner la configuration, si jamais je viens la modifier plus tard. Mais heureusement pour nous l'initiative CMI « Configuration Management Initiative » a pensé à nous dans Drupal 8.

L'objectif de cette initiative est donc de pouvoir exporter toute la partie « configuration » de Drupal dans des fichiers YAML.

Via le fichier settings.php, on peut définir là où l'on veut stocker l'ensemble des fichiers YAML qui contiendront la configuration de drupal. Par défaut c'est dans un dossier dont le nom est généré aléatoirement dans le dossier /sites/monsites. Personnellement je préfère que ces éléments ne soient pas accessible sur internet, même si normalement le risque est minime. Pour cela à la fin du fichier settings.php je dé-commente et modifie les lignes suivantes :

$config_directories['active'] = '../config/active';
$config_directories['staging'] = '../config/staging';

On peut exporter d'un coup l'ensemble de la configuration de notre site via drush avec la commande config-export :

drush @monsite config-export

[scald=15:sdl_editor_representation]
Fichiers de configuration

Revenons à nos moutons, nous allons donc chercher la configuration de notre field et l'intégré à notre module. Afin que lors de l'installation du module, le field soit automatiquement créé. La configuration du champs est répartie dans deux champs :

field.field.team.team.field_logo.yml
field.storage.team.field_logo.yml

Pour que ces fichiers soient pris en compte lors de l'installation il faut les placer dans un dossier config/install dans notre module :

[scald=16:sdl_editor_representation]
Structure du module

On test en désinstallant notre module et le réinstallant, c'est ok, notre champs existe !

[scald=14:sdl_editor_representation]
Youpi Youhou !

C'est fini pour aujourd'hui, comme la dernière fois vous pouvez trouver l'ensemble de mes modules sur github à l'adresse suivante : https://github.com/kgaut/mespronos

N'hésitez-pas si vous avez des remarques ou des questions !

 

Comments

Posté le Mardi 3 février 2015 - 12:39

Bonjour,
Articles très instructifs, bravo !

Après les avoir suivis, j'essaye maintenant d'afficher le logo de l'équipe dans la liste des équipe (dans l'admin). Avez-vous une idée de comment cela serait possible ?

Par avance, Merci !

Posté le Mardi 3 février 2015 - 14:06

En modifiant la vue, cela doit être facilement faisable je pense.
 

Lu

Posté le Mardi 18 juillet 2017 - 09:50

Bonjour ! Merci pour cet article instructif.
Si vous le permettez j'ai une question :
Je suis en train de développer un module custom sur Drupal 8 qui, à partir du nom machine d'un contenu déjà existant, doit pouvoir en modifier les champs. Comment faire pour que mon code PHP modifie par exemple le champ "auteur" (en la remplaçant par la valeur d'une variable par exemple ) si je donne comme paramètre à ma fonction le nom machine "harry_potter" ? Merci d'avance :)

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...