Migrazione a PrestaShop 9: Guida completa all'aggiornamento
Guida passo dopo passo per aggiornare il tuo negozio a PrestaShop 9 — prerequisiti, backup, compatibilità moduli, migrazione tema e piani di rollback.
Perché aggiornare a PrestaShop 9
PrestaShop 9 è il più grande cambiamento architetturale dalla transizione dalla versione 1.6 alla 1.7. Non è un semplice aggiornamento di versione — è una modernizzazione fondamentale della piattaforma. Se stai utilizzando PrestaShop 1.7 o 8.x, la domanda non è se dovresti aggiornare, ma quando e come farlo correttamente.
Ecco cosa porta PrestaShop 9:
Symfony 6.4 LTS sotto il cofano
PrestaShop 9 passa da Symfony 4.4 (PS 8.x) a Symfony 6.4 LTS. Si tratta di una release con supporto a lungo termine, il che significa che riceverai patch di sicurezza e correzioni di bug fino a novembre 2027. L’aggiornamento a Symfony porta una dependency injection moderna, un routing migliorato, una gestione degli errori superiore e un ciclo di vita delle richieste significativamente più veloce.
Per i proprietari di negozi, questo significa una base più stabile e sicura. Per gli sviluppatori, significa accesso a componenti e pattern moderni di Symfony attorno ai quali l’ecosistema PHP si è standardizzato.
PHP 8.2+ richiesto
PrestaShop 9 richiede PHP 8.2 come minimo, con pieno supporto per PHP 8.3. Non è una scelta arbitraria — PHP 8.2+ porta readonly classes, fibers, un sistema di tipi migliorato e miglioramenti prestazionali significativi. I benchmark mostrano un’esecuzione più veloce del 5-15% rispetto a PHP 7.4, con un minor consumo di memoria su tutta la linea.
Se sei ancora su PHP 7.4 o 8.0, il solo aggiornamento a PHP 8.2+ renderà il tuo negozio notevolmente più veloce — anche prima di toccare PrestaShop.
Twig ovunque nell’admin
Il back office ha completato la migrazione da Smarty a Twig. Ogni pagina di amministrazione ora funziona con template Twig, il che significa un rendering più veloce, una maggiore sicurezza (escaping automatico dell’output) e un motore di template effettivamente mantenuto e ben documentato. I controller admin legacy funzionano ancora attraverso un livello di compatibilità, ma la direzione è chiara: Twig è il presente e il futuro.
Hummingbird come tema predefinito
Il tema Classic è sostituito da Hummingbird come tema predefinito per il front office. Hummingbird è costruito su Bootstrap 5.3, utilizza le moderne CSS custom properties ed è significativamente più leggero di Classic. È progettato per le prestazioni — bundle CSS più piccoli, meno JavaScript e migliori punteggi Core Web Vitals fin da subito.
Miglioramenti della sicurezza
Symfony 6.4 porta un componente di sicurezza completamente rinnovato. L’hashing delle password utilizza algoritmi moderni (bcrypt/argon2), la protezione CSRF è più robusta e il sistema di autenticazione si basa sul security bundle di Symfony anziché sull’approccio legacy basato sui cookie di PrestaShop. Le vulnerabilità SQL injection e XSS nei percorsi di codice legacy sono state sistematicamente eliminate.
PrestaShop 9 non è un aggiornamento cosmetico. Cambia il funzionamento della piattaforma nel suo nucleo. Ecco perché è necessario affrontare l’aggiornamento in modo metodico — la ricompensa è un negozio più veloce, più sicuro e più manutenibile, ma solo se la migrazione viene eseguita correttamente.
Prima di iniziare: checklist dei prerequisiti
Non toccare il tuo negozio in produzione finché non hai verificato ogni elemento di questa lista. Saltare i prerequisiti è la causa numero uno degli aggiornamenti falliti.
Requisiti del server
- PHP 8.2 o 8.3 — verifica con
php -vsul tuo server. PHP 8.1 NON funzionerà. - MySQL 8.0+ o MariaDB 10.4+ — verifica con
mysql --version. MySQL 5.7 non è più supportato. - Estensioni PHP richieste: intl, gd, curl, zip, mbstring, openssl, pdo_mysql, fileinfo, dom, json
- Composer 2.x — necessario per la gestione delle dipendenze durante l’aggiornamento
- Almeno 256MB di PHP memory_limit — il processo di aggiornamento richiede molta memoria
- max_execution_time di almeno 600 secondi — i negozi grandi necessitàno di tempo per le migrazioni del database
Per controllare rapidamente la tua configurazione PHP:
# Check PHP version
php -v
# Check loaded extensions
php -m | grep -E "(intl|gd|curl|zip|mbstring|openssl|pdo_mysql)"
# Check memory limit and execution time
php -i | grep -E "(memory_limit|max_execution_time)"
# Check MySQL version
mysql --version
Requisiti della versione PrestaShop
- Devi essere su PrestaShop 8.1 o 8.2 prima. Gli aggiornamenti diretti da 1.7.x o 1.6.x a 9.x non sono supportati.
- Se sei su PS 1.7.x, aggiorna prima alla 8.2, stabilizza, poi aggiorna alla 9.x.
- Se sei su PS 1.6.x — fermati. Hai bisogno di una ricostruzione completa, non di un aggiornamento. Consulta la sezione “Installazione pulita” qui sotto.
Audit di compatibilità dei moduli
Qui è dove la maggior parte degli aggiornamenti fallisce. Prima di aggiornare, devi sapere quali dei tuoi moduli sono compatibili con PS9 e quali no.
- Fai un elenco completo di ogni modulo installato (Back Office → Moduli → Gestione moduli)
- Per ogni modulo di terze parti, contatta il fornitore e chiedi: “La versione X.Y è compatibile con PrestaShop 9?”
- Per ogni modulo che non ha compatibilità confermata, ti serve un piano: aggiornarlo, sostituirlo o rimuoverlo
- Presta particolare attenzione ai moduli di pagamento — un gateway di pagamento incompatibile significa zero ricavi
Non dare per scontato che un modulo sia compatibile perché “funzionava su PS 8”. PrestaShop 9 rimuove API e modifica il comportamento del core. Un modulo che funzionava perfettamente sulla 8.2 può andare in crash sulla 9.0 perché richiama una funzione che non esiste più.
Compatibilità del tema
- Se stai usando il tema predefinito Classic, dovrai passare a Hummingbird o a un tema di terze parti compatibile con PS9
- Se stai usando un tema acquistato, verifica la compatibilità con PS9 presso lo sviluppatore del tema
- I temi personalizzati basati su Classic richiederanno un lavoro significativo — la struttura dei template è cambiata
- I child theme di Hummingbird sono il percorso consigliato per il futuro
Tempistica aziendale
- Non aggiornare mai durante i periodi di picco delle vendite (Black Friday, Natale, promozioni importanti)
- Programma l’aggiornamento durante il periodo di minor traffico — tipicamente a metà settimana, di mattina presto
- Prevedi almeno 48 ore di monitoraggio dopo l’aggiornamento prima del prossimo picco
- Tieni pronto un piano di rollback (trattato più avanti)
Prima di tutto: backup di tutto
Questo non è opzionale. Non è “consigliato”. È il singolo passaggio più importante. Se l’aggiornamento fallisce e non hai un backup, perdi il tuo negozio. Punto.
Backup del database
Il database contiene tutto ciò che conta — prodotti, clienti, ordini, configurazioni, impostazioni dei moduli. Esegui il backup con mysqldump:
# Standard mysqldump � works on any server
mysqldump -u root -p --single-transaction --quick --lock-tables=false prestashop > ~/backup_pre_ps9_$(date +%Y%m%d_%H%M%S).sql
# If your database is large (>1GB), add compression
mysqldump -u root -p --single-transaction --quick --lock-tables=false prestashop | gzip > ~/backup_pre_ps9_$(date +%Y%m%d_%H%M%S).sql.gz
Se il tuo PrestaShop gira in Docker:
# Replace 'my-shop-db' with your actual database container name
docker exec my-shop-db mysqldump -u root -p'YOUR_PASSWORD' --single-transaction --quick prestashop > ~/backup_pre_ps9_$(date +%Y%m%d_%H%M%S).sql
Spiegazione dei flag:
--single-transaction— acquisisce uno snapshot coerente senza bloccare le tabelle (fondamentale per InnoDB)--quick— recupera le righe una alla volta invece di memorizzarle tutte in memoria (essenziale per tabelle grandi)--lock-tables=false— evita il blocco delle tabelle durante il dump, così il negozio resta online
Verifica che il backup funzioni importandolo in un database di test:
# Create a test database and import the backup
mysql -u root -p -e "CREATE DATABASE prestashop_backup_test;"
mysql -u root -p prestashop_backup_test < ~/backup_pre_ps9_XXXXXXXX_XXXXXX.sql
# Check that it imported correctly
mysql -u root -p prestashop_backup_test -e "SELECT COUNT(*) FROM ps_product; SELECT COUNT(*) FROM ps_orders;"
# Clean up
mysql -u root -p -e "DROP DATABASE prestashop_backup_test;"
Backup dei file
Esegui il backup dell’intera directory di PrestaShop — tutti i file PHP, temi, moduli, immagini caricate, tutto:
# Full file backup with tar
tar -czf ~/prestashop_files_pre_ps9_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/html/
# If you want to exclude cache and logs (they're regenerated anyway)
tar -czf ~/prestashop_files_pre_ps9_$(date +%Y%m%d_%H%M%S).tar.gz \
--exclude='var/cache' \
--exclude='var/logs' \
/var/www/html/
Per i negozi basati su Docker, esegui il backup del volume montato:
tar -czf ~/prestashop_files_pre_ps9_$(date +%Y%m%d_%H%M%S).tar.gz /path/to/docker/html/
Conserva i tuoi backup in almeno due posizioni — il server stesso E una posizione esterna (il tuo computer locale, un bucket di cloud storage o un server diverso). Un backup che esiste solo sullo stesso disco del tuo negozio non è un vero backup.
Note sulla configurazione
Prima di iniziare, documenta queste impostazioni (ti serviranno se dovrai riconfigurare):
- Il tuo
app/config/parameters.php(credenziali del database, configurazione del mailer, chiave dei cookie) - Il tuo file
.htaccess(specialmente se hai aggiunto regole di rewrite personalizzate) - La configurazione SMTP/email dal back office
- Le chiavi API e le impostazioni del gateway di pagamento
- Le configurazioni dei cron job
- Eventuali configurazioni personalizzate del server (regole Nginx, impostazioni del pool PHP-FPM)
Fai degli screenshot delle pagine di impostazioni critiche del back office. Quando qualcosa va storto durante l’aggiornamento, avere un riferimento visivo di “come appariva prima” è prezioso.
Processo di aggiornamento passo dopo passo
Ci sono due percorsi legittimi per arrivare a PrestaShop 9: l’aggiornamento in-place tramite il modulo ufficiale, oppure un’installazione pulita con migrazione dei dati. Ognuno ha il suo ambito di applicazione.
Approccio 1: modulo Auto-Upgrade (aggiornamento 1-Click)
Il percorso di aggiornamento ufficiale utilizza il modulo autoupgrade (chiamato anche “1-Click Upgrade”). Questo modulo gestisce automaticamente la sostituzione dei file, la migrazione del database e la pulizia post-aggiornamento.
Preparazione
- Installa o aggiorna il modulo 1-Click Upgrade all’ultima versione dal PrestaShop Marketplace
- Vai su Back Office → Moduli → 1-Click Upgrade
- Il modulo mostrerà la tua versione attuale e gli obiettivi di aggiornamento disponibili
- Esegui la Checklist pre-aggiornamento — il modulo controllerà la compatibilità del tuo server e segnalerà potenziali problemi
Abilita la modalità di manutenzione
# Or do it from the back office: Shop Parameters ? General ? Maintenance ? Enable
# Make sure to whitelist your own IP address
Questo è essenziale. Non vuoi che i clienti effettuino ordini mentre il database è in fase di migrazione.
Esegui l’aggiornamento
- Nel modulo 1-Click Upgrade, seleziona la versione di destinazione (PrestaShop 9.x)
- Scegli “Major upgrade” come canale di aggiornamento
- Rivedi le opzioni di aggiornamento:
- Backup di file e database — abilitalo (cintura e bretelle, anche se hai già fatto il backup manualmente)
- Disattiva i moduli non nativi — abilitalo per prevenire conflitti tra moduli durante l’aggiornamento
- Rigenera i template email — abilitalo se non li hai personalizzati
- Clicca su “Aggiorna PrestaShop ora”
- NON chiudere la scheda del browser, NON navigare altrove — attendi il completamento del processo
L’aggiornamento può richiedere da 5 minuti (negozio piccolo) a oltre 30 minuti (catalogo ampio, molti moduli). Vedrai un log di avanzamento che mostra ogni passaggio.
Dopo il completamento dell’aggiornamento
# Clear all caches � this is not optional
rm -rf var/cache/*
# If using CLI (recommended):
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod
# Fix file permissions
chown -R www-data:www-data /var/www/html/var/
chown -R www-data:www-data /var/www/html/themes/
chmod -R 755 /var/www/html/var/
Riabilita i moduli uno alla volta
Se hai scelto di disattivare i moduli non nativi durante l’aggiornamento, non abilitarli tutti insieme. Abilitali uno alla volta:
- Abilita il modulo
- Controlla il front office e il back office per verificare la presenza di errori
- Se funziona, passa al modulo successivo
- Se causa problemi, disabilitalo e contatta il fornitore del modulo
Questo approccio metodico ti dice esattamente quale modulo ha causato un problema, invece di trovarti davanti a un negozio rotto con 30 moduli abilitati senza idea di quale sia il colpevole.
Approccio 2: installazione pulita + migrazione dei dati
A volte il percorso più pulito è ripartire da zero. Installa PrestaShop 9 da zero e migra i tuoi dati al suo interno. Questo approccio richiede più lavoro ma ti offre un’installazione immacolata senza alcun bagaglio legacy.
Quando scegliere l’installazione pulita
- Stai aggiornando da PS 1.6.x (l’aggiornamento in-place non è supportato per salti così grandi)
- Il tuo negozio attuale ha anni di override accumulati, hack e tabelle di moduli abbandonati
- Vuoi comunque cambiare tema
- Il tuo database è diventato gonfio con carrelli abbandonati, vecchi log e dati orfani
- Tentativi precedenti di aggiornamento sono falliti
Il processo
- Installa PrestaShop 9 da zero su una nuova directory o server
- Configura il tuo tema (Hummingbird o un tema compatibile con PS9)
- Installa i tuoi moduli (solo versioni compatibili con PS9)
- Migra i tuoi dati utilizzando:
- L’import CSV di PrestaShop per prodotti, categorie e clienti
- Migrazione diretta del database tramite script SQL personalizzati
- Strumenti di migrazione di terze parti
- Riconfigura gateway di pagamento, spedizioni, tasse ed email
- Testa tutto sulla nuova installazione
- Cambia il DNS o scambia la document root quando sei pronto
Migrazione dei dati tramite import CSV
Lo strumento di import integrato di PrestaShop (Back Office → Parametri avanzati → Importazione) gestisce:
- Categorie
- Prodotti (con combinazioni, immagini, caratteristiche e stock)
- Clienti
- Indirizzi
- Produttori e Fornitori
Esporta dal tuo vecchio negozio, ripulisci i file CSV e importa in quello nuovo. È un lavoro tedioso per cataloghi grandi, ma offre il risultato più pulito.
Migrazione dei dati tramite SQL
Per sviluppatori esperti, la migrazione diretta via SQL è più veloce per grandi volumi di dati:
# Export specific tables from old database
mysqldump -u root -p old_prestashop \
ps_product ps_product_lang ps_product_shop \
ps_category ps_category_lang ps_category_shop \
ps_customer ps_address \
ps_image ps_image_lang ps_image_shop \
ps_stock_available \
> ~/migration_data.sql
# You'll need to review and adjust the SQL for schema changes between versions
# Column names, table structures, and foreign keys may differ
La migrazione SQL richiede una conoscenza approfondita dello schema del database di PrestaShop. Se non sei a tuo agio nello scrivere e fare debug di SQL complesso, usa il metodo di import CSV o assumi uno sviluppatore. Una migrazione SQL mal eseguita può corrompere i tuoi dati in modi estremamente difficili da correggere.
Quale approccio è migliore?
| Fattore | Auto-Upgrade | Installazione pulita |
|---|---|---|
| Aggiornamento da PS 8.x | Consigliato | Opzionale |
| Aggiornamento da PS 1.7.x | Possibile (tramite 8.x prima) | Consigliato |
| Aggiornamento da PS 1.6.x | Non supportato | Obbligatorio |
| Negozio con 50+ moduli | Rischioso — molti potenziali conflitti | Più sicuro — aggiungi i moduli gradualmente |
| Negozio con forti personalizzazioni | Gli override potrebbero non funzionare | Ricostruisci le personalizzazioni correttamente |
| Negozio pulito e ben mantenuto | Veloce e diretto | Lavoro extra non necessario |
| Tempo per il completamento | Ore | Da giorni a settimane |
| Downtime richiesto | 30-60 minuti | Minimo (cambio DNS) |
| Storico ordini preservato | Automaticamente | Richiede migrazione manuale |
| URL SEO preservati | Automaticamente | Richiede mappatura dei redirect |
Per la maggior parte dei proprietari di negozi che utilizzano PS 8.x con un numero ragionevole di moduli ben mantenuti, l’auto-upgrade è la scelta giusta. L’installazione pulita ha senso quando si proviene da una versione molto vecchia o si vuole cogliere l’occasione per fare pulizia.
Compatibilità dei moduli: cosa si rompe in PrestaShop 9
Questa sezione è per sviluppatori e proprietari di negozi tecnicamente curiosi. Capire cosa è cambiato ti aiuta a valutare se i tuoi moduli sopravviveranno all’aggiornamento.
Template Smarty rimossi dall’admin
Questo è il più grande cambiamento che rompe la compatibilità. In PS 8.x, i controller admin legacy potevano ancora utilizzare template Smarty (file .tpl) per le pagine del back office. In PS 9, l’admin è completamente basato su Twig. I controller legacy sono incapsulati da un LegacyController di Symfony che renderizza il loro output attraverso Twig.
Cosa significa in pratica:
- I moduli con pagine admin personalizzate che usano
AdminController+ Smarty funzionano ancora, ma vengono renderizzati all’interno del nuovo layout Twig tramite un livello di compatibilità - Gli override dei template admin (file in
override/controllers/admin/templates/) potrebbero non funzionare come previsto - Le variabili Smarty assegnate in
initContent()possono andare perse perchéLegacyControllerincapsula il rendering in modo diverso — la variabile Smartycontentdeve essere riassegnata esplicitamente - Il metodo
display()diAdminControllernon viene più chiamato da PS 9 —LegacyControllerlo bypassa completamente
Cambiamenti al sistema di override
PrestaShop scoraggia gli override fin da PS 1.7, e PS 9 inasprisce ulteriormente le restrizioni:
- Gli override delle classi core funzionano ancora tecnicamente, ma sono sempre più fragili man mano che il codice core si sposta verso i servizi Symfony
- Gli override dei controller non sono affidabili — il livello di routing di Symfony potrebbe non caricarli come previsto
- Gli override dei template nelle directory
override/sono deprecati per le pagine admin - L’approccio consigliato ora è tramite hook, decorator Symfony e event subscriber
Se hai moduli che dipendono fortemente dagli override, sono quelli più a rischio di rompersi durante l’aggiornamento. Controlla la directory override/ nella cartella di ogni modulo.
Cambiamenti degli hook
PrestaShop 9 aggiunge nuovi hook e modifica alcuni di quelli esistenti:
- Diversi hook legacy nell’area admin sono stati rimossi o rinominati
- Nuovi hook sono disponibili per le pagine admin basate su Symfony
- Gli hook del front office rimangono in gran parte compatibili (Hummingbird utilizza gli stessi punti di hook di Classic)
- L’ordine di esecuzione degli hook potrebbe cambiare in alcuni casi — se il tuo modulo dipende dall’essere chiamato prima o dopo un altro hook, testalo
Deprecazioni dei controller legacy
Diversi pattern dei controller admin che funzionavano in PS 8.x si comportano diversamente in PS 9:
$this->l()(la funzione di traduzione) è stata rimossa dai controller admin — usa$this->module->l('string', 'ControllerClassName')al suo postoTools::displayPrice()è stata rimossa — usaContext::getContext()->getCurrentLocale()->formatPrice($amount, $currencyIsoCode)$this->meta_title,$this->fields_liste$this->bulk_actionsdel controller admin devono essere assegnati DOPO la chiamata aparent::__construct()perché il riferimento al modulo non è disponibile prima- La directory admin ora è
backoffice/per impostazione predefinita (nonadmin-devo una stringa casuale) — i percorsi admin hardcoded smetteranno di funzionare
Come verificare se i tuoi moduli sono pronti per PS9
Per ogni modulo installato:
- Controlla il sito del fornitore — cerca dichiarazioni esplicite di compatibilità con PS 9
- Verifica la presenza di override — guarda dentro
modules/tuomodulo/override/. Qualsiasi file lì è un segnale di attenzione. - Cerca chiamate a funzioni deprecate — cerca nei file PHP del modulo:
Tools::displayPrice($this->l(nei file dei controller admin- Classi
AdminControllercon metodidisplay()complessi - Percorsi della directory admin hardcoded
- Controlla il
config.xmldel modulo o il file PHP principale per l’impostazioneps_versions_compliancy— include la 9.x?
# Quick command to find potential PS9 issues in a module
# Run this from inside the module directory
# Check for overrides
find override/ -type f 2>/dev/null && echo "WARNING: Module uses overrides"
# Check for removed functions
grep -rn "Tools::displayPrice" *.php controllers/ classes/ 2>/dev/null
grep -rn '$this->l(' controllers/admin/ 2>/dev/null
# Check version compatibility declaration
grep -A2 "ps_versions_compliancy" *.php
Migrazione del tema: Hummingbird è ora il predefinito
PrestaShop 9 viene distribuito con Hummingbird come tema predefinito, sostituendo Classic. Se stai usando Classic o un tema basato su Classic, hai bisogno di un piano di migrazione.
Cosa è cambiato in Hummingbird
- Bootstrap 5.3 sostituisce Bootstrap 4 — i nomi delle classi, il sistema a griglia e le classi utility sono cambiati
- CSS Custom Properties sono usate estensivamente per la tematizzazione — colori, spaziature e tipografia sono configurati tramite variabili CSS anziché variabili SCSS
- Meno JavaScript — Hummingbird si affida maggiormente alle funzionalità native del browser e meno ai plugin jQuery
- Sistema di build moderno — compilazione degli asset basata su Webpack con tree shaking appropriato
- Design responsive-first — il layout mobile è la base, il desktop è il miglioramento (a differenza di Classic che era desktop-first)
Se stai usando il tema Classic
Il tema Classic non è incluso in PS 9. Le tue opzioni sono:
- Passa a Hummingbird — il percorso più semplice. Crea un child theme per le tue personalizzazioni.
- Acquista un tema compatibile con PS9 — molti fornitori di temi hanno rilasciato versioni per PS9.
- Porta le tue personalizzazioni di Classic su un child theme di Hummingbird — richiede lavoro di sviluppo frontend ma offre il miglior risultato a lungo termine.
Creare un child theme di Hummingbird
Un child theme ti permette di personalizzare Hummingbird senza modificare i file core del tema (così le tue modifiche sopravvivono agli aggiornamenti del tema):
# Create child theme directory structure
mkdir -p themes/my-child-theme/assets/css
mkdir -p themes/my-child-theme/templates
Crea themes/my-child-theme/config/theme.yml:
parent: hummingbird
name: my-child-theme
display_name: My Custom Theme
version: 1.0.0
author:
name: Your Name
Aggiungi i tuoi stili personalizzati in themes/my-child-theme/assets/css/custom.css. Hummingbird carica automaticamente custom.css dai child theme con la priorità più bassa (caricato per ultimo), quindi i tuoi stili sovrascriveranno il tema genitore.
Per sovrascrivere un template specifico, copialo da themes/hummingbird/templates/ allo stesso percorso relativo nel tuo child theme. Copia solo i file che devi modificare — tutto il resto viene ereditato automaticamente dal tema genitore.
Se stai usando un tema acquistato
Contatta il fornitore del tuo tema e fai queste domande specifiche:
- È disponibile una versione compatibile con PS9?
- È basata su Hummingbird o è un tema standalone?
- La mia licenza attuale copre la versione PS9?
- Qual è il percorso di migrazione dalla versione attuale?
Se il fornitore non ha una versione PS9 e non può darti una tempistica, inizia a pianificare il passaggio a Hummingbird ora.
Checklist post-aggiornamento
Hai completato l’aggiornamento e il back office si carica. Non festeggiare ancora. Verifica sistematicamente ogni funzione critica del tuo negozio.
Test del front office
| Test | Cosa controllare | Stato |
|---|---|---|
| Homepage | Si carica correttamente, tutti i blocchi visibili, nessuna immagine rotta | ☐ |
| Pagine di categoria | I prodotti vengono visualizzati, i filtri funzionano, la paginazione funziona | ☐ |
| Pagine prodotto | Immagini, descrizioni, combinazioni, aggiungi al carrello | ☐ |
| Ricerca | Restituisce risultati pertinenti, nessun errore | ☐ |
| Carrello | Aggiungi, rimuovi, aggiorna quantità, applica buoni sconto | ☐ |
| Registrazione cliente | La creazione di un nuovo account funziona, email di conferma inviata | ☐ |
| Login cliente | I clienti esistenti possono accedere con le password attuali | ☐ |
| Checkout — indirizzi | Il modulo indirizzi si carica, gli indirizzi esistenti sono selezionabili | ☐ |
| Checkout — spedizione | Tutti i corrieri vengono visualizzati, i prezzi sono corretti | ☐ |
| Checkout — pagamento | Tutti i metodi di pagamento appaiono e vengono elaborati correttamente | ☐ |
| Conferma ordine | Ordine creato, pagina di conferma visualizzata, email inviata | ☐ |
| Modulo di contatto | Il modulo viene inviato, messaggio ricevuto | ☐ |
| Pagine CMS | Termini, chi siamo, privacy policy — tutto si visualizza correttamente | ☐ |
| Responsive mobile | Ripeti i test critici su un telefono o un emulatore mobile | ☐ |
Test del back office
| Test | Cosa controllare | Stato |
|---|---|---|
| Dashboard | Si carica senza errori, le statistiche vengono visualizzate | ☐ |
| Ordini | Gli ordini esistenti sono visibili, è possibile visualizzare i dettagli, cambiare lo stato | ☐ |
| Prodotti | È possibile modificare i prodotti, caricare immagini, gestire le combinazioni | ☐ |
| Clienti | La lista clienti si carica, è possibile visualizzare i profili | ☐ |
| Moduli | Tutti i moduli critici sono attivi e configurati | ☐ |
| Invia un’email di test da Parametri avanzati → Email | ☐ |
Verifica del gateway di pagamento
Questa sezione merita un capitolo a parte perché impatta direttamente sui ricavi. Per OGNI metodo di pagamento:
- Effettua un vero ordine di test (o usa la modalità sandbox se disponibile)
- Verifica che il pagamento sia registrato nella dashboard del provider di pagamento
- Verifica che lo stato dell’ordine si aggiorni correttamente in PrestaShop
- Testa i rimborsi se il tuo flusso di lavoro lo richiede
- Controlla gli URL webhook/IPN — l’aggiornamento potrebbe aver modificato le strutture degli URL
Verifica delle spedizioni
- Verifica che tutti i corrieri mostrino tariffe corrette per le diverse zone
- Testa le soglie di spedizione gratuita
- Se utilizzi il calcolo delle tariffe in tempo reale (basato su API), verifica che la connessione funzioni ancora
- Controlla che l’inserimento del numero di tracking e le email di notifica funzionino
Cron Job
Controlla ogni attività automatizzata che viene eseguita a intervalli programmati:
- Email di abbandono carrello
- Sincronizzazione dello stock
- Generazione dei feed (Google Shopping, Facebook, ecc.)
- Generazione della sitemap
- Aggiornamento dei tassi di cambio
- Eventuali script cron personalizzati
Gli URL dei cron cambiano spesso tra le versioni principali. Aggiorna le voci del tuo crontab:
# Check your current cron jobs
crontab -l
# PS 9 cron URLs may have changed � verify each one loads correctly
curl -s -o /dev/null -w "%{http_code}" "https://yourshop.com/modules/yourmodule/cron.php?token=XXXXX"
Verifica SEO
- Controlla che i friendly URL funzionino ancora (pagine di categoria, pagine prodotto)
- Verifica che la sitemap venga generata correttamente
- Controlla che il robots.txt sia corretto
- Testa le pagine di destinazione chiave che si posizionano bene — assicurati che esistano ancora agli stessi URL
- Se gli URL sono cambiati, imposta immediatamente i redirect 301
Problemi comuni durante l’aggiornamento e soluzioni
Schermata bianca della morte
Il problema più comune dopo l’aggiornamento. Vedi una pagina bianca vuota senza alcun messaggio di errore.
Soluzione:
- Abilita la modalità debug modificando
config/defines.inc.php:define('_PS_MODE_DEV_', true); - Ricarica la pagina — ora dovresti vedere l’errore PHP effettivo
- Se vedi ancora la schermata bianca, controlla i log degli errori PHP:
# Apache tail -50 /var/log/apache2/error.log # Nginx + PHP-FPM tail -50 /var/log/php-fpm/error.log # PrestaShop's own log tail -50 /var/www/html/var/logs/prod.log - Cause comuni:
- Memoria PHP esaurita — aumenta
memory_limitin php.ini a 512M - Estensione PHP mancante — installa l’estensione richiesta e riavvia PHP
- Problema di permessi file — esegui
chown -R www-data:www-data /var/www/html/var/
- Memoria PHP esaurita — aumenta
Errore 500 Internal Server Error
Solitamente causato da problemi con il file .htaccess o problemi di configurazione PHP dopo l’aggiornamento.
Soluzione:
# Check if .htaccess is the problem � temporarily rename it
mv /var/www/html/.htaccess /var/www/html/.htaccess.bak
# If the site loads without .htaccess, regenerate it from back office:
# Shop Parameters ? Traffic & SEO ? Generate .htaccess file
# Or manually restore the default PS 9 .htaccess
Controlla anche:
- Che Apache mod_rewrite sia abilitato:
a2enmod rewrite && systemctl restart apache2 - Che il tuo virtual host Apache consenta gli override di .htaccess:
AllowOverride All - Che la versione PHP sia effettivamente 8.2+ per il processo web (non solo per la CLI)
Conflitti tra moduli dopo l’aggiornamento
Sintomi: il back office si carica parzialmente, errori in sezioni specifiche, errori JavaScript nella console.
Soluzione — il metodo di isolamento:
- Disabilita TUTTI i moduli non nativi:
# Via database if back office is broken mysql -u root -p prestashop -e "UPDATE ps_module SET active = 0 WHERE name NOT IN ('ps_banner','ps_contactinfo','ps_emailsubscription','ps_featuredproducts','ps_imageslider','ps_linklist','ps_mainmenu','ps_searchbar','ps_sharebuttons','ps_socialfollow','ps_wirepayment','ps_checkpayment');" - Svuota la cache:
rm -rf var/cache/* - Verifica che il negozio funzioni con i soli moduli nativi
- Abilita i moduli uno alla volta, svuotando la cache tra uno e l’altro
- Quando trovi il modulo problematico, aggiornalo, sostituiscilo o contatta il fornitore
Traduzioni mancanti o non funzionanti
Dopo l’aggiornamento, alcune stringhe di traduzione potrebbero mancare o essere visualizzate come chiavi grezze (come Modules.YourModule.SomeString).
Soluzione:
- Vai su Internazionale → Traduzioni ed esporta/importa il tuo language pack
- Per le traduzioni dei moduli, resetta le traduzioni del modulo: disinstalla e reinstalla il modulo (nota: questo potrebbe resettare la configurazione — esegui un backup prima)
- PrestaShop 9 utilizza il sistema di traduzione di Symfony in modo più intensivo — i file di traduzione in vecchio formato (in
modules/tuomodulo/translations/) potrebbero dover essere convertiti
Problemi di cache
La cache obsoleta è alla base di un numero sorprendente di problemi post-aggiornamento. In caso di dubbio, svuota tutto:
# Nuclear cache clear
rm -rf var/cache/*
# Symfony cache rebuild
php bin/console cache:clear --env=prod --no-warmup
php bin/console cache:warmup --env=prod --no-optional-warmers
# Fix ownership after cache rebuild
chown -R www-data:www-data var/
# Also clear your browser cache � old cached JS/CSS can cause phantom issues
Immagini non visualizzate
I percorsi delle immagini o il sistema di recupero delle immagini potrebbero cambiare tra le versioni.
Soluzione:
- Rigenera le miniature: Design → Impostazioni immagini → Rigenera miniature
- Controlla che i permessi della directory
img/siano corretti - Se utilizzi una CDN, svuota la cache della CDN
- Verifica che il nuovo formato degli URL delle immagini corrisponda a ciò che il tuo tema si aspetta
Login admin non funzionante
Gli algoritmi di hashing delle password sono cambiati in PS 9 (MigratingPasswordHasher di Symfony con bcrypt/argon2). Nella maggior parte dei casi, le password esistenti funzioneranno perché l’hasher migra automaticamente al primo accesso. Ma se sei bloccato fuori:
# Reset admin password � PS 9 requires Symfony's password hasher
# Do NOT use raw MD5 or direct SQL UPDATE on the password field
# Instead, use PrestaShop's CLI (if available):
php bin/console prestashop:user:change-password --email=admin@yourshop.com
# Or create a temporary PHP script to reset the password properly
# (delete this file immediately after use!)
Non lasciare mai script di reset password sul tuo server. Creali, usali, cancellali — tutto in una sola sessione. Uno script di reset dimenticato è una vulnerabilità di sicurezza.
Quando assumere uno sviluppatore vs. fare da soli
Sii onesto sulle tue competenze tecniche. Un aggiornamento fallito può costarti giorni di fatturato e fiducia dei clienti. Ecco una guida realistica:
Probabilmente puoi fare da solo se:
- Stai aggiornando da PS 8.2 a 9.x (un solo salto di versione)
- Hai meno di 10 moduli di terze parti, tutti confermati compatibili con PS9
- Stai usando un tema standard (Classic → Hummingbird, o un tema acquistato con supporto PS9)
- Ti trovi a tuo agio con SSH, la riga di comando e le operazioni sul database
- Hai un ambiente di staging funzionante su cui testare prima
- Il tuo negozio non ha override personalizzati o modifiche al core
Dovresti assumere uno sviluppatore se:
- Stai aggiornando da PS 1.6.x o versioni iniziali della 1.7.x (grande divario di versione)
- Hai 20+ moduli, specialmente se alcuni usano override
- Hai un tema personalizzato che deve essere portato su Hummingbird
- Il tuo negozio ha modifiche personalizzate al core o file di override
- Non ti trovi a tuo agio con la riga di comando o le operazioni sul database
- Il tuo negozio genera ricavi giornalieri significativi e il downtime è costoso
- Hai tentato l’aggiornamento sullo staging e hai incontrato problemi che non riesci a risolvere
Cosa cercare in uno sviluppatore
- Esperienza specifica con PrestaShop — non semplicemente “sviluppatore PHP” o “sviluppatore e-commerce”. L’architettura di PrestaShop è unica, e gli sviluppatori generici spenderanno ore fatturabili per imparare cose che uno specialista PS già conosce.
- Esperienza specifica con PS 9 — chiedi se hanno già completato aggiornamenti a PS 9. La migrazione a Symfony 6.4 ha insidie specifiche.
- Un piano di progetto chiaro — dovrebbero proporre: audit → aggiornamento su staging → test → aggiornamento in produzione → monitoraggio.
- Supporto post-aggiornamento — i problemi spesso emergono 1-2 settimane dopo l’aggiornamento quando vengono attivati casi limite. Assicurati che il supporto sia incluso.
Fasce di prezzo tipiche
Queste sono stime approssimative basate sulle tariffe di mercato nel 2025-2026:
- Aggiornamento semplice (PS 8.x → 9.x, pochi moduli, tema standard): 500-1500 EUR
- Aggiornamento medio (PS 1.7.x → 9.x, porting del tema personalizzato, moduli moderati): 2000-5000 EUR
- Aggiornamento complesso (PS 1.6.x → 9.x, ricostruzione completa, molti moduli personalizzati): 5000-15000+ EUR
Questi prezzi riflettono la realtà che un aggiornamento di versione principale non è un’operazione con un solo clic. Se qualcuno ti fa un preventivo di 200 EUR per un aggiornamento da PS 1.6 a PS 9, o non comprende la portata del lavoro oppure taglierà angoli che ti costeranno di più in seguito.
Piano di rollback: se le cose vanno male
Hai fatto i backup (li hai fatti, vero?). Ecco come usarli se l’aggiornamento fallisce in modo catastrofico.
Rollback dall’Auto-Upgrade
Se hai usato il modulo 1-Click Upgrade e ha creato il proprio backup:
- Vai su Back Office → Moduli → 1-Click Upgrade
- Clicca su “Rollback” e seleziona il backup pre-aggiornamento
- Il modulo ripristinerà sia i file che il database
Se il back office è completamente inaccessibile, dovrai ripristinare manualmente:
Rollback manuale — Database
# Drop the current (broken) database and recreate it
mysql -u root -p -e "DROP DATABASE prestashop; CREATE DATABASE prestashop;"
# Import your backup
mysql -u root -p prestashop < ~/backup_pre_ps9_XXXXXXXX_XXXXXX.sql
# For Docker:
docker exec -i my-shop-db mysql -u root -p'PASSWORD' -e "DROP DATABASE prestashop; CREATE DATABASE prestashop;"
docker exec -i my-shop-db mysql -u root -p'PASSWORD' prestashop < ~/backup_pre_ps9_XXXXXXXX_XXXXXX.sql
Rollback manuale — File
# Remove the upgraded files
rm -rf /var/www/html/*
# Restore from your backup
tar -xzf ~/prestashop_files_pre_ps9_XXXXXXXX_XXXXXX.tar.gz -C /
# Fix permissions
chown -R www-data:www-data /var/www/html/
# Clear cache
rm -rf /var/www/html/var/cache/*
Verifica che il rollback abbia funzionato
- Accedi al front office — il tuo negozio si carica?
- Accedi al back office — riesci a fare il login?
- Controlla alcuni ordini — i dati sono intatti?
- Effettua un ordine di test — il checkout funziona?
- Disabilita la modalità di manutenzione una volta confermato che tutto funziona
Dopo un rollback, NON tentare immediatamente di eseguire l’aggiornamento di nuovo. Analizza prima cosa è andato storto. Controlla i log dell’aggiornamento, identifica il passaggio che ha fallito, cerca l’errore specifico e correggi la causa principale nel tuo ambiente di staging prima di toccare nuovamente la produzione.
L’emergenza “senza backup”
Se non hai fatto i backup (succede — non facciamo finta che non sia così), le tue opzioni sono limitate ma non inesistenti:
- Backup del provider di hosting: Molti host conservano backup giornalieri per 7-30 giorni. Controlla il pannello del tuo hosting o contatta immediatamente il supporto.
- Binary log del database: Se il binary logging di MySQL è abilitato, il recovery point-in-time potrebbe essere possibile. Questo richiede competenze specifiche.
- Il backup del modulo autoupgrade: Se hai selezionato “crea backup” durante l’aggiornamento, cerca in
/admin/autoupgrade/backup/i file di backup del modulo. - Accetta e vai avanti: Se il recupero non è possibile, concentrati sulla riparazione del negozio aggiornato anziché cercare di tornare indietro. A volte andare avanti è l’unica via.
Riepilogo: il percorso di aggiornamento in sintesi
- Audit — controlla i requisiti del server, la compatibilità dei moduli, la compatibilità del tema
- Backup — database (mysqldump), file (tar), note sulla configurazione
- Staging — testa l’intero aggiornamento su un ambiente di staging prima
- Pianificazione — scegli una finestra a basso traffico con tempo di margine per eventuali problemi
- Aggiornamento — modalità di manutenzione attiva, esegui l’aggiornamento, svuota le cache
- Test — front office, back office, checkout, pagamenti, spedizioni, email
- Monitoraggio — controlla i log degli errori per 48 ore dopo la messa in produzione
- Pulizia — disabilita la modalità debug, rimuovi i file temporanei, aggiorna la documentazione
PrestaShop 9 è un miglioramento significativo rispetto ai suoi predecessori. La base Symfony 6.4, il requisito PHP 8.2+ e l’admin basato su Twig creano una piattaforma più stabile, veloce e manutenibile. L’aggiornamento richiede una pianificazione attenta, ma il risultato vale lo sforzo — un motore di e-commerce moderno che ti servirà bene per gli anni a venire.
Prenditi il tuo tempo, testa accuratamente e non saltare i backup. Il tuo futuro te stesso ti ringrazierà.
More guides available
Browse our knowledge base for more practical PrestaShop tutorials, or reach out if you need help.