Comprendre le fonctionnement des hooks PrestaShop
Les hooks sont le mécanisme central qui permet à un module d’ajouter du comportement à PrestaShop sans toucher au code du cœur. Comprendre leur fonctionnement change la façon d’évaluer si un besoin est réalisable simplement, ou s’il demande une intervention plus lourde.
Le principe en pratique
PrestaShop exécute son code normalement, et à certains endroits précis du flux, il appelle tous les modules enregistrés sur le hook correspondant, en leur laissant l’occasion d’ajouter du contenu ou d’exécuter une action. Un hook d’affichage comme displayHeader permet par exemple à un module d’insérer du CSS ou du JavaScript dans l’en-tête de chaque page. Un hook d’action comme actionValidateOrder se déclenche juste après la validation d’une commande, ce qui permet à un module d’envoyer une notification, de synchroniser un stock externe ou de déclencher un webhook.
Chaque hook correspond à un moment précis et à un type de contenu ou d’action attendu : certains sont faits pour afficher du HTML à un endroit du gabarit, d’autres pour exécuter une action sans rien afficher. Utiliser un hook prévu pour de l’affichage afin d’y exécuter une action lourde, ou l’inverse, est une source fréquente de bugs.
La liste des hooks disponibles évolue selon la version de PrestaShop : certains hooks existants sur une ancienne version disparaissent ou changent de nom lors d’une montée de version majeure, ce qui explique qu’un module ancien puisse cesser de fonctionner après une mise à jour.
Identifier le bon hook pour un besoin donné
-
Décrire précisément le moment souhaité
Avant tout est-ce au chargement d’une page, après validation d’une commande, à l’ajout d’un produit au panier : préciser le déclencheur exact oriente directement vers la famille de hooks concernée.
-
Distinguer affichage et action
Un besoin d’affichage (ajouter un bloc, un message, un widget) et un besoin d’action (envoyer un e-mail, appeler une API externe, modifier une donnée) ne mobilisent pas le même type de hook.
-
Consulter la documentation officielle du hook ciblé
Chaque hook attend et fournit des paramètres différents (par exemple l’objet commande pour un hook lié à la commande), qu’il faut connaître avant d’écrire le code du module.
-
Tester le déclenchement réel
Un hook théoriquement adapté peut se déclencher à un moment légèrement différent de ce qui était attendu ; une vérification concrète (par exemple via un journal ou le mode debug) confirme le comportement réel avant de construire toute la logique autour.
public function install()
{
return parent::install()
&& $this->registerHook('displayHeader')
&& $this->registerHook('actionValidateOrder');
}
public function hookDisplayHeader($params)
{
return $this->context->smarty->fetch('module:mon-module/views/templates/hook/header.tpl');
}
Les signes d’un problème lié aux hooks
- Un bloc ajouté par un module qui apparaît en double ou au mauvais endroit sur une page
- Une action censée se déclencher après validation de commande qui ne se produit jamais
- Un module qui fonctionnait bien avant une mise à jour de PrestaShop et qui a cessé de s’afficher
- Deux modules qui semblent entrer en conflit sur le même emplacement d’affichage
Questions fréquentes
Un même hook peut-il être utilisé par plusieurs modules à la fois ?
Que se passe-t-il si aucun hook ne correspond au besoin ?
Comment savoir sur quels hooks un module est déjà inscrit ?
Décrivez votre besoin en 1 minute
Quelques questions ciblées pour que je vous réponde avec une estimation, pas avec un questionnaire de plus.