Blog

Darmowe narzędzie do sprawdzania zgodności modułów z PrestaShop 9

Zespół PrestaShopAddons Czas czytania: 6 minut

Zanim zaktualizujesz sklep do wersji PrestaShop 9, warto sprawdzić, które moduły przestaną działać. Instalowanie każdego z nich na kopii testowej i przeglądanie jego funkcji jest skutecznym sposobem, ale jest to czasochłonne i pozwala wykryć jedynie te problemy, które akurat uda się wywołać.

Napisaliśmy więc krótki skrypt, który wykona za Ciebie pierwsze przejście. ps9check przeskanowuje moduł i wyświetla listę kodu usuniętego w wersjach PrestaShop 8 lub 9: podstawowe klasy i metody, hooks, przeniesione klasy prezenterów, funkcje PHP usunięte w PHP 8 oraz kilka pułapek związanych z walidacją motywów i dodatków. Jest to narzędzie darmowe i oparte na licencji open source: github.com/asymetria/ps9-compat-check.

Szybki start

Na komputerze lub serwerze musi być zainstalowana wersja PHP 7.4 lub nowsza. Nie są wymagane programy PrestaShop ani Composer.

  1. Pobierz skrypt: ps9-compat-check (ZIP), a następnie rozpakuj go.
  2. Uruchom to na folderze modułu lub pliku ZIP z modułem:
php ps9check.php /path/to/modules/yourmodule
php ps9check.php yourmodule.zip

W sklepie moduły znajdują się w modules/ folder. Aby zaznaczyć je wszystkie naraz w systemie Linux lub macOS:

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

Jak wygląda raport

Oto wynik dla wersji 2.0.4 programu ps_sprawdź_płatność, jeden z modułów płatniczych opracowanych przez PrestaShop, napisany w PrestaShop w ciągu 1.7 dnia:

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 już dawno naprawiło ten moduł, a obecna wersja działa bezbłędnie. Jednak ten sam kod nadal działa w wielu sklepach, wraz z modułami innych producentów, których autorzy nigdy ich nie zaktualizowali.

Każdy wynik wskazuje plik i wiersz. W przypadku najczęstszych problemów raport zawiera również propozycję poprawki, dzięki czemu od razu widać, czy naprawa wymaga wprowadzenia tylko jednej zmiany, czy też jest to bardziej skomplikowane zadanie.

Co sprawdza

  • Usunięto podstawowe klasy, niezależnie od tego, czy jest używany z new, extends, use lub wywołania statyczne. Gdy klasa została jedynie przeniesiona — na przykład prezentery koszyka i produktu — w raporcie pojawia się nowa przestrzeń nazw.
  • Usunięto podstawowe metody, na przykład Tools::displayPrice(), Tools::encrypt() lub Configuration::getInt(), w tym metody, które moduł dziedziczy: $this->addMedia() w kontrolerze przednim lub $this->ajaxDie().
  • Usunięto stałe i hooks, zarówno w registerHook() oraz w hookXxx() metody, które nigdy więcej nie zostaną wywołane.
  • Zadeklarowany zakres zgodności. Jeśli ps_versions_compliancy jeśli wynik jest poniżej 9.0, PrestaShop 9 w ogóle nie zainstaluje modułu.
  • Zmiany w PHP 8. PrestaShop 9 wymaga PHP 8.1 lub nowszego, więc funkcje takie jak create_function() lub each() są również zgłaszane.
  • Przepisania metod rdzenia, które już nie istnieją, które po cichu przestają działać.
  • Pułapki związane z Hummingbird i dodatkami: moduły, które przekazują własny kod HTML do okna modalnego koszyka motywu, pliki szablonów zależne od motywu oraz nofilter wynik.

Skąd pochodzi lista usuniętego kodu

Nie sporządziliśmy tej listy ręcznie. Drugi skrypt w repozytorium odczytuje plik Kod źródłowy PrestaShop dla wersji 1.7.8, 8.2 i 9.0 porównuje ich klasy, metody, stałe i elementy hooks oraz rejestruje, co zniknęło i w której wersji. Aktualne dane obejmują 444 usunięte klasy, około 1 800 usuniętych metod, 23 stałe oraz 16 elementów hooks. Każdy może odtworzyć ten projekt na podstawie oficjalnych wydań.

