Blog

Aktualizacja PrestaShop 1.7 do 9: checklista 12 kroków, zanim klikniesz „Aktualizuj”

Zespół PrestaShopAddons 82 min read

Aktualizacja sklepu z PrestaShop 1.7 do 9 to nie jest jedno kliknięcie. Między tymi wersjami PrestaShop podniósł minimalną wersję PHP, usunął setki klas core, wymienił domyślny motyw i zmienił sposób budowy back office. Sama aktualizacja zwykle przechodzi bez problemów. Psuje się wszystko dookoła: moduł płatności, który wywołuje nieistniejącą już metodę, override, który po cichu przestaje działać, albo szablon motywu, który oczekuje zmiennych, jakich PrestaShop 9 już nie przekazuje.

Ta checklista to kolejność, w jakiej sami pracujemy, gdy przygotowujemy sklep do PrestaShop 9. Większość kroków wykonujesz zanim zaczniesz aktualizację, na kopii sklepu, tak żeby nic nie zepsuło się Twoim klientom.

Zanim zaczniesz: zapisz trzy rzeczy

Otwórz back office i przejdź do Advanced Parameters → Information. Zanotuj:

  1. Wersję PrestaShop, na przykład 1.7.8.11 albo 8.1.7.
  2. Wersję PHP, widoczną na tej samej stronie w informacjach o serwerze.
  3. Ile modułów nie pochodzi od PrestaShop. W Modules → Module Manager sprawdź, co zainstalowałeś sam lub kupiłeś. To właśnie te moduły decydują o tym, jak trudna będzie aktualizacja.

Sklep na 1.7.8 z PHP 7.4 i dwudziestoma modułami zewnętrznymi to projekt. Sklep na 8.2 z PHP 8.1 i pięcioma dobrze utrzymanymi modułami to jedno popołudnie.

Checklista w 12 krokach

1. Zrób pełną kopię zapasową i kopię testową (staging)

Zrób kopię zapasową zarówno plików, jak i bazy danych, i upewnij się, że naprawdę potrafisz je przywrócić. Następnie utwórz kopię testową (staging) sklepu na serwerze tego samego typu, najlepiej na subdomenie zabezpieczonej hasłem. Każdy z poniższych kroków wykonujesz najpierw na tej kopii. Sklepu produkcyjnego dotykasz dopiero na samym końcu.

2. Sprawdź serwer: PHP 8.1 lub nowszy

PrestaShop 9 wymaga PHP 8.1 lub nowszego (9.0 obsługuje PHP od 8.1 do 8.4, 9.1 dodaje 8.5; zobacz oficjalne wymagania systemowe). To najczęstsza przeszkoda w sklepach na 1.7, bo PrestaShop 1.7 w ogóle nie działa na PHP 8. Zapytaj hosting, jakie wersje PHP oferuje i czy możesz przełączać wersję osobno dla każdej strony. Sprawdź też memory_limit (oficjalna dokumentacja zaleca co najmniej 512M), max_execution_time oraz to, czy włączone są rozszerzenia intl, zip, gd i mbstring.

3. Zaplanuj ścieżkę: 1.7 → 8 → 9

Bezpośrednia aktualizacja z 1.7 do 9 nie jest obsługiwana: oficjalny moduł Update Assistant przenosi sklepy z 1.7 najpierw na PrestaShop 8. Resztę ścieżki wyznaczają wymagania PHP. PrestaShop 1.7.8 działa na PHP do 7.4, PrestaShop 8 na PHP od 7.2.5 do 8.1, a PrestaShop 9 zaczyna się od PHP 8.1. Dla sklepu na 1.7 bezpieczna ścieżka wygląda więc zwykle tak:

  1. Zaktualizuj 1.7.8 do 8.2, wciąż na PHP 7.4.
  2. Przełącz serwer na PHP 8.1, które obsługują zarówno PrestaShop 8, jak i 9, i przetestuj sklep.
  3. Zaktualizuj 8.2 do 9.

Każdy krok zmienia tylko jedną rzecz naraz, więc kiedy coś się zepsuje, wiesz, co było przyczyną. Sklep, który już działa na PrestaShop 8, może od razu przejść na 9.

4. Spisz wszystkie moduły zewnętrzne i sprawdź ich autorów

Dla każdego modułu, który nie był dostarczony z PrestaShop, zapisz wersję i sprawdź, czy autor wydał wersję dla PrestaShop 9. Moduły kupione w PrestaShop Addons mają obsługiwane wersje podane na stronie produktu. Jeśli moduł nie był aktualizowany od lat, przygotuj się na jeden z trzech scenariuszy: wymiana, naprawa albo usunięcie. Najłatwiejszy zysk to nieużywane moduły: odinstaluj je przed aktualizacją, a niczego nie zepsują.

5. Przeskanuj moduły pod kątem kodu usuniętego z PrestaShop

Między 1.7.8 a 9.0 PrestaShop usunął 444 klasy core, około 1800 metod, 23 stałe i 16 hooków. Moduł, który korzysta z któregokolwiek z nich, albo rzuci błędem krytycznym (fatal error), albo po cichu przestanie wykonywać część swojej pracy.

