Blog

Checklist aktualizácie PrestaShop 1.7 na 9: 12 krokov predtým, než kliknete na „Aktualizovať“

Tím PrestaShopAddons 82 min read







Aktualizácia obchodu z PrestaShop 1.7 na 9 nie je otázkou jedného kliknutia. Medzi týmito verziami PrestaShop zmenil minimálnu verziu PHP, odstránil stovky tried jadra, nahradil predvolenú šablónu a zmenil spôsob, akým je postavený back office. Samotná aktualizácia zvyčajne prebehne v poriadku. Pokazí sa všetko okolo nej: platobný modul, ktorý volá metódu, ktorá už neexistuje, override, ktorý potichu prestane fungovať, alebo súbor šablóny, ktorý očakáva premenné, ktoré PrestaShop 9 už neposiela.

Tento checklist zodpovedá poradiu, v akom postupujeme, keď pripravujeme obchod na PrestaShop 9. Väčšina krokov sa robí ešte predtým, než spustíte aktualizáciu, a to na kópii obchodu, aby sa pre vašich zákazníkov nič nepokazilo.

Skôr než začnete: zapíšte si tri veci

Otvorte back office a prejdite do Advanced Parameters → Information. Poznačte si:

  1. Verziu systému PrestaShop, napríklad 1.7.8.11 alebo 8.1.7.
  2. Verziu PHP, ktorá je uvedená na tej istej stránke v informáciách o serveri.
  3. Koľko modulov nepochádza od PrestaShop. V Modules → Module Manager sa pozrite, čo ste si nainštalovali sami alebo kúpili. Práve tieto moduly rozhodujú o tom, aká náročná bude aktualizácia.

Obchod na verzii 1.7.8 s PHP 7.4 a dvadsiatimi modulmi tretích strán je projekt. Obchod na verzii 8.2 s PHP 8.1 a piatimi dobre udržiavanými modulmi je práca na jedno popoludnie.

Checklist v 12 krokoch

1. Urobte úplnú zálohu a testovaciu kópiu (staging)

Zálohujte súbory aj databázu a overte si, že ich naozaj dokážete obnoviť. Potom vytvorte testovaciu kópiu (staging) obchodu na rovnakom type servera, ideálne na subdoméne chránenej heslom. Každý z nasledujúcich krokov robíte najprv na tejto kópii. Živého obchodu sa dotknete až úplne na konci.

2. Skontrolujte server: PHP 8.1 alebo novšie

PrestaShop 9 vyžaduje PHP 8.1 alebo novšie (9.0 podporuje PHP 8.1 až 8.4, 9.1 pridáva 8.5; pozrite si oficiálne systémové požiadavky). Pri obchodoch na 1.7 je to najčastejšia prekážka, pretože PrestaShop 1.7 na PHP 8 vôbec nebeží. Overte si u svojho hostingu, aké verzie PHP ponúka a či môžete verziu prepínať pre jednotlivé weby. Skontrolujte aj memory_limit (oficiálna dokumentácia odporúča aspoň 512M), max_execution_time a to, či sú zapnuté rozšírenia intl, zip, gd a mbstring.

3. Naplánujte postup: 1.7 → 8 → 9

Priama aktualizácia z 1.7 na 9 nie je podporovaná: oficiálny Update Assistant prevedie obchody na 1.7 najprv na PrestaShop 8. Zvyšok postupu určujú požiadavky na PHP. PrestaShop 1.7.8 beží na PHP najviac 7.4, PrestaShop 8 na PHP 7.2.5 až 8.1 a PrestaShop 9 začína na PHP 8.1. Pri obchode na 1.7 je preto obvyklá bezpečná cesta takáto:

  1. Aktualizujte 1.7.8 na 8.2, kým ste ešte na PHP 7.4.
  2. Prepnite server na PHP 8.1, ktoré podporuje PrestaShop 8 aj 9, a obchod otestujte.
  3. Aktualizujte 8.2 na 9.

V každom kroku sa mení len jedna vec, takže keď sa niečo pokazí, viete, čo to spôsobilo. Obchod, ktorý už beží na PrestaShop 8, môže prejsť rovno na 9.

4. Spíšte všetky moduly tretích strán a overte ich dodávateľov

Pri každom module, ktorý nebol súčasťou PrestaShop, si zapíšte verziu a overte, či autor vydal verziu pre PrestaShop 9. Pri moduloch kúpených na PrestaShop Addons sú podporované verzie uvedené na stránke produktu. Ak modul roky nikto neaktualizoval, počítajte s jedným z troch riešení: nahradiť ho, dať ho opraviť alebo ho odstrániť. Najľahšia výhra sú nepoužívané moduly: odinštalujte ich pred aktualizáciou a nebudú môcť nič pokaziť.

5. Skontrolujte, či moduly nepoužívajú kód, ktorý PrestaShop odstránil

Medzi verziami 1.7.8 a 9.0 PrestaShop odstránil 444 tried jadra, približne 1 800 metód, 23 konštánt a 16 hookov. Modul, ktorý niektoré z nich používa, buď skončí fatálnou chybou, alebo potichu prestane robiť časť svojej práce.

