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
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.
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.
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
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 :
On test en désinstallant notre module et le réinstallant, c'est ok, notre champs existe !
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 !
Commentaires
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 !
En modifiant la vue, cela doit être facilement faisable je pense.
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