Utilizzare efficacemente i PrestaShop Hooks nello sviluppo dei moduli.

Se hai dedicato del tempo reale alla costruzione Moduli PrestaShopProbabilmente, la maggior parte delle vostre battaglie si è combattuta con gli hook. Sono il modo in cui il vostro modulo comunica con il nucleo del programma, il modo in cui integrate funzionalità senza mai aprire un file che non dovreste toccare. Sapere che esistono è una cosa, usarli senza commettere errori è tutt’altra.

Cos’è realmente un gancio

In parole semplici, un hook è un momento nell’esecuzione di PrestaShop in cui il sistema si mette in pausa e verifica se qualcuno è in ascolto. Se il tuo modulo è registrato per quell’hook, ha la possibilità di rispondere.

Esistono due tipi di hook che vale la pena distinguere: gli hook di azione e gli hook di visualizzazione. Gli hook di azione servono per eseguire la logica legata a un evento, come ad esempio l’inserimento di un ordine, il salvataggio di un prodotto e simili. Gli hook di visualizzazione servono per inserire codice HTML in punti specifici del sito o del back-office. La distinzione influenza il modo in cui si scrive il metodo. Gli hook di azione elaborano qualcosa e di solito non restituiscono nulla di significativo. Gli hook di visualizzazione restituiscono codice HTML renderizzato che PrestaShop inserisce nella pagina.

Dove gli sviluppatori sbagliano con la registrazione

L’errore iniziale più comune è registrare gli hook nel posto sbagliato o in modo disorganizzato. La registrazione appartiene al tuo modulo installare() metodo tramite $this->registerHook()È possibile passare un array di nomi di hook in una singola chiamata, il che è molto più ordinato rispetto a concatenare chiamate ripetute.

Altrettanto importante: annulla la loro registrazione in disinstallare()È facile trascurare questo aspetto, ma è altrettanto facile pentirsene. Le registrazioni di hook orfane che rimangono nel database dopo la rimozione di un modulo possono causare comportamenti davvero confusionari in futuro. Uno schema corretto si presenta più o meno così:

la percezione funzione install()

{

    ritorno genitore::install()

        && $ This->RegisterHook(['displayHeader',

           'actionOrderStatusUpdate',

           'displayFooterProduct'])?

}


Utilizzare i nomi dei metodi corretti

PrestaShop risolve i metodi hook per convenzione: hookHookName(), con il nome dell’hook in camelCase. Quindi visualizzazioneintestazione mappe a hookDisplayHeader()Se sbagli le maiuscole/minuscole, PrestaShop salta silenziosamente il tuo metodo, senza alcun errore, senza alcuna voce di registro, niente di niente. 

È uno di quei bug che possono richiedere una quantità imbarazzante di tempo di debug prima che tu riesca a individuarlo.

Ogni metodo di aggancio riceve un $param array. Il contenuto dipende interamente da quale hook lo ha attivato. Durante lo sviluppo, dump $param Prima di scrivere la logica vera e propria, è consigliabile consultare la documentazione. È un buon punto di partenza, ma non sempre rispecchia fedelmente ciò che viene effettivamente passato come parametro.

 

Gestione corretta dei ganci espositivi

Per i hook di visualizzazione, l’approccio standard è quello di assegnare variabili a Smarty e restituire l’output di $this->display() indicando un .tpl file. Mantieni i tuoi modelli in viste/modelli/hook/ All’interno del modulo, la struttura è convenzionale e semplifica la navigazione man mano che il modulo si espande.

Un dettaglio che vale la pena sottolineare: sempre ritorno L’output, non visualizzarlo mai. Il sistema hook raccoglie i valori di ritorno e li posiziona dove devono nel layout. Se si visualizza direttamente, l’output finisce nella parte superiore della pagina indipendentemente da dove si trovi effettivamente l’hook.

Quando i ganci integrati non bastano