Nemusíte ich hľadať ručne. Zverejnili sme bezplatný open-source skript, ktorý modul preskenuje a vypíše každú odstránenú triedu, metódu a hook, ktoré používa, aj so súborom a riadkom, a pri tých najčastejších navrhne náhradu. Opisujeme ho v článku bezplatný nástroj na kontrolu kompatibility modulov s PrestaShop 9. Ak chcete skontrolovať všetky moduly obchodu naraz:

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

Typický nález vyzerá takto:

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

Krátky report zvyčajne znamená opravy na jeden riadok. Dlhý znamená, že modul potrebuje poriadnu prácu, a je lepšie to vedieť teraz ako až po aktualizácii.

6. Skontrolujte deklarovaný rozsah kompatibility každého modulu

Každý modul v ps_versions_compliancy deklaruje, ktoré verzie PrestaShop podporuje. Ak je maximum nižšie ako 9.0, napríklad 'max' => '8.99.99', PrestaShop 9 ho odmietne nainštalovať. Aj toto skener nahlási. Hodnotu zvýšte až vtedy, keď bol modul na PrestaShop 9 naozaj otestovaný, inak problém len zakrývate.

7. Nájdite svoje overridy

Overridy sú súbory v priečinku /override, ktoré nahrádzajú časti jadra PrestaShop. Bežné boli v časoch verzií 1.6 a 1.7. Keď PrestaShop odstráni alebo premenuje metódu, ktorú override nahrádza, override sa jednoducho nikdy nezavolá, a to bez akejkoľvek chybovej hlášky. Funkcia, ktorú pridával, proste zmizne.

Vypíšte si všetko v /override/classes a /override/controllers, zistite, ktorý modul alebo vývojár pridal jednotlivé súbory, a overte, či prepísaná metóda v PrestaShop 9 stále existuje. Rýchly test: v Advanced Parameters → Performance môžete na testovacej kópii vypnúť všetky overridy a sledovať, čo sa zmení.

8. Naplánujte si, čo so šablónou

PrestaShop 9 prichádza s novou predvolenou šablónou Hummingbird. Aktualizácia vašu šablónu automaticky neprepne, takže obchod na Classic alebo na kúpenej šablóne si ju ponechá. To je dobrá správa, má to však dva dôsledky:

  • Kúpená šablóna potrebuje vlastnú verziu pre PrestaShop 9 od autora šablóny, presne ako modul.
  • Moduly, ktoré fungujú s Classic, sa môžu na Hummingbird správať inak, a naopak. Hummingbird používa CSS cascade layers a vlastné modálne okno košíka, čo pokazilo viacero častí nášho vlastného modulu košíka, kým sme ich neopravili. Podrobnosti nájdete v prípadovej štúdii o aktualizácii nášho modulu na PrestaShop 9.

Ak plánujete neskôr prejsť na Hummingbird, otestujte na ňom dôležité moduly už teraz, keď aj tak testujete.

9. Začnite platobnými a dopravnými modulmi

Nie každý pokazený modul stojí rovnako. Pokazený blogový modul je nepríjemnosť. Pokazený platobný alebo dopravný modul znamená žiadne objednávky. Tieto otestujte ako prvé a najdôkladnejšie a overte si u poskytovateľa platieb, že jeho modul oficiálne podporuje PrestaShop 9. Platobné moduly sú zároveň tie, ktoré boli najčastejšie napísané pre 1.7 a odvtedy sa ich nikto nedotkol.

10. Spustite aktualizáciu na testovacej kópii

Použite oficiálny modul PrestaShop Update Assistant (predtým 1-Click Upgrade; pozrite si oficiálny návod na aktualizáciu). Pred začatím zapnite na testovacej kópii režim ladenia (Advanced Parameters → Performance → Debug mode), aby ste namiesto prázdnej stránky videli skutočné chyby. Zapíšte si každú chybu aj každé upozornenie (notice). Upozornenie, ktoré v režime ladenia vyzerá neškodne, môže byť aj tak príznakom modulu, ktorý funguje len napoly.

11. Otestujte celú cestu k peniazom, od začiatku do konca

Po aktualizácii vytvorte na testovacej kópii skutočné testovacie objednávky:

  1. Prejdite si kategóriu a stránku produktu.
  2. Pridajte produkt do košíka, zmeňte množstvo, odstráňte produkt.
  3. Uplatnite zľavový kupón.
  4. Prejdite pokladňou ako hosť aj ako prihlásený zákazník.
  5. Zaplaťte každým spôsobom platby, ktorý ponúkate (v testovacom režime).
  6. Skontrolujte potvrdzovací e-mail k objednávke a objednávku v back office.

