Hooks PrestaShop : guide complet et exemples

Un hook PrestaShop, c’est une prise de courant que PrestaShop installe à des endroits précis de ta boutique : dans le code, avant et après chaque événement important. Un module vient s’y brancher pour afficher un bloc ou déclencher une action, sans toucher au cœur de PrestaShop. Quand tu comprends les hooks, tu comprends comment fonctionne presque tout module.

Je les manipule tous les jours dans mes développements sur PrestaShop, et je vois surtout deux situations : le propriétaire de boutique qui se demande pourquoi son module n’apparaît pas, et le développeur débutant qui ne sait pas quel hook choisir. Ce guide s’adresse aux deux. Au programme : ce que c’est, les deux familles, où les repérer dans ton back-office, les plus utiles, un exemple de code et quoi faire quand ça ne marche pas.

⚡ Pas le temps de lire ?
  • Définition : un hook est un point d’accroche où un module peut afficher du contenu ou exécuter du code.
  • Deux familles : les hooks d’affichage (display) montrent quelque chose, les hooks d’action (action) réagissent à un événement.
  • Où les voir : dans le back-office, menu Design puis Positions.
  • Créer un hook : possible, mais souvent inutile, un hook existant suffit dans la plupart des cas.
  • Module invisible : vérifie le hook, le cache, la position et les conflits avant de suspecter le thème.

C’est quoi un hook PrestaShop ?

PrestaShop prévoit, à des dizaines d’endroits de son code, un appel du type « si quelqu’un veut intervenir ici, qu’il le fasse maintenant ». Chaque endroit porte un nom de hook. Un module s’inscrit auprès de ce nom, et PrestaShop l’appelle quand le moment arrive.

L’intérêt est simple : tu ajoutes une fonctionnalité sans modifier un seul fichier du cœur de PrestaShop. Le jour où tu mets à jour ta boutique, ton module reste en place. C’est la différence entre un travail propre et une rustine qui saute à la prochaine mise à jour.

Les deux familles de hooks : display et action

Les hooks d’affichage (display)

Leur nom commence par display. Ils servent à afficher du contenu dans une zone de la page : l’en-tête, le pied de page, la fiche produit, le panier. Un module « bandeau de livraison offerte » ou « produits similaires » s’accroche à un hook d’affichage. C’est ce que tu vois à l’écran, et ce que tu peux déplacer depuis le back-office.

Les hooks d’action (action)

Leur nom commence par action. Ils ne montrent rien : ils préviennent qu’un événement vient d’avoir lieu (commande validée, client inscrit, produit enregistré) et laissent un module réagir. C’est là que se branchent les connexions à un ERP ou les mises à jour de stock. Comme ils n’ont pas de position visible, on ne les retrouve pas dans les mêmes écrans du back-office.

Où voir les hooks de ta boutique

Dans le back-office, va dans Design puis Positions. Tu y vois la liste des hooks d’affichage, et sous chacun les modules qui y sont accrochés, dans l’ordre où ils s’affichent. C’est l’écran que j’ouvre en premier quand un client me dit « mon module ne s’affiche pas ».

Tu peux y faire trois choses utiles :

  • greffer un module sur un hook de plus, pour l’afficher à un second endroit ;
  • déplacer un module vers le haut ou le bas d’un même hook, pour changer son ordre d’affichage ;
  • retirer un module d’un hook, sans le désinstaller, pour le faire disparaître d’une zone.

Un hook n’affiche que ce que le thème a prévu. Si ton thème ne contient pas d’emplacement pour un hook donné, tu peux y accrocher tous les modules que tu veux, rien n’apparaîtra.

Les hooks que j’utilise le plus

Il existe des centaines de hooks, et tu n’en utiliseras qu’une petite dizaine régulièrement. Voici ceux que je retrouve le plus souvent dans les modules que je développe et les boutiques que je maintiens.

