Blog

Verifica gratuita della compatibilità dei moduli PrestaShop 9

Il team di PrestaShopAddons 6 minuti di lettura

Prima di aggiornare un negozio alla versione PrestaShop 9, è bene sapere quali moduli smetteranno di funzionare. Installarli uno per uno su una copia di prova e provarli tutti funziona, ma è un processo lento e mostra solo i problemi che capita di far emergere.

Abbiamo quindi scritto un piccolo script che esegue il primo passaggio al posto tuo. ps9check analizza un modulo ed elenca il codice rimosso da PrestaShop 8 o 9: classi e metodi principali, hooks, classi presenter spostate, funzioni PHP rimosse in PHP 8 e alcune insidie relative alla convalida di temi e componenti aggiuntivi. È gratuito e open source: github.com/asymetria/ps9-compat-check.

Guida rapida

Sul tuo computer o server è necessario PHP 7.4 o una versione più recente. PrestaShop e Composer non sono necessari.

  1. Scarica lo script: ps9-compat-check (ZIP), e decomprimerlo.
  2. Eseguilo su una cartella del modulo o su un file ZIP del modulo:
php ps9check.php /path/to/modules/yourmodule
php ps9check.php yourmodule.zip

In un negozio, i moduli risiedono nel modules/ cartella. Per selezionarli tutti contemporaneamente su Linux o macOS:

for m in /var/www/shop/modules/*/; do php ps9check.php "$m"; done

Come si presenta un rapporto

Questo è il risultato per la versione 2.0.4 di ps_verifica_pagamento, uno dei moduli di pagamento sviluppati da PrestaShop, scritto in PrestaShop in 1.7 giorni:

PrestaShop 9 compatibility check — ps_checkpayment 2.0.4
21 files scanned

ERROR    ps_checkpayment.php:176
         Tools::displayPrice() was removed in PrestaShop 9.0.
         → Use $this->context->getCurrentLocale()->formatPrice($price, $this->context->currency->iso_code).

ERROR    ps_checkpayment.php:270
         Tools::displayPrice() was removed in PrestaShop 9.0.

NOTICE   views/templates/front/payment_infos.tpl:34
         Unfiltered output ({... nofilter}). The PrestaShop Addons review reports it as a security issue.

2 error(s), 0 warning(s), 1 notice(s)

PrestaShop ha risolto il problema di questo modulo già da tempo e la versione attuale funziona senza errori. Tuttavia, lo stesso codice è ancora in uso in moltissimi negozi, insieme a moduli di terze parti i cui autori non li hanno mai aggiornati.

Ogni risultato indica un file e una riga. Per i problemi più comuni, il report suggerisce anche la correzione, così puoi capire subito se si tratta di una modifica di una sola riga o di un intervento più complesso.

Cosa verifica

  • Classi principali rimosse, sia che venga utilizzato con new, extends, use o chiamate statiche. Quando una classe è stata semplicemente spostata, ad esempio i presenter del carrello e dei prodotti, il report mostra il nuovo namespace.
  • Metodi principali rimossi, come ad esempio Tools::displayPrice(), Tools::encrypt() oppure Configuration::getInt(), compresi i metodi ereditati da un modulo: $this->addMedia() in un controller front-end oppure $this->ajaxDie().
  • Rimosse le costanti e hooks, entrambi in registerHook() e in hookXxx() metodi che non verranno mai più richiamati.
  • L'intervallo di compatibilità dichiarato. Se ps_versions_compliancy se il valore finale è inferiore a 9.0, PrestaShop 9 non installerà affatto il modulo.
  • Modifiche apportate in PHP 8. PrestaShop 9 richiede PHP 8.1 o versioni successive, quindi funzioni come create_function() oppure each() vengono segnalati anche questi.
  • Sovrascritture di metodi del nucleo che non esistono più, che smettono di funzionare senza preavviso.
  • Insidie di Hummingbird e dei componenti aggiuntivi: moduli che trasmettono il proprio codice HTML alla finestra modale del carrello del tema, file di inclusione dei modelli specifici del tema e nofilter output.

Da dove proviene l'elenco del codice rimosso

Non abbiamo scritto l'elenco a mano. Uno script secondario presente nel repository legge il Codice sorgente PrestaShop per le versioni 1.7.8, 8.2 e 9.0, mette a confronto le loro classi, i metodi, le costanti e gli elementi hooks, e registra cosa è stato rimosso e in quale versione. I dati attuali riguardano 444 classi rimosse, circa 1.800 metodi rimossi, 23 costanti e 16 hooks. Chiunque può ricrearlo a partire dalle versioni ufficiali.

Abbiamo verificato i risultati confrontandoli con il codice reale. Da soli Block Sliding Cart Il modulo, prima che lo portassimo alla versione PrestaShop 9, segnalava esattamente gli stessi problemi individuati all’epoca dalla validazione degli add-on. Nella versione attuale, che ha superato tale validazione, non segnala nulla. Anche le versioni attuali dei moduli di PrestaShop non presentano errori.

Utilizzo nella CI

Lo script restituisce il codice di uscita 1 quando rileva degli errori, quindi può interrompere una compilazione. Per un modulo ospitato su GitHub, bastano due passaggi nel flusso di lavoro:

- run: curl -sL https://github.com/asymetria/ps9-compat-check/archive/refs/heads/master.tar.gz | tar xz
- run: php ps9-compat-check-master/ps9check.php .

Utilizzo --format=json per la vostra attrezzatura, oppure --format=md per una tabella che puoi incollare in un ticket o in un rapporto.

Cosa non può fare

Si tratta di un'analisi statica, quindi segnala il codice rimosso da PrestaShop. Non è in grado di determinare il tipo di una variabile, quindi una chiamata come $product->something() viene segnalato solo quando il nome di quel metodo non esiste più in nessuna parte del codice di base. Inoltre, non rileva i cambiamenti di comportamento né gli errori che si verificano solo in fase di esecuzione.

Consideralo come una prima bozza. Dopodiché, installa il modulo su una copia PrestaShop 9 con la modalità debug attivata, apri la pagina di configurazione e seleziona l’opzione front office nel tema Hummingbird. Abbiamo descritto i risultati ottenuti con il nostro modulo in Aggiornamento di un modulo PrestaShop alla versione PrestaShop 9: cosa non ha funzionato e come l'abbiamo risolto.

La scansione dei moduli è il passo 5 di 12. Per il piano completo, dal backup alla messa online, consulta la nostra checklist per l’aggiornamento da PrestaShop 1.7 a 9.

Domande frequenti

Il programma di verifica è gratuito?

Sì. È open source con licenza MIT e puoi utilizzarlo nel tuo negozio, nei negozi dei tuoi clienti o all’interno dei tuoi strumenti.

Questo modifica il mio modulo o carica qualcosa?

No. Si limita a leggere i file e a generare un report. Nulla viene modificato e nulla esce dal tuo computer.

Posso utilizzarlo su un negozio online già attivo?

Sì, legge solo i file. Tuttavia, il modo più sicuro è scaricare il modules/ cartella o i file ZIP dei moduli, quindi eseguire il controllo sul proprio computer.

Il report è vuoto. Il mio modulo è pronto per PrestaShop 9?

Significa che non è stata rilevata nessuna delle rimozioni note, il che è un buon segno. Provalo comunque su una copia PrestaShop 9: lo strumento di verifica non è in grado di rilevare cambiamenti nel comportamento o problemi di layout specifici del tema.

Quali versioni di PrestaShop sono incluse?

Il documento elenca le funzionalità rimosse tra la versione 1.7.8 e la 9.0, quindi è utile sia per i moduli della versione 1.7 che passano alla 8 o alla 9, sia per i moduli della versione 8.x che passano alla 9.

Se il rapporto è lungo

Alcune correzioni consistono in una sola riga. Altre richiedono invece di riscrivere il modo in cui un modulo carica le proprie classi o esegue il rendering dei propri modelli. Se preferisci che se ne occupi qualcun altro, è proprio questo il lavoro che facciamo: Correzioni al modulo PrestaShop. Inviateci il rapporto e vi risponderemo con eventuali domande o un preventivo.