Gli hooks sono il modo in cui i moduli interagiscono con PrestaShop senza modificare i file del core. Capire quale hook usare, quando si attiva e quali dati fornisce e una conoscenza essenziale per ogni sviluppatore PrestaShop. Questo riferimento copre gli hooks che userai piu spesso.
Display Hooks vs. Action Hooks
PrestaShop ha due tipi di hooks:
- Display Hooks (prefisso:
display) – visualizzano contenuti in posizioni specifiche della pagina. Il tuo metodo hook restituisce HTML. Esempio:displayHeader,displayProductAdditionalInfo - Action Hooks (prefisso:
action) – si attivano quando succede qualcosa. Il tuo metodo hook esegue logica ma non restituisce nulla di visibile. Esempio:actionCartSave,actionOrderStatusPostUpdate
Front Office Display Hooks
Struttura della pagina
displayHeader– all'interno di<head>. Aggiungi CSS, meta tag, riferimenti JS. Si attiva su ogni pagina front.displayTop/displayNavFullWidth– area di navigazione superiore. Banner, annunci.displayHome– area contenuti della homepage. Prodotti in evidenza, slider, promozioni.displayFooter/displayFooterBefore– contenuto del footer. Iscrizione newsletter, badge di fiducia.
Pagina prodotto
displayProductAdditionalInfo– sotto il pulsante aggiungi al carrello. Stime di consegna, avvisi sulle scorte.displayProductExtraContent– aggiunge schede alla pagina prodotto. Restituisce un oggettoPrestaShop\PrestaShop\Core\Product\ProductExtraContent.displayAfterProductThumbs– sotto le immagini del prodotto. Media aggiuntivi, viste a 360 gradi.displayProductListReviews– negli elenchi prodotti, sotto ogni prodotto. Valutazioni a stelle.
Carrello e Checkout
displayShoppingCartFooter– sotto la tabella del carrello. Suggerimenti cross-sell.displayPaymentReturn– pagina di conferma ordine. Messaggi di ringraziamento, informazioni di tracciamento.displayOrderConfirmation– anche sulla conferma ordine. Script di tracking analytics.
Action Hooks principali
Eventi del carrello
actionCartSave– si attiva dopo ogni modifica al carrello. Usalo per controlli delle scorte in tempo reale o ricalcoli dei prezzi.actionCartUpdateQuantityBefore– prima delle modifiche alla quantita. Ti permette di validare o bloccare la modifica.
Eventi degli ordini
actionValidateOrder– si attiva quando un ordine viene creato. Contiene l'oggetto ordine completo, il carrello, il cliente e la valuta.actionOrderStatusPostUpdate– dopo un cambio di stato dell'ordine. Attiva notifiche, aggiorna sistemi esterni, modifica le scorte.actionPaymentConfirmation– quando il pagamento e confermato. Diverso dalla validazione dell'ordine per i metodi di pagamento differito.
Eventi del cliente
actionCustomerAccountAdd– nuova registrazione cliente. Sincronizzazione con CRM, invio email di benvenuto.actionAuthentication– il cliente effettua il login. Aggiornamento ultimo accesso, sincronizzazione dati di sessione.
Eventi del prodotto
actionProductSave– prodotto creato o aggiornato. Sincronizzazione con i feed, aggiornamento cache.actionProductDelete– prodotto rimosso. Pulizia dei dati del modulo correlati.actionUpdateQuantity– cambiamenti del livello delle scorte. Attivazione alert scorte basse, aggiornamento disponibilita.
Dynamic Hooks (PS 1.7.7+)
PrestaShop genera hooks dinamicamente in base all'entita e all'azione:
action{Entity}{Action}Before
action{Entity}{Action}After
Ad esempio: actionProductFormBuilderModifier ti permette di aggiungere campi al form di modifica prodotto nel pannello admin.
L'hook setMedia
actionFrontControllerSetMedia e il posto giusto per registrare i file CSS e JavaScript. A differenza di displayHeader, si attiva prima del rendering della pagina e fornisce il contesto del 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'
);
}
}
Insidie comuni
- Query pesanti nei Display Hooks – i Display Hooks si attivano a ogni caricamento di pagina. Metti in cache le tue query o usa il caricamento lazy.
- Registrare hooks che non usi – ogni hook registrato aggiunge overhead, anche se il metodo non restituisce nulla.
- Dimenticare
registerHook()ininstall()– gli hooks devono essere registrati durante l'installazione del modulo. Dimenticare questo e il motivo numero 1 per cui gli hooks non si attivano. - Non controllare la classe del controller – se il tuo hook deve funzionare solo sulle pagine prodotto, verifica
instanceof ProductControllerprima di procedere.
Gli hooks sono potenti ma richiedono disciplina. Usa l'hook giusto per il compito giusto, mantieni i tuoi metodi hook veloci e testa sempre con la cache attivata per individuare problemi di performance in anticipo.
Commenti (2)
Lascia un commento