Hook Famille Il se déclenche Usage courant
displayHeader Affichage Dans l’en-tête de chaque page Ajouter un script, un style ou une balise
displayHome Affichage Sur la page d’accueil Bloc de contenu, sélection de produits
displayFooter Affichage Dans le pied de page Liens, réassurance, formulaire
displayProductAdditionalInfo Affichage Sur la fiche produit, près de l’achat Info de livraison, partage, garantie
displayShoppingCartFooter Affichage En bas de la page panier Message, produit complémentaire
displayOrderConfirmation Affichage Sur la page de confirmation de commande Suivi, message personnalisé
actionValidateOrder Action Quand une commande est validée Envoyer la commande à un ERP ou un fournisseur
actionOrderStatusPostUpdate Action Après un changement de statut de commande Déclencher un mail ou une synchronisation
actionCartSave Action Quand un panier est enregistré Suivre les paniers, relances
actionCustomerAccountAdd Action Quand un client crée un compte Envoi vers un outil d’emailing
actionProductSave Action Quand un produit est enregistré Mettre à jour un flux ou un cache

Ces noms sont ceux que je rencontre sur PrestaShop 1.7 et 8. La liste exacte dépend de ta version et de ton thème, donc vérifie toujours dans la documentation officielle avant de te lancer sur un hook précis. Pour t’aider à choisir, voici un petit outil.

🔌 Quel hook pour mon besoin ?

Comment un module s’accroche à un hook

Un module déclare ses hooks au moment de son installation, puis fournit une méthode qui porte le nom du hook précédé de hook. Voici le principe, avec un exemple minimal sur displayHeader :

public function install()
{
    return parent::install()
        && $this->registerHook('displayHeader');
}

public function hookDisplayHeader(array $params)
{
    // Code exécuté quand PrestaShop appelle displayHeader
    return '<!-- contenu à afficher -->';
}

La méthode registerHook() inscrit le module auprès du hook, une seule fois, à l’installation. Ensuite, un hook d’affichage renvoie du contenu, alors qu’un hook d’action exécute simplement du code.

Le piège que je vois le plus : si tu ajoutes un nouveau hook à un module déjà installé, il n’est pas inscrit automatiquement. Il faut réinitialiser le module, le réinstaller, ou passer par un script de mise à jour. Beaucoup de « ça ne marche pas » viennent de là, et on cherche longtemps au mauvais endroit.

Créer son propre hook

Tu peux créer un hook à toi, par exemple pour laisser d’autres modules s’accrocher à un emplacement de ton thème. Le principe : tu poses un point d’appel dans le template ou dans le code, puis les modules s’y inscrivent comme sur n’importe quel hook.

  • dans un template Smarty, tu appelles le hook avec {hook h='displayMonHook'} ;
  • dans le code PHP, tu le déclenches avec Hook::exec('displayMonHook') ;
  • un module s’inscrit ensuite avec registerHook('displayMonHook'), et PrestaShop crée le hook s’il n’existe pas encore.

Avant d’en créer un, demande-toi s’il en existe déjà un qui convient. Dans la grande majorité des projets, un hook existant suffit, et un hook maison ajoute une dépendance à ton thème que tu devras entretenir.

Quand un hook ne fonctionne pas

Voici la checklist que je déroule dans cet ordre quand un module ne s’affiche pas ou ne réagit pas :

  1. le module est-il bien greffé sur le hook, dans Design puis Positions ?
  2. le thème appelle-t-il ce hook à l’endroit voulu ? Sinon, rien ne s’affiche ;
  3. le cache est-il vidé ? Après un changement de hook, vide le cache dans Paramètres avancés puis Performances ;
  4. le hook est-il inscrit pour ce module ? Si tu viens de l’ajouter dans le code, réinitialise le module ;
  5. un autre module accroché au même hook n’interfère-t-il pas ? Désactive-les un par un pour trouver le coupable ;
  6. le mode debug est-il activé ? Il affiche les erreurs PHP masquées, à utiliser sur une préproduction plutôt qu’en ligne.

