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 donnees il fournit est un savoir essentiel pour tout developpeur PrestaShop. Cette reference 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 specifiques sur la page. Votre methode de hook retourne du HTML. Exemple :displayHeader,displayProductAdditionalInfo - Action Hooks (prefixe :
action) – se declenchent quand quelque chose se produit. Votre methode 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, references 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
Evenements 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 quantite. Permet de valider ou bloquer la modification.
Evenements 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 systemes externes, ajuster le stock.actionPaymentConfirmation– quand le paiement est confirme. Different de la validation de commande pour les methodes de paiement differe.
Evenements client
actionCustomerAccountAdd– nouvelle inscription client. Synchronisation CRM, declenchement d'email de bienvenue.actionAuthentication– le client se connecte. Mise a jour de la derniere connexion, synchronisation des donnees de session.
Evenements produit
actionProductSave– produit cree ou mis a jour. Synchronisation vers les flux, mise a jour des caches.actionProductDelete– produit supprime. Nettoyage des donnees liees au module.actionUpdateQuantity– changements de niveau de stock. Declenchement d'alertes de stock bas, mise a jour de la disponibilite.
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 :
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, meme si la methode ne retourne rien.
- Oublier
registerHook()dansinstall()– les hooks doivent etre enregistres lors de l'installation du module. Oublier cela est la raison numero 1 pour laquelle les hooks ne se declenchent pas. - Ne pas verifier 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 methodes de hook rapides et testez toujours avec le cache active pour detecter les problemes de performance tot.
Commentaires (2)
Laisser un commentaire