Capire le priorità degli hook PrestaShop e l'ordine di esecuzione
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 homepagedisplayFooter— area footerdisplayProductAdditionalInfo— info aggiuntive prodotto
Hook di azione
Gli hook di azione (con prefisso action) eseguono logica senza restituire HTML. Esempi -
actionCartSave— quando un carrello viene salvatoactionOrderStatusUpdate— quando lo stato dell'ordine cambiaactionValidateOrder— 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.