Gli hook nativi di PrestaShop coprono un’ampia gamma di funzionalità, ma ci sono situazioni, soprattutto quando si creano moduli destinati ad essere estesi, in cui è necessario qualcosa di più mirato. È possibile registrare un hook personalizzato con Hook::register() e spararlo usando Hook::exec() da qualsiasi punto del tuo codice sorgente.

Gli hook personalizzati sono particolarmente utili nei progetti multi-modulo. Invece di far sì che i moduli si richiamino direttamente, si espone un hook e si permette agli altri moduli di rispondere in modo indipendente. Questo mantiene l’architettura pulita e semplifica notevolmente le modifiche future.

Non trascurare l’aspetto prestazionale

È facile sottovalutare quanti danni può causare un metodo di aggancio mal ottimizzato. Ganci come visualizzazioneintestazione Il caricamento della pagina avviene quasi ad ogni accesso. Se il metodo utilizzato accede al database o chiama un’API esterna senza alcuna cache, la velocità di caricamento della pagina ne risente notevolmente, e i tuoi clienti se ne accorgeranno prima di te.

Alcuni accorgimenti possono essere utili. Memorizza nella cache tutto ciò che non cambia tra una richiesta e l’altra. Utilizza la cache integrata di PrestaShop quando possibile. E se la logica del tuo hook si applica solo in determinate condizioni, verifica tali condizioni all’inizio del metodo e interrompi l’esecuzione se non sono soddisfatte. In questo modo si riduce il sovraccarico e si mantiene il codice leggibile.

Quando il gancio non spara

Quando qualcosa non funziona come previsto, la prima cosa da verificare è se il modulo è effettivamente collegato all’hook. Vai su Moduli > Posizioni nel back office oppure controlla direttamente la tabella degli hook nel database. Un modulo può essere installato anche se la registrazione di un hook non è andata a buon fine durante la configurazione.

Servizi di sviluppo personalizzato

Soluzioni personalizzate Knowband per il successo del tuo e-commerce

Cerchi soluzioni potenti e scalabili? Knowband offre servizi di sviluppo personalizzati e professionali per aiutarti a creare con facilità funzionalità di e-commerce ad alte prestazioni.

✔ Sviluppo di moduli personalizzati
✔ Plugin per l’e-commerce
✔ Integrazione API
✔ Ottimizzazione delle prestazioni
✔ Integrazione con terze parti

Da considerare anche l’ordine di esecuzione. Se un modulo precedente nella catena genera un’eccezione non gestita, PrestaShop può interrompere l’elaborazione di tutto il resto collegato a quell’hook. Il pannello Posizioni consente di modificare l’ordine e a volte è sufficiente per risolvere quello che sembra un hook misteriosamente scomparso.

Il Takeaway

I ganci sono ciò che fa Moduli PrestaShop In realtà modulari. Usati bene, consentono di creare integrazioni pulite che non interferiscono con il core o con altri moduli. I principi fondamentali non sono complicati: registrarsi in installare()Assegna nomi precisi ai tuoi metodi, restituisci risultati dagli hook di visualizzazione, memorizza nella cache gli hook ad alto traffico e ricorri agli hook personalizzati quando quelli predefiniti non sono sufficienti.

Una volta che questa pratica diventa un’abitudine, il processo di sviluppo risulta molto più fluido e il codice sorgente rimane qualcosa che si ha effettivamente voglia di rivedere in seguito.

At KnowbandIl nostro team di sviluppo lavora regolarmente con architetture di moduli PrestaShop complesse, dove un utilizzo efficiente degli hook diventa fondamentale per prestazioni e scalabilità. Se desideri velocizzare lo sviluppo o implementare funzionalità avanzate, esplorare moduli e soluzioni realizzati da professionisti può farti risparmiare tempo e fatica preziosi.

Come utilizzare il sistema di override di PrestaShop senza compromettere il core