Nie musisz szukać tego ręcznie. Opublikowaliśmy darmowy skrypt open source, który skanuje moduł i wypisuje każdą usuniętą klasę, metodę i hook, z których korzysta, wraz z plikiem i numerem linii, a dla najczęstszych przypadków podpowiada zamiennik. Opisaliśmy go w artykule darmowy skaner zgodności modułów z PrestaShop 9. Aby sprawdzić od razu wszystkie moduły sklepu:

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

Typowy wynik wygląda tak:

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

Krótki raport zwykle oznacza poprawki w jednej linii. Długi oznacza, że moduł wymaga poważnej pracy, i lepiej wiedzieć o tym teraz niż po aktualizacji.

6. Sprawdź zakres zgodności zadeklarowany przez każdy moduł

Każdy moduł deklaruje w ps_versions_compliancy, które wersje PrestaShop obsługuje. Jeśli maksimum jest niższe niż 9.0, na przykład 'max' => '8.99.99', PrestaShop 9 odmówi jego instalacji. Skaner też to zgłasza. Podnieś tę wartość dopiero wtedy, gdy moduł faktycznie przetestujesz na PrestaShop 9, inaczej tylko ukrywasz problem.

7. Znajdź swoje overrides

Overrides (nadpisania) to pliki w folderze /override, które zastępują fragmenty core PrestaShop. Były powszechne w czasach 1.6 i 1.7. Kiedy PrestaShop usuwa albo zmienia nazwę metody, którą nadpisuje override, ten po prostu nigdy nie zostaje wywołany, bez żadnego komunikatu o błędzie. Funkcja, którą dodawał, zwyczajnie znika.

Spisz całą zawartość /override/classes i /override/controllers, ustal, który moduł lub programista dodał każdy plik, i sprawdź, czy nadpisywana metoda nadal istnieje w PrestaShop 9. Szybki test: w Advanced Parameters → Performance możesz wyłączyć wszystkie overrides na kopii testowej i zobaczyć, co się zmieni.

8. Zaplanuj kwestię motywu

PrestaShop 9 ma nowy domyślny motyw, Hummingbird. Aktualizacja nie zmienia motywu automatycznie, więc sklep na Classic albo na kupionym motywie go zachowuje. To dobra wiadomość, ale ma dwie konsekwencje:

  • Kupiony motyw potrzebuje własnej wersji dla PrestaShop 9 od autora, dokładnie tak jak moduł.
  • Moduły, które działają z Classic, mogą zachowywać się inaczej na Hummingbird, i odwrotnie. Hummingbird korzysta z CSS cascade layers i własnego okna modalnego koszyka, przez co kilka elementów naszego własnego modułu koszyka przestało działać, dopóki ich nie poprawiliśmy. Szczegóły znajdziesz w naszym case study aktualizacji modułu do PrestaShop 9.

Jeśli planujesz później przejść na Hummingbird, przetestuj na nim ważne moduły już teraz, skoro i tak testujesz.

9. Zacznij od modułów płatności i dostawy

Nie każdy zepsuty moduł kosztuje tyle samo. Zepsuty moduł bloga to irytacja. Zepsuty moduł płatności lub dostawy to brak zamówień. Testuj je jako pierwsze i najdokładniej, a u operatora płatności upewnij się, że jego moduł oficjalnie obsługuje PrestaShop 9. Moduły płatności to też te, które najczęściej napisano pod 1.7 i nigdy więcej ich nie ruszano.

10. Przeprowadź aktualizację na kopii testowej

Użyj oficjalnego modułu PrestaShop Update Assistant (dawniej 1-Click Upgrade; zobacz oficjalny przewodnik po aktualizacji). Przed startem włącz tryb debugowania na kopii testowej (Advanced Parameters → Performance → Debug mode), żeby zamiast pustej strony widzieć prawdziwe błędy. Zapisuj każdy błąd i każdy notice. Notice, który w trybie debugowania wygląda niegroźnie, może być objawem modułu, który działa tylko w połowie.

11. Przetestuj całą ścieżkę zakupu, od początku do końca

Po aktualizacji złóż na kopii testowej prawdziwe zamówienia testowe:

  1. Przejrzyj kategorię i stronę produktu.
  2. Dodaj produkt do koszyka, zmień ilość, usuń produkt.
  3. Użyj kodu rabatowego.
  4. Przejdź przez finalizację zamówienia jako gość i jako zalogowany klient.
  5. Zapłać każdą oferowaną metodą płatności (w trybie testowym).
  6. Sprawdź e-mail z potwierdzeniem zamówienia i samo zamówienie w back office.

Zrób to na komputerze i na telefonie. Problemy z koszykiem i checkoutem często pojawiają się tylko na urządzeniach mobilnych, na przykład przyklejony przycisk ląduje w złym miejscu. Jeśli Twój sklep korzysta z wysuwanego koszyka lub koszyka w popupie, przetestuj go osobno: koszyk to element sklepu najmocniej powiązany z motywem. Nasz Block Sliding Cart to przykład modułu koszyka, który już działa na PrestaShop 1.7, 8 i 9, zarówno na Classic, jak i na Hummingbird.

