Capire le priorità degli hook PrestaShop e l'ordine di esecuzione

383 visualizzazioni

Cosa sono gli hook in PrestaShop?

Gli hook sono il meccanismo di estensione di PrestaShop — i punti nel codice dove i moduli possono agganciarsi per aggiungere funzionalità, modificare il comportamento o iniettare contenuto nelle pagine.

Due tipi di hook

Hook di visualizzazione

Gli hook di visualizzazione (con prefisso display) iniettano contenuto HTML nella pagina. Esempi -

  • displayHeader — nella sezione <head>
  • displayHome — area contenuto homepage
  • displayFooter — area footer
  • displayProductAdditionalInfo — info aggiuntive prodotto

Hook di azione

Gli hook di azione (con prefisso action) eseguono logica senza restituire HTML. Esempi -

  • actionCartSave — quando un carrello viene salvato
  • actionOrderStatusUpdate — quando lo stato dell'ordine cambia
  • actionValidateOrder — quando un ordine viene validato

Come funziona l'ordine di esecuzione

PrestaShop consulta la tabella ps_hook_module per trovare i moduli registrati su un hook. I moduli vengono eseguiti nell'ordine della colonna 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;

Registrare hook nel modulo

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);
}

Gestire le posizioni degli hook nel Back Office

Vai a Design > Posizioni per vedere tutti gli hook e i moduli associati. Puoi riordinare con il drag and drop o trapiantare i moduli.

Problemi comuni di esecuzione degli hook

Conflitti tra moduli

Quando due moduli sullo stesso hook producono contenuto duplicato, riordinali o sgancia il modulo problematico.

Impatto sulle prestazioni

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;

Hook importanti per i proprietari di negozi

  • Checkout - displayPayment, paymentOptions, actionValidateOrder
  • SEO - displayHeader, filterHtmlContent
  • Visualizzazione prodotto - displayProductAdditionalInfo, displayAfterProductThumbs

Questa risposta ti è stata utile?

Hai ancora domande?

Can't find what you're looking for? Send us your question and we'll get back to you quickly.

Loading...
Back to top