Il sistema di override di PrestaShop consente di personalizzare il comportamento del core senza toccare i file originali. Tuttavia, se utilizzato senza attenzione, crea negozi fragili che si bloccano durante gli aggiornamenti. Questa guida di Knowband spiega come funzionano gli override, quando utilizzarli e tre accorgimenti critici che ogni sviluppatore dovrebbe conoscere.

Che cos’è il sistema di override?

PrestaShop utilizza l’ereditarietà PHP per permetterti di sostituire la tua versione di qualsiasi classe core senza modificare gli originali. Ogni classe core ha un nome con il suffisso Core, ad esempio ProductCore. Se crei /override/classes/Product.php con una classe chiamata Product che estende ProductCore, PrestaShop caricherà la tua versione. Lo stesso vale per i controller.

Sovrascrivi solo i metodi specifici che devi modificare, senza mai copiare un intero file di classe. In questo modo, l’override sarà più snello e molto meno soggetto a conflitti con aggiornamenti futuri.

Esempio, esponendo il nome del controller corrente al modello di intestazione:

Dove posizionare i file di override

Gli override possono risiedere in due posizioni. La directory globale /override/ alla radice dell’installazione è attiva immediatamente dopo la cancellazione della cache. L’approccio migliore è raggruppare gli override all’interno di un modulo.

Inserire un override all’interno di un modulo (ad esempio /modules/mymodule/override/classes/Product.php) fa sì che PrestaShop lo copi in /override/ durante l’installazione e lo rimuova in modo pulito durante la disinstallazione. Questo è l’approccio consigliato.

Un rapido esempio di override di classe. Supponiamo di voler esporre il nome del controller corrente al modello di intestazione:

// /override/classes/controllers/FrontController.php

classe FrontController estende FrontControllerCore {

    funzione pubblica initHeader() {

        self::$smarty->assign('currentController', get_class($this));

        restituisci parent::initHeader();

    }}

Chiama sempre il metodo padre, a meno che tu non abbia una ragione specifica per non farlo. Saltarlo comprometterà silenziosamente le funzionalità principali.

Sovrascrittura di classi di moduli e controller

A partire da PrestaShop 1.6, è possibile sovrascrivere anche le classi dei moduli. Aggiungere “Override” al nome della classe (ad esempio, BlockUserInfoOverride che estende BlockUserInfo) e posizionarlo in /override/modules/. Lo stesso schema si applica ai controller dei moduli. Dopo ogni sovrascrittura, svuotare la cache, in particolare eliminare /cache/class_index.php, altrimenti non avrà effetto.

Quando NON utilizzare gli override

Gli override sono esclusivi: ne può esistere solo uno per classe. Sono inoltre vietati nei moduli del marketplace e dovrebbero essere riservati alle personalizzazioni degli store privati. Prima di ricorrere a un override, valuta una di queste alternative:

  • ganci: PrestaShop attiva eventi hook a ogni caricamento di pagina: puoi sfruttarli da un modulo per eseguire codice personalizzato o caricare contenuti nella pagina senza avvicinarti a una classe principale.
  • Override del servizio Symfony: Le parti di PrestaShop migrate a Symfony offrono un percorso più chiaro all’interno del contenitore dei servizi. È possibile decorare o sostituire un servizio anziché intervenire sulla classe stessa.
  • Modello oggetto personalizzato: Devi aggiungere campi a un’entità principale? Crea il tuo ObjectModel con una tabella dedicata, invece di modificare quello esistente.

Mantenere gli override sicuri tramite aggiornamenti

Gli aggiornamenti di PrestaShop possono modificare silenziosamente le firme dei metodi, lasciando l’override in esecuzione su presupposti obsoleti. Tratta ogni override come qualcosa da rivedere dopo ogni aggiornamento. Commenta cosa hai modificato e perché, controlla il changelog e mantieni l’override il più breve possibile. Un override ristretto e ben commentato che chiama correttamente i metodi padre sopravvive agli aggiornamenti. Una copia completa della classe è un bug in attesa di emergere.

La cache “fantasma”: perché il tuo override sembra invisibile

