Blog
Bezplatný nástroj na kontrolu kompatibility modulov PrestaShop 9
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é.
- Stiahnite si skript: ps9-compat-check (ZIP), a rozbaľte ho.
- 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,usealebo 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()aleboConfiguration::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 vhookXxx()metódy, ktoré sa už nikdy nezavolajú. - Uvedený rozsah kompatibility. Ak
ps_versions_compliancyak 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()aleboeach()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
nofiltervý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.
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.
