Maîtriser les Hooks PrestaShop : référence développeur pour 1.7, 8.x et 9.x
Les hooks sont la facon dont les modules interagissent avec PrestaShop sans modifier les fichiers du noyau. Comprendre quel hook utiliser, quand il se declenche et quelles données il fournit est un savoir essentiel pour tout developpeur PrestaShop. Cette référence couvre les hooks que vous utiliserez le plus souvent.
Display Hooks vs. Action Hooks
PrestaShop a deux types de hooks :
- Display Hooks (prefixe :
display) – affichent du contenu a des positions spécifiques sur la page. Votre méthode de hook retourne du HTML. Exemple :displayHeader,displayProductAdditionalInfo - Action Hooks (prefixe :
action) – se declenchent quand quelque chose se produit. Votre méthode de hook execute de la logique mais ne retourne rien de visible. Exemple :actionCartSave,actionOrderStatusPostUpdate
Front Office Display Hooks
Structure de page
displayHeader– a l'interieur de<head>. Ajoutez CSS, meta tags, références JS. Se declenche sur chaque page front.displayTop/displayNavFullWidth– zone de navigation superieure. Bannieres, annonces.displayHome– zone de contenu de la page d'accueil. Produits en vedette, sliders, promotions.displayFooter/displayFooterBefore– contenu du footer. Inscription newsletter, badges de confiance.
Page produit
displayProductAdditionalInfo– sous le bouton d'ajout au panier. Estimations de livraison, alertes de stock.displayProductExtraContent– ajoute des onglets a la page produit. Retourne un objetPrestaShop\\PrestaShop\\Core\\Product\\ProductExtraContent.displayAfterProductThumbs– sous les images du produit. Medias supplementaires, vues a 360 degres.displayProductListReviews– dans les listes de produits, sous chaque produit. Notes en etoiles.
Panier et Checkout
displayShoppingCartFooter– sous le tableau du panier. Suggestions de vente croisee.displayPaymentReturn– page de confirmation de commande. Messages de remerciement, informations de suivi.displayOrderConfirmation– egalement sur la confirmation de commande. Scripts de tracking analytics.
Action Hooks essentiels
Événements du panier
actionCartSave– se declenche apres toute modification du panier. A utiliser pour les verifications de stock en temps reel ou les recalculs de prix.actionCartUpdateQuantityBefore– avant les changements de quantité. Permet de valider ou bloquer la modification.
Événements de commande
actionValidateOrder– se declenche quand une commande est creee. Contient l'objet commande complet, le panier, le client et la devise.actionOrderStatusPostUpdate– apres un changement de statut de commande. Declencher des notifications, mettre a jour les systèmes externes, ajuster le stock.actionPaymentConfirmation– quand le paiement est confirme. Different de la validation de commande pour les méthodes de paiement differe.
Événements client
actionCustomerAccountAdd– nouvelle inscription client. Synchronisation CRM, declenchement d'email de bienvenue.actionAuthentication– le client se connecte. Mise a jour de la dernière connexion, synchronisation des données de session.
Événements produit
actionProductSave– produit cree ou mis a jour. Synchronisation vers les flux, mise a jour des caches.actionProductDelete– produit supprime. Nettoyage des données liees au module.actionUpdateQuantity– changements de niveau de stock. Declenchement d'alertes de stock bas, mise a jour de la disponibilité.
Dynamic Hooks (PS 1.7.7+)
PrestaShop genere des hooks dynamiquement en fonction de l'entite et de l'action :
action{Entity}{Action}Before
action{Entity}{Action}After
Par exemple : actionProductFormBuilderModifier vous permet d'ajouter des champs au formulaire d'edition de produit dans le panel admin.
Le hook setMedia
actionFrontControllerSetMedia est l'endroit correct pour enregistrer les fichiers CSS et JavaScript. Contrairement a displayHeader, il se declenche avant le rendu de la page et fournit le contexte du controller : Pour une vue moins technique, consultez notre guide sur comment les modules communiquent avec votre boutique via les hooks. Un module de performance peut identifier les hooks lents.
public function hookActionFrontControllerSetMedia($params)
{
$controller = $this->context->controller;
if ($controller instanceof ProductController) {
$this->context->controller->registerStylesheet(
'my-module-css',
'modules/' . $this->name . '/views/css/product.css'
);
}
}
Pieges courants
- Requetes lourdes dans les Display Hooks – les Display Hooks se declenchent a chaque chargement de page. Mettez vos requetes en cache ou utilisez le chargement paresseux.
- Enregistrer des hooks que vous n'utilisez pas – chaque hook enregistre ajoute du surcharge, même si la méthode ne retourne rien.
- Oublier
registerHook()dansinstall()– les hooks doivent etre enregistres lors de l'installation du module. Oublier cela est la raison numéro 1 pour laquelle les hooks ne se declenchent pas. - Ne pas vérifier la classe du controller – si votre hook ne doit s'executer que sur les pages produit, verifiez
instanceof ProductControlleravant de travailler.
Les hooks sont puissants mais demandent de la discipline. Utilisez le bon hook pour la bonne tache, gardez vos méthodes de hook rapides et testez toujours avec le cache active pour detecter les problèmes de performance tot. Notre module Checkout Revolution utilise nombre de ces hooks pour une expérience de checkout optimisée.
Commentaires (2)
Laisser un commentaire