Il motivo principale per cui gli sviluppatori pensano che il loro override sia errato: PrestaShop non analizza /override/ a ogni richiesta. Compila una mappa di classi in /cache/class_index.php e, finché quel file non viene eliminato e rigenerato, l’override è invisibile, indipendentemente da quanto sia corretto il codice. Svuotare la cache di Smarty non è sufficiente. Eliminate class_index.php manualmente tramite FTP/SSH, tramite Parametri Avanzati > Prestazioni nel back office o tramite la console di Symfony.

Figura 1: Flusso del sistema di override di PrestaShop e ruolo di /cache/class_index.php.

 

Il muro di Symfony: gli override legacy non funzionano per i controller moderni

Questo sistema PHP legacy funziona solo sul vecchio layer ObjectModel di PrestaShop. A partire dalla versione PS 1.7, le aree chiave del back office, tra cui le nuove schermate Pagina Prodotto e Ordini, sono state riscritte in Symfony. Il sistema di override PHP non influisce su questi controller Symfony. Per quelli, usa Decorazione del servizio, avvolgendo o sostituendo un servizio tramite il file services.yml del modulo. Se un override non ha effetto anche dopo aver cancellato class_index.php, è probabile che il controller sia stato migrato a Symfony.

Risoluzione dei conflitti: quando due moduli vogliono la stessa classe

Quando due moduli sovrascrivono entrambi la stessa classe, PrestaShop genera un errore durante la seconda installazione e lascia il suo override inattivo. La soluzione è manuale: apri entrambi i file, unisci tutti i metodi in un unico file /override/ che estende la classe Core, quindi elimina class_index.php. Aggiungi commenti che identificano quale modulo ha contribuito a ciascun metodo. Questo è il motivo per cui gli override sono vietati nei moduli del marketplace: i conflitti diventano un problema per il commerciante. Se si sviluppa per altri, utilizzare gli hook.

Figura 2: Come si verificano i conflitti di override quando due moduli hanno come target la stessa classe e la risoluzione manuale dell’unione.

Informazioni su Knowband

Knowband è un fornitore affidabile di plugin ed estensioni per l’e-commerce con anni di esperienza nell’aiutare i commercianti online a creare negozi più veloci, intelligenti e ricchi di funzionalità. Che tu gestisca il tuo negozio su PrestaShop, OpenCart, Shopify, WooCommerce, Magentoo qualsiasi altra piattaforma importante, Knowband offre un’ampia gamma di plugin ed estensioni pronti all’uso che ti aiutano a migliorare le funzionalità, le prestazioni e a offrire un’esperienza di acquisto migliore, senza dover partire da zero.

Dovresti passare da PrestaShop 8.1 a 9.0? Un confronto completo delle funzionalità

Con il rilascio di PrestaShop 9.0, la piattaforma si sta muovendo verso un futuro più moderno, orientato alle prestazioni e orientato agli sviluppatori. Tuttavia, come per ogni aggiornamento importante, commercianti e sviluppatori si trovano di fronte a un interrogativo importante: È il momento giusto per migrare da PrestaShop 8.1?

In questo blog esploreremo le principali differenze tra PrestaShop 8.1 e 9.0. Dagli aggiornamenti delle prestazioni agli strumenti per sviluppatori, parleremo di tutto ciò che devi sapere per prendere una decisione consapevole sul futuro del tuo negozio.

Aggiornamento del framework Symfony: da 4.4 a 6.4

Innanzitutto, una delle modifiche più significative di PrestaShop 9.0 è l’aggiornamento del framework Symfony dalla versione 4.4 a Symfony 6.4, l’ultima versione con supporto a lungo termine (LTS). Questa transizione garantisce maggiore stabilità, sicurezza e accesso a strumenti di sviluppo moderni.