Urobte to na počítači aj na mobile. Problémy s košíkom a pokladňou sa často prejavia len na mobile, napríklad fixné tlačidlo, ktoré skončí na nesprávnom mieste. Ak váš obchod používa vysúvací alebo vyskakovací košík, otestujte ho samostatne: košík je časť obchodu, ktorá je so šablónou prepojená najtesnejšie. Náš Block Sliding Cart je príkladom modulu košíka, ktorý už beží na PrestaShop 1.7, 8 aj 9, na šablóne Classic aj Hummingbird.

12. Naplánujte spustenie aj cestu späť

Keď staging funguje, zopakujte aktualizáciu na živom obchode v čase s nízkou návštevnosťou a so zapnutým režimom údržby. Vopred si určte, čo znamená „niečo sa pokazilo“ a ako sa vrátite späť (rollback): obnovenie zálohy z kroku 1 musí trvať minúty, nie hodiny. Po spustení niekoľko dní sledujte chybový log a počet objednávok.

Čo sa zvyčajne pokazí

Keď sme aktualizovali vlastný modul, na strane PHP bolo potrebných menej zmien, ako sme čakali. Najviac času nás stáli tieto problémy:

  • Odstránené metódy jadra, napríklad Tools::displayPrice(), ktorá spôsobila fatálne chyby na siedmich miestach.
  • Triedy presunuté do nového namespace, napríklad presentery košíka a produktu.
  • Nová šablóna: zoznam v košíku, ktorý sa kvôli CSS layers zmenil na dvojstĺpcovú mriežku, a funkcia šablóny, ktorá hádzala chybu, keď dostala vlastné HTML modulu.
  • Upozornenia v režime ladenia, ktoré vyzerali neškodne, ale pri prísnejších kontrolách spôsobovali zlyhanie stránok.

Celý príbeh aj s opravami kódu nájdete v článku Aktualizácia modulu PrestaShop na PrestaShop 9: čo sa pokazilo a ako sme to opravili.

Checklist v skratke

# Krok Hotovo
1 Úplná záloha (súbory + databáza), obnova otestovaná, testovacia kópia vytvorená ☐
2 Hosting ponúka PHP 8.1+; pamäť a rozšírenia skontrolované ☐
3 Zvolený postup aktualizácie (1.7 → 8.2 → PHP 8.1 → 9, alebo 8 → 9) ☐
4 Moduly tretích strán spísané; nepoužívané odstránené ☐
5 Všetky moduly skontrolované na odstránený kód ☐
6 ps_versions_compliancy skontrolované ☐
7 Overridy spísané a skontrolované ☐
8 Šablóna má verziu pre PrestaShop 9; kľúčové moduly otestované na Hummingbird ☐
9 Platobné a dopravné moduly potvrdené pre PrestaShop 9 ☐
10 Aktualizácia spustená na stagingu so zapnutým režimom ladenia ☐
11 Testovacie objednávky vytvorené na počítači aj na mobile ☐
12 Termín spustenia a plán návratu späť dohodnuté ☐

Často kladené otázky

Môžem aktualizovať PrestaShop 1.7 priamo na 9?

Nie. Oficiálny Update Assistant aktualizuje obchody na 1.7 najprv na PrestaShop 8, PrestaShop 1.7 nebeží na PHP 8 a PrestaShop 9 potrebuje PHP 8.1 alebo novšie. Bezpečná cesta je 1.7.8 na 8.2 na súčasnom PHP, potom prechod na PHP 8.1 a nakoniec aktualizácia na 9.

Budú moje moduly fungovať na PrestaShop 9?

Moduly, ktoré autor aktualizoval pre PrestaShop 9, áno. Staršie moduly fungujú len vtedy, ak nepoužívajú nič z kódu, ktorý PrestaShop odstránil. Náš bezplatný nástroj na kontrolu kompatibility tento kód pri každom module vypíše, takže to budete vedieť ešte pred aktualizáciou.

Akú verziu PHP potrebuje PrestaShop 9?

PHP 8.1 alebo novšie. Skôr než začnete plánovať čokoľvek iné, overte si, ktoré verzie podporuje váš hosting.

Musím prejsť na šablónu Hummingbird?

Nie. Aktualizácia ponechá vašu súčasnú šablónu. Kúpená šablóna potrebuje verziu pre PrestaShop 9 od svojho autora a ak plánujete neskôr prejsť na Hummingbird, oplatí sa na ňom otestovať dôležité moduly.

Ako dlho trvá aktualizácia na PrestaShop 9?

Samotná aktualizácia trvá od niekoľkých minút po hodinu. Príprava trvá dlhšie: od jedného popoludnia pri obchode na PrestaShop 8 s niekoľkými udržiavanými modulmi až po niekoľko dní pri obchode na 1.7 s množstvom starých modulov a overridov.

Ak je výsledok skenovania dlhý

Niektoré obchody prejdú týmto zoznamom za deň. Iné zistia, že polovica ich modulov potrebuje úpravy. Ak by ste túto časť radšej prenechali niekomu inému, presne tomu sa venujeme: opravy modulov pre PrestaShop 9. Nájdeme príčinu, opravíme ju na kópii vášho obchodu a až potom nasadíme. Pošlite nám report zo skenera a odpovieme otázkami alebo cenovou ponukou.