Disponible pour missions & renforts d’agence · Réponse rapide, par la personne qui intervient

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.

Décrire mon problème Discuter sur WhatsApp

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é

  1. 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.

  2. 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.

  3. 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.

  4. 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.

modules/mon-module/mon-module.php (extrait)
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 ?
Oui, c’est même le fonctionnement normal : tous les modules inscrits sur un même hook sont appelés les uns après les autres, dans un ordre qui dépend de leur position configurée.
Que se passe-t-il si aucun hook ne correspond au besoin ?
Dans ce cas, la seule alternative native reste l’override, qui remplace directement une classe du cœur plutôt que de s’y accrocher à un point prévu, avec les conséquences que cela implique sur les mises à jour.
Comment savoir sur quels hooks un module est déjà inscrit ?
Le back-office liste, dans Apparence > Positions (Modules et Services > Positions en 1.6), l’ensemble des modules inscrits sur chaque hook, ce qui permet aussi de réordonner leur priorité d’exécution. Il n’y a aucune gestion de hooks sous Paramètres avancés.

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.

Quelle version de PrestaShop ?
Sur quoi avez-vous besoin d’aide ?
Quel est l’état actuel de la boutique ?
Le thème est-il un thème du marché ou sur mesure ? (facultatif)

Un thème très modifié change la façon d’intervenir sans rien casser.

Indiquez au moins un e-mail ou un téléphone pour que je puisse vous répondre.

Indiquez au moins un e-mail ou un téléphone pour que je puisse vous répondre.