Last updated by evans.bernier on Thu, 2015-05-28 01:52
Explication du sujet
Avec la sortie de Drupal8 qui approche à grands pas, la création de modules sous cette nouvelle mouture de Drupal ne devra pas tarder. Évidemment, avec l'utilisation de Symfony au coeur de Drupal, il y a des impacts non négligables au niveau du développement de modules, cependant, ceci est pour le mieux.
Pour les néophytes, vous pouvez consulter le wiki d'une présentation passée sur l'introduction à Symfony (https://groups.drupal.org/node/424423).
Ne pas oublier de vider la cache puisqu'elle est activée par défaut dans Drupal8 et les changements que vous pourriez apporter aux fichiers de votre module pourrait ne pas être pris en compte sur-le-champ.
Architecture
La règle des "3Cs" est encore de mise, soit les modules "core", "contrib" et "custom". Désormais, il existe un dossier "modules" dans le dossier de Drupal qui correspond à sites/all/modules auparavant. À noter aussi que les modules "core" sont déjà regroupés sous le dossier "core".
- config/:configurations nécessaires à l'installation du module; (valeurs par défaut pour des formulaires, définitions des entités nécessaires au module, etc.)
- src/:code PHP pour les Controllers, Forms ou Blocks du module;
- templates/:templates "Twig" (pas obligatoire)
De plus, les règles de PSR-4 obligent une nomenclature au niveau des fichiers PHP d'un module afin que le chargement des classes se fassent correctement (ex.: src/Controller/FoobarController.php)
Yet Another "Module" Language*
Ce n'est pas la vraie définition de YAML qui est "Yet Another Markup Language", mais c'est ce qui connecte le tout dans votre module, que ce soit sa description, le "routing", les liens dans le menu, etc.
- foobar.info.yml: Correspond au fichier .info auparavant. Les propriétés "name", "description" et "package" permettent d'indiquer des informations afin de décrire le module au niveau de la page d'administration des modules. Les propriétés "type" et "core" sont obligatoires permettent respectivement d'indiquer si c'est un module/theme/profile et avec quelle version de Drupal il est compatible. Il est aussi possible de spécifier la propriété "hidden" afin de cacher le module.
- foobar.routing.yml: Le YAML le plus important. Permet d'indiquer à Drupal vers quel Controller/Form il doit envoyer la requête qu'il a reçue.
- foobar.links.menu.yml: Permet d'ajouter des éléments de menu (ex.: pour les pages d'administration)
Comment avoir des configurations par défaut ?
- Créer un fichier foobar.settings.yml sous config/install/;
- Spécifier les configurations qui sont nécessaires à votre module;
- Il suffit de les obtenir dans vos Controller/Form/Block en passant par \Drupal::config('foobar.settings')
Comment intégrer un "block" à notre module ?
- Créer un fichier FoobarBlock.php sous src/Plugin/Block/;
- Spécifier l'annotation dans l'entête de classe qui permettra d'informer Drupal que le module à un bloc; (ex.:
* @Block(
* id = "foobar_block",
* admin_label = @Translation("Foobar block"),
* ) - Définir les méthodes nécessaires à la construction d'un bloc, soit "build" pour ce qu'il doit générer, "buildForm" pour ce qu'il doit générer comme formulaire lorsqu'on ajoute le bloc dans l'écran et "blockSubmit" afin de gérer le "submit" fait sur le formulaire d'ajout de bloc
Comment utiliser les "templates" ?
- Doit créer un "hook_theme" dans un fichier .module (étrangement, ce n'est pas dans un YAML...) afin de lister les thèmes disponibles et quelles variables y sont utilisées;
- Créer les modèles twig.html dans le dossier templates
- Il suffit de modifier le retour dans vos Controller/Form/Block en spécifiant quel thème utilisé et les variables
Comment ajouter un formulaire d'administration ?
- Créer un fichier FoobarForm.php sous src/Plugin/Form/;
- Définir les méthodes nécessaires à la construction d'un formulaire, soit "buildForm" pour ce qu'il doit générer comme contrôles de saisie dans le formulaire et "submitForm" afin de gérer le "submit" fait par le formulaire;
- Éditer le routing.yml afin d'ajouter une "route" vers le formulaire, ainsi que le links.menu afin d'y ajouter un lien
Conclusion
Ceci reste un exemple très basique pour la création d'un module avec Drupal8, il y a beaucoup d'autres possibilités qui s'offrent à vous qui peut s'intégrer avec votre module comme la création d'entités, personnalisation des formulaires, la sécurité, etc.
Ressources:
https://www.drupal.org/developing/modules/8
http://brantwynn.github.io/d8slides/#/start
En pièce jointe, il y a un petit "module" qui a été utilisé pendant la présentation.
| Attachment | Size |
|---|---|
| foobar.tar_.gz | 2.73 KB |