Blog ENI : Toute la veille numérique !
🚀 PROLONGATION : Jusqu'à -30% sur tous les
livres en ligne, vidéos & e-formations. Cliquez ici
💥 Interessé(e) par un accès illimité à
tous nos livres & vidéos, sur l'IA, le dev, les réseaux... ? Cliquez ici
  1. Livres et vidéos
  2. Drupal 10
  3. Techniques avancées
Extrait - Drupal 10 Le guide complet pour le développement de solutions web robustes
Extraits du livre
Drupal 10 Le guide complet pour le développement de solutions web robustes Revenir à la page d'achat du livre

Techniques avancées

Introduction

Drupal, en tant que système de gestion de contenu, n’est pas seulement flexible dans sa capacité à gérer le contenu web, il est aussi extrêmement robuste lorsqu’il s’agit de personnaliser son comportement à travers des modules ou des extensions développés sur mesure. Dans ce chapitre, nous allons plonger dans des techniques de développement avancées qui vous permettront de manipuler Drupal de manière plus précise et efficace.

Nous commencerons par explorer comment intégrer des librairies personnalisées dans Drupal, en discutant de la déclaration, la gestion et l’injection de dépendances. 

Ensuite, nous aborderons la création et l’utilisation de services personnalisés. Cela inclut également l’apprentissage de l’utilisation de services existants et comment Drupal intègre des pratiques de développement moderne pour une architecture logicielle saine.

La gestion de tâches planifiées et d’opérations batch sera notre troisième grand thème. Ici, vous apprendrez à programmer et à gérer des tâches périodiques avec CRON, ainsi qu’à créer des processus par lots pour traiter de grandes quantités de données en minimisant l’impact sur les performances du site.

Enfin, nous conclurons...

Librairies personnalisées

L’utilisation de librairies personnalisées est un moyen efficace de centraliser et de réutiliser le code au sein de vos projets.  Pour commencer, vous devez déclarer vos librairies de manière appropriée. Drupal gère ces déclarations à travers un fichier nommé [module or theme name].libraries.yml, associé à chaque module ou thème.

Les sous-sections suivantes vous donneront une base solide pour comprendre les mécanismes qui régissent la création et l’intégration de librairies personnalisées dans votre application Drupal. N’hésitez pas à consulter la documentation officielle pour en apprendre davantage sur le sujet.

Pour en savoir plus, rendez-vous sur ce lien : https://www.drupal.org/docs/develop/creating-modules/adding-assets-css-js-to-a-drupal-module-via-librariesyml

1. Créer et déclarer une librairie

Pour déclarer une librairie, vous devez spécifier son nom, les fichiers CSS et/ou JavaScript qu’elle contient, ainsi que toute dépendance externe ou interne nécessaire à son fonctionnement.

Voyons cela au travers de l’exemple suivant où nous déclarons une librairie appelée library_example :

library_example: 
 version: 1.x 
 css: 
   theme: 
     css/library_example.css: {} 
 js: 
   js/library_example.js: {} 
 dependencies: 
   - core/drupal 
   - core/drupalSettings 
   - core/once 

Cette configuration montre une librairie avec des fichiers CSS et JavaScript spécifiques, ainsi que des dépendances essentielles au fonctionnement de la librairie dans l’écosystème de Drupal.

images/13EI01.png

Examinons chaque dépendance pour comprendre leur utilité :

  • core/drupal : c’est la base...

Services

Les services dans Drupal sont des objets conçus pour réaliser des tâches spécifiques, organisés de manière à être utilisables partout dans l’application. Ils sont comparables à des helpers réalisant des tâches potentiellement complexes et récurrentes.

Les services sont une partie intégrante du conteneur de services de Drupal, qui est une implémentation du motif de conception Dependency Injection Container.

L’utilisation des services peut grandement améliorer la modularité et la testabilité de votre application.

1. Créer des services personnalisés

La méthode la plus simple pour créer un nouveau service consiste à utiliser Drush, qui peut générer automatiquement le code et les fichiers nécessaires :

drush generate service:custom 
# Alias 
drush generate custom-service 

Une série de questions vous sera posée afin de créer le squelette de ce service. Ceci sera illustré en créant un service ServiceExample avec comme dépendance le service Database permettant d’envoyer des requêtes à la base de données.

