Blog
Bezplatný nástroj pro kontrolu kompatibility modulů PrestaShop 9
Než provedete aktualizaci obchodu na verzi PrestaShop 9, měli byste vědět, které moduly přestanou fungovat. Instalace každého z nich do testovací kopie a jeho prozkoumání sice funguje, je to však zdlouhavé a odhalí to pouze ty problémy, na které náhodou narazíte.
Tak jsme napsali malý skript, který za vás provede první průchod. ps9check prohledá modul a vygeneruje seznam kódu, který byl odstraněn v verzích PrestaShop 8 nebo 9: základní třídy a metody, hooks, přesunuté třídy prezentérů, funkce PHP odstraněné v PHP 8 a několik úskalí souvisejících s validací šablon a doplňků. Je to bezplatný nástroj s otevřeným zdrojovým kódem: github.com/asymetria/ps9-compat-check.
Rychlý start
Na svém počítači nebo serveru potřebujete PHP 7.4 nebo novější. PrestaShop a Composer nejsou nutné.
- Stáhněte si skript: ps9-compat-check (ZIP), a rozbalte jej.
- Spusťte jej na složce modulu nebo na ZIP souboru s modulem:
php ps9check.php /path/to/modules/yourmodule
php ps9check.php yourmodule.zip
V obchodě jsou moduly umístěny v modules/ složka. Chcete-li je všechny najednou zaškrtnout v systému Linux nebo macOS:
for m in /var/www/shop/modules/*/; do php ps9check.php "$m"; done
Jak vypadá zpráva
Toto je výsledek pro verzi 2.0.4 programu ps_zkontrolovat_platbu, jeden z vlastních platebních modulů PrestaShop, napsaný v jazyce PrestaShop za 1.7 dne:
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 aktuální verze funguje bez chyb. Stejný kód však stále běží v mnoha obchodech, a to společně s moduly třetích stran, jejichž autoři je nikdy neaktualizovali.
Každý nález odkazuje na konkrétní soubor a řádek. U nejčastějších problémů zpráva navíc navrhuje i náhradní řešení, takže hned vidíte, zda se jedná o opravu na jeden řádek, nebo o rozsáhlejší zásah.
Co se kontroluje
- Odstraněné základní třídy, ať už se používá s
new,extends,usenebo statické volání. Pokud došlo pouze k přesunu třídy – například u prezentátorů košíku a produktu –, zpráva uvádí nový jmenný prostor. - Odstraněné základní metody, jako například
Tools::displayPrice(),Tools::encrypt()neboConfiguration::getInt(), včetně metod, které modul zdědí:$this->addMedia()v předním řadiči nebo$this->ajaxDie(). - Odstraněny konstanty a hooks, a to jak v
registerHook()a vhookXxx()metody, které již nikdy nebudou vyvolány. - Uvedený rozsah kompatibility. Pokud
ps_versions_compliancypokud je výsledek menší než 9.0, PrestaShop 9 modul vůbec nenainstaluje. - Změny v PHP 8. PrestaShop 9 vyžaduje PHP 8.1 nebo novější, takže funkce jako
create_function()neboeach()jsou rovněž uváděny. - Přepsání metod jádra, které již neexistují, které přestanou fungovat, aniž by to někdo zaznamenal.
- Úskalí Hummingbird a doplňků: moduly, které předávají vlastní HTML do modálního okna košíku daného motivu, šablony pro zahrnutí závislé na motivu a
nofiltervýstup.
Odkud pochází seznam odstraněného kódu
Seznam jsme nevytvořili ručně. Druhý skript v repozitáři načte Zdrojový kód PrestaShop pro verze 1.7.8, 8.2 a 9.0 porovnává jejich třídy, metody, konstanty a hooks a zaznamenává, co zmizelo a v které verzi. Aktuální data zahrnují 444 odstraněných tříd, přibližně 1 800 odstraněných metod, 23 konstant a 16 položek hooks. Kdokoli si jej může znovu sestavit z oficiálních verzí.
Výsledky jsme porovnali se skutečným kódem. Sami jsme Block Sliding Cart Modul – než jsme jej aktualizovali na verzi PrestaShop 9, hlásil přesně ty problémy, na které tehdy upozornila validace doplňků. V aktuální verzi, která touto validací prošla, nehlásí nic. Aktuální verze vlastních modulů PrestaShop také vykazují nulové chyby.
Jeho použití v CI
Skript v případě zjištění chyb vrátí výstupní kód 1, takže může zastavit sestavení. U modulu uloženého na GitHubu stačí dva kroky v pracovním postupu:
- 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žití --format=json pro vaše vlastní nástroje, nebo --format=md tabulku, kterou můžete vložit do úkolu nebo hlášení.
Co nedokáže
Jedná se o statickou analýzu, takže vykazuje kód, který byl odstraněn nástrojem PrestaShop. Nedokáže určit typ proměnné, takže volání jako $product->something() se vyhodnotí pouze v případě, že daný název metody již nikde v jádru neexistuje. Nezachytí však změny chování ani chyby, které se objevují pouze za běhu.
Považujte to za první pokus. Poté nainstalujte modul na kopii PrestaShop 9 se zapnutým ladicím režimem, otevřete jeho konfigurační stránku a proklikejte se přes front office v šabloně Hummingbird. To, co se tím u našeho vlastního modulu ukázalo, jsme popsali v Modernizace modulu PrestaShop na verzi PrestaShop 9: Co se pokazilo a jak jsme to opravili.
Často kladené otázky
Je ten šachový program zdarma?
Ano. Jedná se o open source pod licencí MIT a můžete jej používat ve svém vlastním obchodě, v obchodech svých klientů nebo v rámci svých vlastních nástrojů.
Změní to můj modul nebo se něco nahraje?
Ne. Program pouze načte soubory a vygeneruje zprávu. Nic se nemění a nic neopouští váš počítač.
Mohu to spustit v ostrém provozu?
Ano, čte pouze soubory. Nejbezpečnější způsob je přesto stáhnout si modules/ složku nebo ZIP soubory s moduly a spusťte kontrolu na svém počítači.
Zpráva je prázdná. Je můj modul připraven na verzi PrestaShop 9?
To znamená, že nebyly nalezeny žádné známé odstraněné prvky, což je dobré znamení. Vyzkoušejte to přesto na PrestaShop 9 kopií: kontrolní nástroj nedokáže rozpoznat změněné chování ani problémy s rozvržením specifické pro daný motiv.
Které verze PrestaShop to zahrnuje?
Obsahuje přehled toho, co bylo odstraněno mezi verzemi 1.7.8 a 9.0, takže je užitečný jak pro moduly verze 1.7, které se aktualizují na verzi 8 nebo 9, tak pro moduly verze 8.x, které se aktualizují na verzi 9.
Pokud je zpráva dlouhá
Některé opravy se vejdou do jediného řádku. Jiné zase vyžadují přepracování způsobu, jakým modul načítá své třídy nebo vykresluje své šablony. Pokud byste to raději svěřili někomu jinému, právě tím se zabýváme: Opravy modulu PrestaShop. Zašlete nám zprávu a my vám odpovíme s případnými dotazy nebo cenovou nabídkou.