12. Zaplanuj wdrożenie i drogę odwrotu

Gdy kopia testowa działa, powtórz aktualizację na sklepie produkcyjnym w spokojnej porze, z włączonym trybem konserwacji. Ustal z góry, co oznacza „coś poszło nie tak” i jak przeprowadzisz rollback: przywrócenie kopii zapasowej z kroku 1 musi zająć minuty, a nie godziny. Po wdrożeniu przez kilka dni pilnuj logu błędów i liczby zamówień.

Co psuje się najczęściej

Kiedy aktualizowaliśmy nasz własny moduł, po stronie PHP potrzeba było mniej zmian, niż się spodziewaliśmy. Najwięcej czasu kosztowały:

  • Usunięte metody core, takie jak Tools::displayPrice(), które w siedmiu miejscach zamieniły się w błędy krytyczne.
  • Klasy przeniesione do nowej przestrzeni nazw, takie jak presentery koszyka i produktu.
  • Nowy motyw: lista produktów w koszyku, która przez warstwy CSS zamieniła się w siatkę dwukolumnową, oraz funkcja motywu, która rzucała błędem, gdy dostawała własny HTML modułu.
  • Notices w trybie debugowania, które wyglądały niegroźnie, ale przy ostrzejszych kontrolach wywracały strony.

Pełną historię, razem z poprawkami w kodzie, opisaliśmy w artykule Aktualizacja modułu PrestaShop do PrestaShop 9: co się zepsuło i jak to naprawiliśmy.

Checklista w skrócie

# Krok Gotowe
1 Pełna kopia zapasowa (pliki + baza danych), przywracanie przetestowane, kopia testowa utworzona ☐
2 Hosting oferuje PHP 8.1+; pamięć i rozszerzenia sprawdzone ☐
3 Ścieżka aktualizacji wybrana (1.7 → 8.2 → PHP 8.1 → 9 albo 8 → 9) ☐
4 Moduły zewnętrzne spisane; nieużywane usunięte ☐
5 Wszystkie moduły przeskanowane pod kątem usuniętego kodu ☐
6 ps_versions_compliancy sprawdzone ☐
7 Overrides spisane i sprawdzone ☐
8 Motyw ma wersję dla PrestaShop 9; kluczowe moduły przetestowane na Hummingbird ☐
9 Moduły płatności i dostawy potwierdzone dla PrestaShop 9 ☐
10 Aktualizacja przeprowadzona na kopii testowej z włączonym trybem debugowania ☐
11 Zamówienia testowe złożone na komputerze i na telefonie ☐
12 Termin wdrożenia i plan rollbacku uzgodnione ☐

Najczęściej zadawane pytania

Czy mogę zaktualizować PrestaShop 1.7 bezpośrednio do 9?

Nie. Oficjalny Update Assistant aktualizuje sklepy z 1.7 najpierw do PrestaShop 8. Poza tym PrestaShop 1.7 nie działa na PHP 8, a PrestaShop 9 wymaga PHP 8.1 lub nowszego. Bezpieczna ścieżka to 1.7.8 do 8.2 na obecnym PHP, potem przełączenie na PHP 8.1, a na końcu aktualizacja do 9.

Czy moje moduły będą działać na PrestaShop 9?

Te, które autor zaktualizował pod PrestaShop 9, tak. Starsze moduły zadziałają tylko wtedy, gdy nie korzystają z żadnego kodu usuniętego z PrestaShop. Nasz darmowy skaner zgodności wypisuje ten kod dla każdego modułu, więc wiesz o tym przed aktualizacją.

Jakiej wersji PHP wymaga PrestaShop 9?

PHP 8.1 lub nowszego. Zanim zaplanujesz cokolwiek innego, sprawdź, które wersje obsługuje Twój hosting.

Czy muszę przejść na motyw Hummingbird?

Nie. Aktualizacja zachowuje Twój obecny motyw. Kupiony motyw potrzebuje wersji dla PrestaShop 9 od autora, a jeśli planujesz później zmianę motywu, warto już teraz przetestować ważne moduły na Hummingbird.

Ile trwa aktualizacja do PrestaShop 9?

Sama aktualizacja trwa od kilku minut do godziny. Przygotowania zajmują więcej: od jednego popołudnia w przypadku sklepu na PrestaShop 8 z kilkoma utrzymywanymi modułami do kilku dni w przypadku sklepu na 1.7 z wieloma starymi modułami i overrides.

Jeśli raport ze skanowania jest długi

Niektóre sklepy przechodzą tę listę w jeden dzień. Inne odkrywają, że połowa modułów wymaga zmian. Jeśli wolisz komuś tę część przekazać, właśnie tym się zajmujemy: poprawki modułów pod PrestaShop 9. Znajdujemy przyczynę, naprawiamy ją na kopii Twojego sklepu i dopiero wtedy wdrażamy. Wyślij nam raport ze skanera, a odpowiemy pytaniami albo wyceną.