Définition
Un hook est une fonction prédéfinie par Drupal ou un module. Chaque Hook est exécuté à un moment prédéfini et pourra modifier le comportement du core de drupal ou d'autres modules. Comme n'importe quelle fonction, chaque hook a un nom unique, peut utiliser des paramètres et renvoie une valeur.
Chaque hook est constitué de trois parties : un nom, une mise en oeuvre et une définition. La mise en oeuvre est l'ensemble du code qui va être exécuté par le hook. La définition est fournie soit par le cœur, soit par un autre module. Elle va fournir le nom du hook, ses paramètres et surtout le moment où il doit être exécuté.
Plusieurs modules peuvent exécuter le même hook. Dans ce cas, ils seront exécuté les uns après les autres dans l'ordre de la colonne poids de la table system. Pour voir ce poids, il est possible d'utiliser la commande drush "drush cget core.extension". A poids identique,Drupal exécute les modules dans l'ordre alphabétique de leur nom machine. Il est possible de changer le poids d'un module lors de son installation grâce à la fonction module_set_weight('nommodule', poids). Par exemple, les modules "book", "comment", et "addtoany" utilise le hook "hook_entity_view " pour modifier l'affichage d'une entité. A poids identique, les modifications apportées par addtonany seraient exécutées en premier.
Les hook suivent une convention de nommage qui permet à Drupal de savoir quand les lancer. Le mot hook, doit être remplacé par le nom de votre module. Par exemple, dans le module "comment", le hook "hook_entity_view" a été renommé "comment_entity_view".
A quoi sert un hook ?
Un hook peut servir à faire trois choses :
- répondre à une question en renvoyant un tableau de données
- modifier des données
- réagir à une situation.
Les hooks qui répondent à une question renvoie un tableau de données. Par exemple le hook "hook_hook_info" renvoie la liste des hooks qu'un module utilise.
Les hooks qui modifient des données comportent souvent dans leur nom le mot ALTER. Par exemple le hook "hook_css_alter" va modifier un fichier css
Les hooks qui réagissent à une situation sont semblables à des événements. Le module "comment" contient de nombreux hooks de ce type. Par exemple à chaque fois qu'une entité est créée, le hook_entity_insert est exécuté pour créer le système de commentaire relatif à cette entité.