Hooks PrestaShop : Fonctionnement & Liste
Le mécanisme qui permet d'étendre PrestaShop sans toucher au core.
Publié le
Ajouter un bloc sur une fiche produit, déclencher une action à la validation d'une commande, modifier le menu du back-office : tout cela se fait via les hooks, sans jamais modifier les fichiers natifs de PrestaShop.
PrestaShop en compte plusieurs centaines, répartis entre le front-office, le back-office et les événements métier, avec des différences importantes selon les versions.
Qu'est-ce qu'un hook ?
Un hook est un point d'ancrage placé à un endroit précis du code de PrestaShop. Imaginez-le comme une prise électrique dans un mur : la prise existe, qu'un appareil soit branché ou non. Dès qu'un module s'enregistre sur ce hook, il est "branché" et son code s'exécute automatiquement chaque fois que ce point est atteint.
Ce système présente un avantage majeur : plusieurs modules peuvent écouter le même hook en même temps, sans se gêner. Et surtout, lors d'une mise à jour de PrestaShop, les fichiers du core sont écrasés mais vos personnalisations, dans vos modules, restent intactes.
Concrètement, quand PrestaShop affiche une fiche produit, il "tire" une série de hooks dans l'ordre. Chaque module enregistré sur ces hooks répond à son tour, et PrestaShop assemble le résultat final pour l'afficher au visiteur.
Hooks display vs hooks action
Il existe deux grandes familles de hooks, que l'on reconnaît immédiatement à leur préfixe :
| Préfixe | Rôle | Exemple concret |
|---|---|---|
display |
Affiche du contenu à un endroit précis de la page | Ajouter un badge "Livraison offerte" sous le bouton panier |
action |
Déclenche une action en réponse à un événement | Envoyer un email interne quand une commande est passée |
Les hooks display (displayHeader, displayFooter, displayProductAdditionalInfo...) injectent du HTML directement dans la page, à l'emplacement défini par le hook. C'est ce qu'utilisent la plupart des modules front-office pour afficher des blocs, des bannières ou des widgets.
Les hooks action (actionValidateOrder, actionCartSave, actionCustomerAccountAdd...) sont déclenchés par des événements métier : une commande validée, un panier mis à jour, un compte client créé. Ils n'affichent rien mais permettent d'exécuter du code en coulisses, comme envoyer des données vers un ERP, mettre à jour un stock externe ou journaliser une action.
Comment fonctionne un hook dans un module ?
Un module s'enregistre sur un hook à son installation, puis implémente une méthode dont le nom correspond exactement au hook écouté. Quand PrestaShop déclenche ce hook, il appelle automatiquement cette méthode et lui transmet les données contextuelles disponibles : l'objet commande, le panier, le client, le produit, selon l'événement.
Il est également possible de créer ses propres hooks personnalisés. C'est une pratique courante dans les thèmes sur-mesure pour exposer des zones configurables dans le back-office, sans avoir à modifier les templates à chaque fois.
La position des hooks dans le back-office (menu Modules, Positions) permet de voir quels modules sont attachés à quels hooks et de réordonner leur affichage en glisser-déposer.
Module sur-mesure
Vous avez un besoin spécifique qui ne correspond à aucun module existant sur la marketplace ? Je développe des modules PrestaShop sur-mesure, de l'intégration d'un ERP à l'ajout d'une fonctionnalité métier propre à votre activité.
Demander un devisDifférences par version (1.6, 1.7, 8, 9)
Le mécanisme de base est identique depuis PrestaShop 1.6. Les évolutions portent sur l'intégration progressive de Symfony dans le back-office et l'apparition de nouveaux types de hooks à chaque version majeure.
| Fonctionnalité | PS 1.6 | PS 1.7 | PS 8 | PS 9 |
|---|---|---|---|---|
| Hooks legacy (display + action) | Oui | Oui | Oui | Oui |
Templates Smarty {hook h='...'} |
Oui | Oui | Oui | Oui |
| Hooks dans les pages Symfony (back-office) | Non | Oui | Oui | Oui |
Templates Twig renderHook() |
Non | Oui | Oui | Oui |
| Hooks pour modifier les grilles back-office | Non | Non | Oui | Oui (étendu) |
| Hooks pour modifier les formulaires Symfony | Non | Partiel | Oui | Oui (étendu) |
Modifier le menu du back-office (actionAdminMenuTabsModifier) |
Non | Non | Non | Oui |
Modifier le fil d'ariane back-office (actionAdminBreadcrumbModifier) |
Non | Non | Non | Oui |
Modifier les étapes du tunnel de commande (actionCheckoutStepRenderTemplate) |
Non | Non | Non | Oui |
| Hooks grilles nommés par entité (commandes, clients, produits...) | Non | Non | Partiel | Complet |
PrestaShop 1.6
Architecture entièrement basée sur les hooks legacy. Tous les hooks sont des hooks display ou action classiques, appelés depuis les templates Smarty ou le code PHP. Pas de contexte Symfony, pas de hooks grilles ni de hooks formulaires. C'est la version la plus simple à comprendre mais aussi la plus limitée pour les personnalisations back-office avancées.
PrestaShop 1.7
Introduction du contexte Symfony dans le back-office, qui ouvre de nouveaux hooks spécifiques aux pages modernes. Les hooks restent compatibles avec la 1.6 pour la partie front-office. Apparition des hooks actionFrontControllerSetMedia et actionFrontControllerSetVariables pour injecter des assets et des variables JavaScript côté front, et des premiers hooks formulaires sur les pages Symfony.
PrestaShop 8
Les hooks grilles font leur apparition complète. Ils permettent de modifier la structure, les données, les filtres et les requêtes de toutes les listes du back-office (commandes, produits, clients...) via un module, sans toucher aux fichiers natifs. Les hooks formulaires Symfony couvrent désormais l'intégralité du back-office. Pour en savoir plus sur les nouveautés de cette version, voir l'article sur PrestaShop 8.
PrestaShop 9
Extension significative des hooks grilles, avec un hook dédié par entité back-office (adresses, transporteurs, catégories, règles de panier, etc.). Ajout de hooks spécifiques au back-office : modification du menu, du fil d'ariane, de la page de connexion admin. Côté front-office, nouveaux hooks sur le tunnel de commande et la gestion du panier. L'article sur PrestaShop 9 détaille l'ensemble des nouveautés de cette version.
Liste des principaux hooks
Hooks d'affichage (Front Office)
| Hook | Emplacement |
|---|---|
displayHeader | Dans le <head> de chaque page (CSS, scripts) |
displayFooter | Pied de page |
displayTop | Barre supérieure, sous le header |
displayLeftColumn | Colonne gauche (catégories, produit) |
displayRightColumn | Colonne droite |
displayHome | Corps de la page d'accueil |
displayBanner | Zone bannière en haut de page |
displayNav1 | Premier niveau de navigation |
displayNav2 | Deuxième niveau de navigation |
displayProductAdditionalInfo | Informations supplémentaires sur la fiche produit |
displayProductButtons | Sous le bouton "Ajouter au panier" |
displayReassurance | Bloc de réassurance |
displayShoppingCartFooter | Pied du récapitulatif panier |
displayCheckoutSummaryTop | Haut du récapitulatif de commande |
displayPaymentTop | Haut de l'étape de paiement |
displayOrderConfirmation | Page de confirmation de commande |
displayCustomerAccount | Page "Mon compte" |
displayNotFound | Page 404 |
displayMaintenance | Page de maintenance |
Hooks d'action (Front Office)
| Hook | Événement déclenché |
|---|---|
actionValidateOrder | Validation d'une commande |
actionCartSave | Création ou mise à jour du panier |
actionAuthentication | Connexion réussie d'un client |
actionCustomerAccountAdd | Création d'un compte client |
actionCustomerAccountUpdate | Mise à jour d'un compte client |
actionCustomerLogoutBefore | Avant la déconnexion du client |
actionCustomerLogoutAfter | Après la déconnexion du client |
actionProductAdd | Création d'un produit |
actionProductUpdate | Modification d'un produit |
actionProductDelete | Suppression d'un produit |
actionCategoryAdd | Création d'une catégorie |
actionCategoryUpdate | Modification d'une catégorie |
actionCategoryDelete | Suppression d'une catégorie |
actionEmailSendBefore | Avant l'envoi d'un email |
actionFrontControllerSetMedia | Chargement des assets en front-office |
actionModifyFrontendSitemap | Ajout d'URLs au sitemap |
Hooks d'action (Back Office)
| Hook | Événement déclenché |
|---|---|
actionAdminControllerSetMedia | Chargement des assets dans les pages admin |
actionGetAdminOrderButtons | Ajout de boutons sur la page commande admin |
actionGetAdminToolbarButtons | Ajout de boutons dans la barre d'outils admin |
actionAdminOrdersTrackingNumberUpdate | Après la saisie d'un numéro de suivi |
actionGenerateDocumentReference | Modification de la référence d'un document de commande |
La liste complète et consultable par version est disponible sur la documentation officielle PrestaShop. Depuis le back-office, la page Modules, Positions liste tous les hooks actifs sur votre installation avec les modules qui y sont attachés.
Adrien Mansard
Expert PrestaShop
+30
Boutiques
12 ans
Expérience
5.0
Besoin d'aide ?
Vous avez un besoin spécifique qui ne correspond à aucun module existant ? Je développe des modules PrestaShop sur-mesure adaptés à votre activité.
Questions fréquentes
display* injecte du contenu HTML à un emplacement précis de la page. Un hook action* est déclenché par un événement métier et exécute du code en coulisses, sans rien afficher. Les deux peuvent être utilisés dans le même module.
Recevez votre pré-audit SEO
Mini analyse offerte : 3 concurrents + 10 mots-clés.