Comprendre les priorités des hooks PrestaShop et l'ordre d'exécution
Que sont les hooks dans PrestaShop ?
Les hooks sont le mécanisme d'extension de PrestaShop — les points dans le code où les modules peuvent s'attacher pour ajouter des fonctionnalités, modifier le comportement ou injecter du contenu dans les pages.
Deux types de hooks
Hooks d'affichage
Les hooks d'affichage (préfixés par display) injectent du contenu HTML dans la page. Exemples -
displayHeader— dans la section<head>displayHome— zone de contenu de la page d'accueildisplayFooter— zone du pied de pagedisplayProductAdditionalInfo— informations additionnelles sur le produit
Hooks d'action
Les hooks d'action (préfixés par action) exécutent de la logique sans retourner de HTML. Exemples -
actionCartSave— quand un panier est sauvegardéactionOrderStatusUpdate— quand un statut de commande changeactionValidateOrder— quand une commande est validée
Comment fonctionne l'ordre d'exécution
PrestaShop consulte la table ps_hook_module pour trouver les modules enregistrés sur un hook. Les modules sont exécutés dans l'ordre de la colonne position.
SELECT hm.position, m.name AS module_name, h.name AS hook_name
FROM ps_hook_module hm
JOIN ps_module m ON hm.id_module = m.id_module
JOIN ps_hook h ON hm.id_hook = h.id_hook
WHERE h.name = 'displayHeader'
ORDER BY hm.position ASC;Pourquoi la position est importante
Pour les hooks d'affichage, la position détermine l'ordre visuel. Pour les hooks d'action, la position détermine l'ordre de traitement.
Enregistrer des hooks dans votre module
public function install()
{
return parent::install()
&& $this->registerHook('displayHeader')
&& $this->registerHook('displayProductAdditionalInfo')
&& $this->registerHook('actionCartSave');
}
public function hookDisplayHeader($params)
{
$this->context->controller->addCSS($this->_path . 'views/css/style.css');
}
public function hookActionCartSave($params)
{
$cart = $params['cart'];
$this->logCartActivity($cart);
}Gérer les positions des hooks dans le Back Office
Naviguez vers Apparence > Positions pour voir tous les hooks et leurs modules associés. Vous pouvez réordonner les modules par glisser-déposer ou les transplanter.
Problèmes courants d'exécution des hooks
Conflits de modules
Quand deux modules sur le même hook d'affichage produisent du contenu dupliqué, réordonnez-les ou détachez le module problématique.
Impact sur les performances
SELECT h.name, COUNT(*) AS module_count
FROM ps_hook_module hm
JOIN ps_hook h ON hm.id_hook = h.id_hook
GROUP BY h.name
ORDER BY module_count DESC
LIMIT 20;Hooks importants pour les propriétaires de boutiques
- Checkout - displayPayment, paymentOptions, actionValidateOrder
- SEO - displayHeader, filterHtmlContent
- Affichage produit - displayProductAdditionalInfo, displayAfterProductThumbs
Cette réponse vous a-t-elle été utile ?
Vous avez encore des questions ?
Can't find what you're looking for? Send us your question and we'll get back to you quickly.