Porównaliśmy wyniki z rzeczywistym kodem. Na własną rękę Block Sliding Cart Moduł ten, zanim zaktualizowaliśmy go do wersji PrestaShop 9, zgłaszał dokładnie te same problemy, które wówczas wykryło narzędzie do walidacji dodatków. W obecnej wersji, która przeszła tę walidację, nie zgłasza żadnych błędów. Również aktualne wersje modułów własnych PrestaShop działają bezbłędnie.

Wykorzystanie tego w CI

Skrypt zwraca kod wyjścia 1 w przypadku wykrycia błędów, dzięki czemu może zatrzymać kompilację. W przypadku modułu przechowywanego na GitHubie wystarczą dwa etapy w przepływie pracy:

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

Zastosowanie --format=json do własnego oprzyrządowania lub --format=md w postaci tabeli, którą można wkleić do zgłoszenia lub raportu.

Czego nie potrafi

Jest to skan statyczny, więc wykrywa kod usunięty przez PrestaShop. Nie jest w stanie określić typu zmiennej, więc wywołanie takie jak $product->something() jest zgłaszany tylko wtedy, gdy nazwa tej metody nie występuje już nigdzie w rdzeniu. Nie wykrywa on również zmian w zachowaniu ani błędów, które pojawiają się wyłącznie w czasie wykonywania.

Potraktuj to jako pierwsze podejście. Następnie zainstaluj moduł na kopii PrestaShop z włączonym trybem debugowania, otwórz stronę konfiguracyjną i przejdź przez opcję front office w motywie Hummingbird. Opisaliśmy, jakie wyniki dało to w przypadku naszego modułu w Modernizacja modułu PrestaShop do wersji PrestaShop 9: Co się zepsuło i jak to naprawiliśmy.

Skanowanie modułów to krok 5 z 12. Cały plan, od kopii zapasowej po uruchomienie, znajdziesz w naszej checkliście aktualizacji PrestaShop 1.7 do 9.

Najczęściej zadawane pytania

Czy ta gra w warcaby jest darmowa?

Tak. Jest to oprogramowanie typu open source na licencji MIT i można z niego korzystać we własnym sklepie, w sklepach klientów lub w ramach własnych narzędzi.

Czy to powoduje zmianę w moim module lub przesyła jakieś pliki?

Nie. Program jedynie odczytuje pliki i generuje raport. Nic nie jest modyfikowane, a żadne dane nie opuszczają komputera.

Czy mogę uruchomić to w działającym sklepie?

Tak, to narzędzie tylko odczytuje pliki. Niemniej jednak najbezpieczniejszym sposobem jest pobranie pliku modules/ folder lub pliki ZIP z modułami i przeprowadź sprawdzanie na swoim komputerze.

Raport jest pusty. Czy mój moduł jest gotowy do wersji PrestaShop 9?

Oznacza to, że nie wykryto żadnego ze znanych usunięć, co jest dobrym znakiem. Wypróbuj to mimo wszystko na kopii PrestaShop 9: narzędzie sprawdzające nie jest w stanie wykryć zmian w zachowaniu ani problemów z układem związanych z motywem.

Które wersje PrestaShop obejmuje ten produkt?

Zawiera informacje o tym, co zostało usunięte w okresie między wersjami 1.7.8 a 9.0, więc jest przydatny zarówno dla modułów z wersji 1.7 przechodzących na wersję 8 lub 9, jak i dla modułów z wersji 8.x przechodzących na wersję 9.

Jeśli raport jest długi

Niektóre poprawki to zaledwie jedna linijka kodu. Inne wymagają przeprogramowania sposobu, w jaki moduł ładuje swoje klasy lub renderuje szablony. Jeśli wolisz, żeby ktoś inny się tym zajął, to właśnie tym się zajmujemy: Naprawa modułów PrestaShop. Prześlij nam raport, a my skontaktujemy się z Tobą z pytaniami lub wyceną.