Découvrez nos offres pour faire du digital le levier de votre croissance !
Téléchargez le Guide Ultime de gestion de projet digitale pour vous aider à piloter vos transformations et faire les bons choix !
Les hooks sont utilisés pour une multitude d’actions comme le prétraitement des variables avant leurs affichages, la modification des listes d’information ou encore la manipulation des formulaires, etc.
Les hooks sont des fonctions spécialement nommées et appelées à des moments précis. Ils servent à modifier le comportement de base de Drupal. Chaque hook a un nom unique et un ensemble défini de paramètres.
Il faut savoir que n’importe quel nombre de modules peut implémenter le même hook (un même hook par module). Cela permet à plusieurs modules de contribuer au résultat final.
Par exemple, vous pouvez avoir deux ou trois modules différents qui implémentent le hook " hook_toolbar() " afin d’ajouter des liens dans la barre d’outils d’administration.
Un hook se déclare dans un fichier PHP à la racine d’un module (ou thème) et qui a pour extension " .module " pour les modules et " .theme " pour les thèmes. Mise à part l’extension qui est différente, l’utilisation est strictement identique.
Dans la documentation officielle1, la signature d’un hook est présentée sous la forme : " hook_nom_de_la_fonction(paramètres) ".
Le terme " hook " est à remplacer par le nom machine de votre module ou thème.
Par exemple, si je souhaite implémenter le hook hook_user_login($account) dans le module " my_module ", j’écrirais :
function my_module_user_login($account) {
}
Le hook hook_user_login est déclenché juste après que l’utilisateur se soit authentifié. Le paramètre " $account " est un objet User représentant l’utilisateur qui vient de se connecter et qui contient un tas d’informations sur lui.
Nous allons imaginer que je désire lui souhaiter la bienvenue avec un message personnalisé grâce au service Messenger. J’écrirais mon hook comme ceci dans mon fichier PHP " my_module.module " :
function my_module_user_login($account) {
$message = "Bienvenu " . $account->getAccountName() . " vous êtes désormais connecté !";
Drupal::messenger()->addMessage($message);
}
Voici une liste de quelques hooks fréquemment utilisés :
Si vous souhaitez que d’autres modules puissent interagir avec votre code, il est possible de créer ses propres hook.
Le service Module Handler permet avec sa fonction " invokeAll " de déclencher le hook de votre choix. Je vais reprendre le hook user_login donné en exemple plus haut.
Imaginons que je souhaite permettre à d’autres modules de modifier le message qui s’ affichera :
$message = "Bienvenu " . $account->getAccountName() . " vous êtes désormais connecté !";
\Drupal::moduleHandler()->invokeAll('alter_message', [&$message]);
\Drupal::messenger()->addMessage($message);
Juste avant d'afficher le message j’ai ajouté l’invocation d’un hook que j’ai appelé arbitrairement " alter_message " en passant un tableau de paramètres en paramètre. Ici je n’ai besoin que d'un seul paramètre, le tableau ne contient donc qu'un seul élément, $message.
Maintenant, n’importe quel module peut implémenter mon hook " hook_alter_message($message) " :
function my_module_alter_message(&$message) {
$message = 'Nouveau message !!!!';
}
En procédant ainsi, j’ai changé $message au moment de l'invocation du hook, juste avant qu'il ne soit afficher. Vous noterez qu’il n’y a pas besoin de retourner notre variable $message puisqu’elle est passée en référence dans l’argument de la fonction !
J’espère que cet article vous a permis de mieux comprendre le fonctionnement des hooks et qu’il vous aidera dans vos futurs projets. Si vous souhaitez approfondir vos connaissances sur Drupal, je vous conseille ces deux articles :
Vous avez aimé cet article, je vous conseille de lire également ces deux articles :
Source : Drupal
Crédit photo : Kosal Hor