Blog

Bezplatný nástroj na kontrolu kompatibility modulov PrestaShop 9

Tím PrestaShopAddons Čas čítania: 6 minút

Predtým, ako aktualizujete obchod na verziu PrestaShop 9, budete chcieť vedieť, ktoré moduly prestanú fungovať. Inštalácia každého z nich na testovacej kópii a prechádzanie jeho funkcií síce funguje, je to však zdĺhavé a odhalí to len tie problémy, na ktoré náhodou narazíte.

Preto sme napísali malý skript, ktorý za vás vykoná prvé spracovanie. ps9check prehľadáva modul a vypisuje kód, ktorý bol odstránený v verziách PrestaShop 8 alebo 9: základné triedy a metódy, hooks, presunuté triedy prezentérov, funkcie PHP odstránené v PHP 8 a niekoľko úskalí súvisiacich s validáciou šablón a doplnkov. Je to bezplatný projekt s otvoreným zdrojovým kódom: github.com/asymetria/ps9-compat-check.

Rýchly začiatok

Na vašom počítači alebo serveri potrebujete PHP 7.4 alebo novšiu verziu. PrestaShop a Composer nie sú potrebné.

  1. Stiahnite si skript: ps9-compat-check (ZIP), a rozbaľte ho.
  2. Spustite ho na priečinku s modulom alebo na súbore ZIP s modulom:
php ps9check.php /path/to/modules/yourmodule
php ps9check.php yourmodule.zip

V obchode sa moduly nachádzajú v modules/ zložka. Ak ich chcete v systéme Linux alebo macOS označiť všetky naraz:

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

Ako vyzerá správa

Toto je výsledok pre verziu 2.0.4 programu ps_skontroluj_platbu, jeden z vlastných platobných modulov PrestaShop, napísaný v PrestaShop za 1.7 dňa:

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 tento modul opravilo už dávno a súčasná verzia funguje bez chýb. Ten istý kód však stále beží v mnohých obchodoch spolu s modulmi tretích strán, ktorých autori ich nikdy neaktualizovali.

Každý nález odkazuje na súbor a riadok. V prípade najčastejších problémov správa zároveň navrhuje náhradu, takže hneď vidíte, či ide o opravu v jednom riadku, alebo o náročnejšiu úlohu.

Čo sa kontroluje

  • Odstránené základné triedy, či už sa používa s new, extends, use alebo statické volania. Ak sa zmenila len trieda, napríklad prezentátory košíka a produktu, v správe sa zobrazí nový menný priestor.
  • Odstránené základné metódy, napríklad Tools::displayPrice(), Tools::encrypt() alebo Configuration::getInt(), vrátane metód, ktoré modul zdedí: $this->addMedia() v prednom regulátore alebo $this->ajaxDie().
  • Odstránené konštanty a hooks, a to v oboch registerHook() a v hookXxx() metódy, ktoré sa už nikdy nezavolajú.
  • Uvedený rozsah kompatibility. Ak ps_versions_compliancy ak je výsledná hodnota nižšia ako 9.0, PrestaShop 9 modul vôbec nenainštaluje.
  • Zmeny v PHP 8. PrestaShop 9 vyžaduje PHP 8.1 alebo novšiu verziu, takže funkcie ako create_function() alebo each() sú tiež uvádzané.
  • Prepisovanie metód jadra, ktoré už neexistujú, ktoré bez varovania prestanú fungovať.
  • Úskalia Hummingbird a doplnkov: moduly, ktoré odovzdávajú vlastný kód HTML do modálneho okna košíka šablóny, šablónové súbory závislé od šablóny a nofilter výstup.

Odkiaľ pochádza zoznam odstráneného kódu

Zoznam sme nenapísali ručne. Druhý skript v repozitári načíta Zdrojový kód PrestaShop pre verzie 1.7.8, 8.2 a 9.0 porovnáva ich triedy, metódy, konštanty a hooks a zaznamenáva, čo zmizlo a v ktorej verzii. Aktuálne údaje zahŕňajú 444 odstránených tried, približne 1 800 odstránených metód, 23 konštánt a 16 hooks. Ktokoľvek si ho môže znovu zostaviť z oficiálnych verzií.