Symfony 6.4 sarà supportato con correzioni di bug fino a novembre 2026 e patch di sicurezza fino a novembre 2027, garantendo stabilità a lungo termine per i progetti in evoluzione. Al contrario, Symfony 4.4, utilizzato in PrestaShop 8.1, ha già raggiunto il termine del suo supporto. Pertanto, PrestaShop 9.0 rappresenta la scelta più intelligente per i progetti a lungo termine.

Compatibilità PHP e miglioramenti delle prestazioni

Inoltre, PrestaShop 9.0 introduce il supporto per PHP 8.1, 8.2 e 8.3. Questo consente ai commercianti di beneficiare di prestazioni migliorate, una migliore gestione della memoria e funzionalità PHP moderne.

A differenza di PrestaShop 8.1, che si fermava a PHP 8.1, la nuova versione integra le ultime release di PHP, rappresentando un importante passo avanti. Di conseguenza, PrestaShop 9.0 è più allineato ai moderni standard PHP e alle pratiche di sviluppo. Tuttavia, è importante tenere presente che gli ambienti di hosting più datati e il codice personalizzato potrebbero richiedere aggiornamenti per garantire la compatibilità.

Piattaforma API moderna per il commercio headless

Inoltre, PrestaShop 9.0 introduce un nuovissimo sistema API basato su API Platform v3, migliorando notevolmente l’interazione con le applicazioni esterne. Questo lo rende ideale per architetture di commercio headless, integrazioni di app mobili e servizi di terze parti. Al contrario, PrestaShop 8.1 si basava su un’API legacy, priva della flessibilità e della scalabilità che gli sviluppatori moderni si aspettano. Di conseguenza, il nuovo sistema API apre un mondo di opportunità per l’automazione e l’integrazione. PrestaShop 9 introduce un’API di amministrazione completamente riprogettata, realizzata utilizzando API Platform, un framework PHP all’avanguardia noto per la sua flessibilità e potenza. Questa innovazione segna un passo significativo verso la creazione di un ambiente PrestaShop più aperto, estensibile e incentrato sugli sviluppatori.

Ecco cosa offre la nuova API di amministrazione:

  • Integrazione semplificata con piattaforme esterne quali ERP, CRM e strumenti di marketing.
  • Architettura predisposta per l’automazione che aiuta a ridurre la gestione manuale del magazzino e aumenta l’efficienza operativa.
  • Struttura RESTful con formattazione JSON, che garantisce semplicità d’uso per gli sviluppatori abituati agli standard API moderni.
  • Modularità orientata al futuro, che consente al sistema di crescere e adattarsi alle esigenze della comunità e delle aziende.

Vale la pena notare che l’API di amministrazione è ancora in fase di evoluzione. Sebbene il framework di base sia già operativo, funzionalità ed endpoint aggiuntivi sono in fase di sviluppo attivo.

Aggiornamenti di Key Hook in PrestaShop 9

 PrestaShop 9 mantiene la maggior parte degli hook più utilizzati della versione 8 per garantire la compatibilità tra moduli e temi. Hook comuni per il front-office come visualizzazioneintestazione, displayFooter, displayHome e Pulsanti di visualizzazione del prodotto rimangono supportati. Nel back office, ganci importanti come visualizza intestazione BackOffice, displayAdminOrderMain e displayAdminProdottiExtra sono ancora disponibili per estendere le funzionalità principali.

Oltre a questi, PrestaShop 9 introduce moderni hook basati su Symfony come azioneSymfonyResponse, azioneDopoCarrelloSalva e Modificatore di azioneProductFormBuilderOffrono un approccio alla personalizzazione più pulito e basato sugli eventi e fanno parte dell’evoluzione della piattaforma verso una struttura più modulare e scalabile.

Back Office riprogettato utilizzando Symfony e Twig

Un altro miglioramento significativo è il completo rinnovamento del back office, ora basato su Symfony e Twig per una struttura più moderna e manutenibile. Questo si traduce in un’esperienza di amministrazione più intuitiva, ottimizzata per i dispositivi mobili e incentrata sull’utente.

