Comprendre les priorités des hooks PrestaShop et l'ordre d'exécution

387 vues

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'accueil
  • displayFooter — zone du pied de page
  • displayProductAdditionalInfo — 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 change
  • actionValidateOrder — 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.

Loading...
Back to top