Výsledky sme porovnali so skutočným kódom. Na vlastnú päsť Block Sliding Cart Modul – predtým, ako sme ho aktualizovali na verziu PrestaShop 9, hlásil presne tie problémy, na ktoré v tom čase upozornila validácia doplnkov. V aktuálnej verzii, ktorá touto validáciou prešla, nehlási žiadne chyby. Aktuálne verzie vlastných modulov PrestaShop tiež prechádzajú bez chýb.

Jeho využitie v CI

Skript vráti výstupný kód 1, ak zistí chyby, čím môže zastaviť kompiláciu. V prípade modulu uloženého na GitHub-e stačia dva kroky v pracovnom postupe:

- 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 .

Použitie --format=json pre vaše vlastné nástroje, alebo --format=md ako tabuľku, ktorú môžete vložiť do úlohy alebo hlásenia.

Čo nedokáže

Ide o statickú analýzu, takže vykazuje kód, ktorý bol odstránený pomocou PrestaShop. Nedokáže určiť typ premennej, takže volanie typu $product->something() sa hlási iba vtedy, ak názov danej metódy už nikde v jadre neexistuje. Nezachytáva tiež zmeny v správaní ani chyby, ktoré sa objavujú iba počas behu programu.

Považujte to za prvý pokus. Potom nainštalujte modul na verziu PrestaShop 9 s zapnutým režimom ladenia, otvorte jeho konfiguračnú stránku a prejdite cez front office v rámci témy Hummingbird. Opísali sme, aké výsledky to prinieslo pre náš vlastný modul v Modernizácia modulu PrestaShop na verziu PrestaShop 9: Čo sa pokazilo a ako sme to opravili.

Kontrola modulov je krok 5 z 12. Celý plán, od zálohy až po spustenie, nájdete v našom checkliste aktualizácie PrestaShop 1.7 na 9.

Najčastejšie kladené otázky

Je táto kontrola zadarmo?

Áno. Ide o open source pod licenciou MIT a môžete ho používať vo svojom vlastnom obchode, v obchodoch klientov alebo vo svojich vlastných nástrojoch.

Zmení to môj modul alebo sa niečo nahraje?

Nie. Program iba načíta súbory a vytlačí správu. Nič sa nemení a z vášho počítača sa nič neodosiela.

Môžem to spustiť v aktívnom obchode?

Áno, číta iba súbory. Najbezpečnejším spôsobom je však stiahnuť si modules/ zložku alebo súbory ZIP s modulmi a spustite kontrolu na svojom počítači.

Správa je prázdna. Je môj modul pripravený na verziu PrestaShop 9?

To znamená, že sa nenašlo žiadne zo známych odstránení, čo je dobré znamenie. V každom prípade to vyskúšaj na 9 kópiách PrestaShop: kontrolný program nedokáže rozpoznať zmenené správanie ani problémy s rozložením špecifické pre danú tému.

Na ktoré verzie PrestaShop sa to vzťahuje?

Obsahuje prehľad toho, čo bolo odstránené medzi verziami 1.7.8 a 9.0, takže je užitočný ako pre moduly verzie 1.7, ktoré sa aktualizujú na verziu 8 alebo 9, tak aj pre moduly verzie 8.x, ktoré sa aktualizujú na verziu 9.

Ak je správa rozsiahla

Niektoré opravy sa zmestia do jedného riadku. Iné si vyžadujú prepísanie spôsobu, akým modul načíta svoje triedy alebo vykreslí svoje šablóny. Ak by ste to radšej zverili niekomu inému, práve tým sa zaoberáme: Opravy modulu PrestaShop. Pošlite nám správu a my vám odpovieme s otázkami alebo cenovou ponukou.