Per i proprietari di negozi, il layout riprogettato significa una navigazione più semplice e una maggiore produttività. Per gli sviluppatori, il cambiamento supporta template più puliti e riduce le dipendenze dal codice legacy. D’altro canto, PrestaShop 8.1 mantiene un’interfaccia più tradizionale, che potrebbe ora apparire obsoleta al confronto.

Miglioramenti incentrati sugli sviluppatori

Inoltre, PrestaShop 9.0 ha sostituito diverse librerie obsolete utilizzate nelle versioni precedenti. Ad esempio:

  • Client HTTP Guzzle → Client HTTP Symfony
  • SwiftMailer → Symfony Mailer

Questi aggiornamenti garantiscono una gestione più sicura, efficiente e a prova di futuro dei moduli e delle e-mail.

Inoltre, il sistema di login è stato modernizzato. I vecchi hook sono stati rimossi ed è stato introdotto un nuovo hook actionBackOfficeLoginForm, che offre flussi di autenticazione più puliti e personalizzabili.

Transizione verso i modelli Twig

È importante sottolineare che PrestaShop 9.0 compie anche un passo coraggioso verso la piena integrazione con Twig, sostituendo gradualmente il vecchio motore Smarty. Twig è ora ampiamente utilizzato sia nel front office che nel back office, offrendo template più leggibili, modulari e riutilizzabili.

Per gli sviluppatori di temi, questo rappresenta un miglioramento significativo. Al contrario, la dipendenza di PrestaShop 8.1 da Smarty ne limita la flessibilità e la manutenibilità a lungo termine.

Dovresti passare a PrestaShop 9.0?

PrestaShop 9.0 apporta notevoli miglioramenti, ma prima di effettuare l’aggiornamento, assicurati che il tuo negozio sia pronto ad affrontare il cambiamento. If Se i tuoi temi, moduli e ambiente di hosting sono compatibili (o possono essere facilmente aggiornati), la migrazione può apportare notevoli vantaggi in termini di prestazioni e UX.

In alternativa, se il tuo negozio attuale dipende fortemente da plugin legacy o da codice personalizzato complesso, potrebbe essere più saggio attendere che sia disponibile un supporto più ampio per i moduli. Si consiglia vivamente di testare in un ambiente di staging prima di impegnarsi in un aggiornamento completo.

Suggerimenti per la migrazione per i proprietari di negozi

Prima di effettuare il passaggio, segui queste buone pratiche:

  • Esegui il backup dell’intero negozio, incluso il database e tutti i file personalizzati.
  • Per evitare di interrompere il tuo negozio attivo, testa prima l’aggiornamento in un ambiente di staging.
  • Verificare la compatibilità con tutti i temi e i moduli di terze parti.
  • Monitorare il feedback della community per segnalazioni di bug e problemi di migrazione.
  • Eseguire test approfonditi, in particolare nelle aree dedicate alle casse, ai pagamenti e all’esposizione dei prodotti.

Considerazioni finali

PrestaShop 9.0 segna un grande passo avanti verso una piattaforma di e-commerce moderna, sicura e scalabile. Dalle prestazioni più veloci e dai framework aggiornati a un’esperienza di sviluppo più intuitiva, offre vantaggi significativi sia per i commercianti che per gli sviluppatori.

In conclusione, sebbene la migrazione richieda impegno e pianificazione, i vantaggi a lungo termine la rendono un investimento proficuo. Che tu sia un utente esperto di PrestaShop o che tu stia pianificando il tuo primo negozio, questo è il momento ideale per scoprire cosa può fare la versione 9.0 per la tua attività. Se stai cercando una soluzione affidabile per garantire un aggiornamento senza intoppi, KnowBand offre lo sviluppo di moduli personalizzati ed estensioni pronte per PrestaShop 9.0 che possono accelerare la tua transizione. Il loro supporto esperto e la solida libreria di moduli PrestaShop li rendono un partner prezioso durante gli aggiornamenti più importanti.