images/13EI02.png

Cette commande génère ou modifie deux fichiers :

  • my_module.services.yml : il déclare le(s) service(s), la classe qui le gère et les services dont il dépend.

services: 
 my_module.service_example: 
   class: Drupal\my_module\ServiceExample 
   arguments: ['@database'] 

Dans cet exemple, my_module.service_example est un service qui dépend d’un autre service de base de Drupal : le service de base de données. Le mot-clé arguments est utilisé pour injecter...

Tâches planifiées et traitement par lots

La gestion des tâches planifiées et le traitement par lots sont essentiels pour maintenir l’efficacité et la performance des systèmes.

Ces fonctionnalités permettent de décomposer des processus potentiellement lourds en tâches gérables qui peuvent être exécutées à intervalles réguliers ou en parallèle des opérations normales du site, assurant ainsi une meilleure expérience utilisateur et une utilisation optimale des ressources du serveur.

1. Tâches CRON

Drupal utilise CRON pour exécuter des tâches périodiques programmées, qui sont cruciales pour la maintenance régulière du site, telles que la mise à jour des index de recherche, la vérification des mises à jour de sécurité, ou la purge des caches.

a. Déclencher les tâches CRON

La flexibilité de Drupal permet de déclencher des tâches CRON de plusieurs manières, en fonction des besoins spécifiques du site et de sa configuration.

Déclenchement manuel

Les administrateurs de site peuvent déclencher manuellement les tâches CRON à partir de l’interface d’administration de Drupal.

 Depuis le menu d’administration, cliquez sur Configuration.

 Naviguez ensuite vers System - Cron.

Vous accédez alors à la page de configuration du CRON vous permettant :

  • de déclencher manuellement la tâche en cliquant sur le bouton Run CRON ;

  • d’obtenir une URL de CRON externe (son utilité est détaillée plus bas) ;

  • d’activer/désactiver les logs lors du passage de la tâche CRON, ce qui peut aider à surveiller et à diagnostiquer les performances ou les erreurs des tâches exécutées ;

  • de configurer un intervalle de temps permettant d’indiquer à Drupal de déclencher le CRON lorsqu’un visiteur accède au site si cet intervalle de temps est expiré.

images/13EI03.png

Déclenchement programmé

Dans la même page de configuration de CRON mentionnée précédemment, vous pouvez définir à quelle fréquence les tâches CRON doivent être exécutées via l’élément...

Événements et abonnés d’événements

Dans Drupal, la gestion des interactions entre différents composants du système peut être réalisée à travers deux mécanismes principaux : les hooks et les événements (avec abonnés). Les hooks ont longtemps été la pierre angulaire de la programmation Drupal, permettant de modifier le comportement du noyau et des modules sans y toucher directement.

Désormais, Drupal intègre le composant EventDispatcher de Symfony, qui permet aux modules de réagir aux événements déclenchés dans le système ou de déclencher des événements personnalisés. Les abonnés d’événements (Event Subscriber) peuvent offrir une meilleure organisation et une plus grande réutilisabilité du code, ce qui est particulièrement utile dans des projets complexes ou de grande envergure.

Il n’y a pas de différence significative en termes de performance entre les deux approches pour la majorité des cas d’usage. Le choix dépend de votre préférence pour une approche plus traditionnelle et rapide à mettre en place avec les hooks de Drupal ou une approche orientée objet plus moderne et structurée avec les événements et abonnés d’événements Symfony.

Dans la suite de cette section, nous nous focaliserons sur cette seconde approche utilisant les composants Symfony.

1. S’abonner à un événement

Pour savoir à quel événement vous devriez vous abonner dans Drupal, il est important de comprendre la nature de l’action que vous souhaitez effectuer et quand elle doit se produire dans le flux d’exécution de l’application.

La première étape consiste souvent à consulter la documentation officielle de Drupal ou de Symfony (puisque Drupal utilise le composant Event Dispatcher de Symfony pour la gestion des événements). La documentation peut lister tous les événements prédéfinis que vous pouvez utiliser. Par exemple, voici où vous pouvez trouver une liste des événements prédéfinis par Drupal : https://api.drupal.org/api/drupal/core%21core.api.php/group/events/11.x...