TECHNIQUE

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 devis

Diffé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
displayHeaderDans le <head> de chaque page (CSS, scripts)
displayFooterPied de page
displayTopBarre supérieure, sous le header
displayLeftColumnColonne gauche (catégories, produit)
displayRightColumnColonne droite
displayHomeCorps de la page d'accueil
displayBannerZone bannière en haut de page
displayNav1Premier niveau de navigation
displayNav2Deuxième niveau de navigation
displayProductAdditionalInfoInformations supplémentaires sur la fiche produit
displayProductButtonsSous le bouton "Ajouter au panier"
displayReassuranceBloc de réassurance
displayShoppingCartFooterPied du récapitulatif panier
displayCheckoutSummaryTopHaut du récapitulatif de commande
displayPaymentTopHaut de l'étape de paiement
displayOrderConfirmationPage de confirmation de commande
displayCustomerAccountPage "Mon compte"
displayNotFoundPage 404
displayMaintenancePage de maintenance

Hooks d'action (Front Office)

Hook Événement déclenché
actionValidateOrderValidation d'une commande
actionCartSaveCréation ou mise à jour du panier
actionAuthenticationConnexion réussie d'un client
actionCustomerAccountAddCréation d'un compte client
actionCustomerAccountUpdateMise à jour d'un compte client
actionCustomerLogoutBeforeAvant la déconnexion du client
actionCustomerLogoutAfterAprès la déconnexion du client
actionProductAddCréation d'un produit
actionProductUpdateModification d'un produit
actionProductDeleteSuppression d'un produit
actionCategoryAddCréation d'une catégorie
actionCategoryUpdateModification d'une catégorie
actionCategoryDeleteSuppression d'une catégorie
actionEmailSendBeforeAvant l'envoi d'un email
actionFrontControllerSetMediaChargement des assets en front-office
actionModifyFrontendSitemapAjout d'URLs au sitemap

Hooks d'action (Back Office)

Hook Événement déclenché
actionAdminControllerSetMediaChargement des assets dans les pages admin
actionGetAdminOrderButtonsAjout de boutons sur la page commande admin
actionGetAdminToolbarButtonsAjout de boutons dans la barre d'outils admin
actionAdminOrdersTrackingNumberUpdateAprès la saisie d'un numéro de suivi
actionGenerateDocumentReferenceModification 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

Adrien Mansard

Expert PrestaShop

+30

Boutiques

12 ans

Expérience

5.0

Google

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

FAQ

Questions fréquentes

Oui. Un module ou un thème peut 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 modifier les templates à chaque mise à jour.

Un hook 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.

Les hooks legacy (display et action classiques) sont présents depuis la 1.6 et restent compatibles jusqu'en PS 9. En revanche, les hooks Symfony (grilles, formulaires) n'existent pas en 1.6 et ont été introduits progressivement à partir de la 1.7. Un module utilisant des hooks spécifiques à PS 8 ne fonctionnera pas sur PS 1.7 sans adaptation.

Depuis le back-office PrestaShop, la page Modules puis Positions liste tous les hooks actifs sur votre installation avec les modules qui y sont attachés. Vous pouvez y réordonner les modules en glisser-déposer et voir en un coup d'oeil quels modules occupent quels emplacements.
PASSEZ À L'ACTION

Recevez votre pré-audit SEO

Mini analyse offerte : 3 concurrents + 10 mots-clés.

Pré-audit Gratuit
Vos données sont confidentielles et sécurisées.