Quand plusieurs modules partagent un hook, l’ordre d’exécution compte. Deux modules qui modifient la même donnée peuvent s’écraser l’un l’autre, et c’est une source de conflits fréquente sur les boutiques qui empilent les modules.

Hooks et PrestaShop 8, 9 : ce qui change

Les hooks classiques (display et action) restent au cœur du fonctionnement de PrestaShop sur les versions récentes, et la plupart des modules s’appuient toujours dessus. La documentation officielle décrit aussi des hooks dits « modernes », liés aux pages du back-office construites avec Symfony, qui suivent une logique un peu différente.

Le point d’attention vient surtout des modules anciens : un module écrit pour PrestaShop 1.6 peut appeler des hooks qui n’existent plus ou qui ont changé de nom. C’est l’un des sujets à vérifier lors d’une migration de PrestaShop 1.6 vers 8, module par module.

Hooks ou overrides : lequel choisir ?

Un override remplace une classe ou un contrôleur de PrestaShop par ta propre version. C’est plus puissant, et aussi plus fragile : il peut entrer en conflit avec un autre module et casser lors d’une mise à jour. Mon réflexe reste simple : un hook d’abord, un override seulement quand aucun hook ne permet d’obtenir le résultat. Je consacre un article à part aux overrides.

Un module qui ne s’affiche pas, ou un hook qui te résiste ?

Dis-moi ta version de PrestaShop, ton thème et le module concerné. Je regarde d’où vient le blocage et je te dis si c’est un simple réglage ou un vrai développement.

Me parler de mon problème

Conclusion

Quand un module se comporte mal, ouvre Design puis Positions avant d’accuser le thème : le problème vient souvent d’un hook mal greffé ou jamais inscrit. Le reste, c’est de la méthode, et la checklist plus haut te fait gagner du temps. Si tu veux aller plus loin, je détaille comment je conçois un module dans mon article sur le développement de modules PrestaShop. Tu peux aussi voir l’ensemble de mes services sur ma page freelance PrestaShop, ou regarder les modules PrestaShop que je propose, comme le module de rétractation Easy Withdrawal.

Et si tu veux voir comment je travaille sur un très gros projet PrestaShop, la migration de Motostand est ma réalisation la plus complexe.

FAQ

C’est quoi un hook dans PrestaShop ?

Un hook est un point d’accroche placé par PrestaShop à un endroit précis de son code. Un module peut s’y inscrire pour afficher du contenu ou exécuter une action, sans modifier le cœur de PrestaShop.

Quelle est la différence entre un hook display et un hook action ?

Un hook display affiche du contenu dans une zone de la page, comme le pied de page ou la fiche produit. Un hook action ne montre rien : il prévient qu’un événement a eu lieu, comme une commande validée, pour qu’un module réagisse.

Où voir la liste des hooks dans le back-office ?

Dans le menu Design puis Positions. Tu y vois les hooks d’affichage et les modules greffés sous chacun. Tu peux y greffer, déplacer ou retirer un module.

Comment créer un hook PrestaShop ?

Tu poses un point d’appel avec la balise hook de Smarty dans un template, ou avec Hook::exec dans le code PHP. Les modules s’inscrivent ensuite avec registerHook. Vérifie d’abord qu’un hook existant ne convient pas déjà.

Pourquoi mon module ne s’affiche-t-il pas sur son hook ?

Les causes fréquentes sont un module non greffé sur le hook, un thème qui n’appelle pas ce hook, un cache non vidé, un hook ajouté au code sans réinitialiser le module, ou un conflit avec un autre module accroché au même hook.

Faut-il utiliser un hook ou un override ?

Un hook d’abord, dans la grande majorité des cas. Un override modifie une classe de PrestaShop, ce qui le rend plus fragile lors des mises à jour et plus exposé aux conflits. On ne l’utilise que si aucun hook ne permet d’obtenir le résultat.

Articles liés