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.

Novità di PrestaShop 9.0? Guida completa alle funzionalità e alla migrazione

Perché PrestaShop?

PrestaShop è una piattaforma di e-commerce open source leader nel settore, nota per la sua flessibilità, le sue potenti funzionalità e l’assenza di costi di licenza. Nota per la sua interfaccia intuitiva, il supporto multilingua/valuta e il ricco ecosistema di moduli e temi, è ideale per le PMI che creano negozi online personalizzati. PrestaShop 9.0 rappresenta una pietra miliare significativa, offrendo aggiornamenti delle prestazioni e innovazioni architetturali essenziali che riflettono i moderni standard di sviluppo, la scalabilità e la manutenibilità a lungo termine.

Quali sono le novità di PrestaShop 9.0?

PrestaShop 9.0 apporta una modernizzazione completa del framework di base: un grande passo avanti che ridefinisce il modo in cui sviluppatori e proprietari di negozi interagiscono con il sistema.

Modifiche all’architettura di base

Integrazione completa con Symfony: PrestaShop 9 completa la transizione al framework Symfony, fornendo una base moderna e stabile per lo sviluppo futuro. Classi legacy e controller obsoleti sono stati deprecati o sostituiti, rendendo il sistema più manutenibile e allineato alle best practice.

Supporto PHP 8.1+: Richiede PHP 8.1 o versione successiva, garantendo compatibilità con le funzionalità più recenti, maggiore sicurezza e prestazioni più rapide.

Dottrina DBAL:Il livello di astrazione del database migliora le interazioni con il database, offrendo una migliore astrazione, creazione di query e testabilità, particolarmente utile per le personalizzazioni su larga scala.

Sviluppo incentrato sul compositore: Composer 2.x ora svolge un ruolo centrale nel flusso di lavoro di sviluppo, gestendo la gestione delle dipendenze, l’integrazione dei moduli e il caricamento automatico senza problemi. Ciò semplifica il controllo delle versioni e migliora la compatibilità CI/CD.

Miglioramenti di back office e sviluppatori

Concentrandosi sui miglioramenti del backend, commercianti e sviluppatori noteranno:

  • Caricamenti delle pagine più rapidi e tempi di risposta del server migliorati
  • Base di codice più pulita grazie alla rimozione della logica legacy
  • Modularità migliorata per moduli più puliti e autonomi
  • Copertura di test più solida per versioni stabili e sicure

Sebbene le modifiche all’interfaccia utente siano minime, questi aggiornamenti introduttivi migliorano notevolmente la stabilità e la manutenibilità dello store.

Guida alla migrazione: da PrestaShop 8 a 9

Metodo 1: Aggiornamento con un clic (consigliato)

Strumenti disponibili:

  • Modulo di aggiornamento ufficiale 1-Click: il modulo di aggiornamento standard di PrestaShop gestisce automaticamente le transizioni di versione
  • MigrationPro: soluzione di terze parti che supporta la migrazione con trasferimento dati completo
  • PrestaShop Migrator: soluzione alternativa con un clic per aggiornamenti senza interruzioni

vantaggi:

  • Processo automatizzato con intervento manuale minimo
  • Controlli di integrità dei dati integrati
  • Riduzione del rischio di errore umano
  • Tempo di migrazione più rapido
  • Creazione automatica di backup

Processo di backup con aggiornamento automatico:

  1. BackupInitialization: avvio del processo, cancellazione dei file temporanei rimanenti
  2. BackupFiles: backup completo di file di archivio, temi, moduli, immagini e codice personalizzato
  3. BackupDatabase: crea un backup completo dell’intero database, incluse tutte le tabelle e i dati memorizzati.
  4. Fammi sapere se preferisci una versione più concisa o più dettagliata.
  5. BackupComplete: Finalizzazione del processo con verifica

Processo di rollback:Se durante l’aggiornamento si verificano problemi, è possibile ripristinare facilmente l’operazione tramite la sezione “Rollback” del modulo di aggiornamento automatico, selezionando l’archivio di backup e monitorando l’avanzamento del rollback.

Migrazione dei dati: Gestisce automaticamente il trasferimento di prodotti, categorie, attributi, account clienti, cronologia ordini, pagine CMS, impostazioni di configurazione, immagini e configurazioni di moduli compatibili.

Metodo 2: migrazione manuale (che richiede molto tempo)

Nuova installazione di PrestaShop 9 seguita dalla migrazione manuale dei dati.

Panoramica del processo:

  1. Esaminare i requisiti del server: PHP 8.1+, MySQL 5.7+/MariaDB 10.3+, Composer 2.x, Apache/Nginx
  2. Backup completo: Database, file, configurazione, codice personalizzato
  3. Installa PrestaShop 9.0: Nuova installazione tramite Git e Composer
  4. Strategia di migrazione dei dati: Esporta da PS8 (prodotti, clienti, ordini, CMS, configurazioni) e importa in PS9 utilizzando strumenti nativi, moduli di terze parti o inserimento manuale
  5. Valutazione della compatibilità del modulo: Verifica i moduli esistenti, aggiorna quelli compatibili, identifica alternative per i moduli incompatibili
  6. Ricostruzione del tema: Ricostruisci i temi utilizzando l’architettura aggiornata di PS9, adattandoli ai requisiti di Symfony
  7. Test completo: Funzionalità di front office (navigazione, checkout, pagamenti, mobile) e back office (gestione prodotti, ordini, reporting)

Consigli

Metodo 1 (aggiornamento con un clic) è fortemente consigliato per la maggior parte dei commercianti perché:

  • Tempo di migrazione significativamente ridotto
  • Minor rischio di perdita/corruzione dei dati
  • Gestione automatizzata di relazioni di dati complesse
  • Funzionalità di rollback integrate
  • Disponibilità di supporto professionale

Prendere in considerazione il Metodo 2 (migrazione manuale) solo per requisiti di personalizzazione specifici che richiedono una nuova installazione o quando gli strumenti automatizzati non sono compatibili.

Lista di controllo post-migrazione

Indipendentemente dal metodo scelto:

  • Verificare tutte le funzioni critiche del negozio
  • Prova le integrazioni di pagamento e spedizione
  • Conferma le impostazioni SEO e le strutture URL
  • Aggiorna i certificati DNS e SSL se necessario
  • Monitora le prestazioni del sito e la velocità di caricamento
  • Formare il personale sulle modifiche dell’interfaccia

Considerazioni finali

PrestaShop 9.0 traccia un percorso deciso verso una maggiore velocità, una maggiore sicurezza e un ecosistema più incentrato sugli sviluppatori. Sebbene l’aggiornamento richieda pianificazione e impegno, i vantaggi a lungo termine sono considerevoli: prestazioni migliori, codice più pulito, maggiore scalabilità e strumenti moderni.

Se utilizzi una versione precedente, valuta il valore a lungo termine del passaggio a PrestaShop 9. In caso di dubbi sulla procedura o in assenza di sviluppatori interni, è altamente consigliato consultare un esperto PrestaShop o un partner certificato.

Stai ancora decidendo se cambiare?

Se non sei sicuro che passare da PrestaShop 8 a 9 sia la scelta giusta per il tuo negozio, ti invitiamo a dare un’occhiata al nostro confronto dettagliato e ai consigli dei nostri esperti.

Scopri i principali vantaggi, i potenziali rischi e l’impatto concreto della migrazione e prendi una decisione informata per la tua azienda.

Esplora la guida comparativa tra PrestaShop 8 e 9