PrestaShop dokumentacja to nie jedna strona, a co najmniej cztery różne źródła: dokumentacja dla deweloperów, dokumentacja użytkownika panelu, referencja API oraz repozytorium kodu na GitHubie. Każde z nich odpowiada na inny typ pytania, a najwięcej czasu traci się na szukanie w złym miejscu. Zanim otworzysz jakikolwiek artykuł, ustal wersję swojego sklepu — poradnik dla 1.6 potrafi zepsuć wdrożenie w 8.x. Poniżej znajdziesz błędy, które widzimy najczęściej, oraz checklistę do odhaczenia przed każdym zadaniem.
Fraza „prestashop dokumentacja” nie prowadzi do jednego miejsca. W praktyce to cztery zasoby i każdy odpowiada na inny typ pytania. Szukanie hooka w dokumentacji użytkownika kończy się kwadransem straconym i zerowym wynikiem — i odwrotnie.
Rozdziel je raz na zawsze:
actionValidateOrder albo strukturę pliku głównego modułu.Devdocs ma osobne wersjonowanie treści. Selektor w lewym menu zmienia artykuł, który czytasz, a numer wersji siedzi też w adresie URL. Link zapisany bez wersji potrafi dziś otworzyć inną gałąź niż w dniu, w którym go wkleiłeś do notatek.
Ostrzeżenie na koniec: wpisy z blogów i forów z lat 2015–2018 opisują 1.6. config/settings.inc.php, klasa Tools, plik defines.inc.php. W 1.7+ defines.inc.php już nie istnieje — konfiguracja leży w app/config/parameters.php. Wklejenie takiego kodu do sklepu 8.x kończy się białym ekranem albo cichym błędem w logach, którego szukanie zajmuje pół dnia.
| Źródło | Do czego służy | Typowe pytanie |
|---|---|---|
| devdocs.prestashop-project.org | Dokumentacja deweloperska: hooki, moduły, motywy, core, testy | Jakie argumenty ma hook actionValidateOrder w 8.x? |
| docs.prestashop-project.org | Dokumentacja użytkownika panelu administracyjnego | Gdzie włączyć podatek od adresu dostawy? |
| PrestaShop API / WebService reference | Endpointy, zasoby, format żądań i odpowiedzi | Jakim endpointem zaktualizować stan magazynowy? |
| GitHub PrestaShop/PrestaShop | Issues, pull requesty, kod źródłowy, historia zmian | Czy ten błąd to znany problem w 8.1.x? |
Numer wersji to pierwsza informacja przed otwarciem jakiegokolwiek artykułu. Trzy sposoby, w kolejności od najszybszego:
config/settings.inc.php znajdziesz linię _PS_VERSION_. W 1.7+ tego pliku nie ma; dane bazy i sekret znajdziesz w app/config/parameters.php (klucze database_version, database_prefix, secret).Od 1.7.0 back office działa na Symfony. To zmienia sposób pracy: pojawia się profiler, cache w var/cache, komendy konsolowe. Jeśli trafisz na poradnik, który każe czyścić wyłącznie katalog cache/smarty — wiesz już, że pisano go dla 1.6.
Konsekwencja praktyczna: ten sam hook może mieć inne argumenty w 1.7 i w 8.x, a klasy zmieniają przestrzenie nazw. Sprawdzenie wersji zajmuje 30 sekund, debugowanie niezgodnego kodu w niedzielny wieczór — kilka godzin. Przy pracach większych niż poprawka szablonu, choćby przy integracjach z PrestaShop, wersję wpisuje się do specyfikacji przed pierwszym commitem, bo od niej zależy dobór modułów i sposób podpinania hooków.
| Wersja | Status | Gdzie szukać informacji |
|---|---|---|
| 1.6.x | EOL — brak poprawek bezpieczeństwa | Archiwalne devdocs 1.6 oraz kod z tagu 1.6.1.x na GitHubie |
| 1.7.8.x | Ostatnia gałąź 1.7, w praktyce tylko poprawki | Devdocs z selektorem wersji 1.7 |
| 8.0 / 8.1 / 8.2 | Gałęzie wspierane | Devdocs 8.x, docs użytkownika, issues na GitHubie |
| 9.x | Najnowsza linia | Devdocs 9.x — najpierw sprawdź zgodność modułów i motywu |
Devdocs ma powtarzalną strukturę, którą warto zapamiętać raz na zawsze:
Gdy wyszukiwarka devdocs nie znajduje nic sensownego, przełącz się na code search w GitHubie. Szukanie po nazwie klasy albo metody (np. CartRule::checkValidity) działa znacznie lepiej niż szukanie po opisie słownym. Filtr path:src/ zawęża wyniki do kodu core, a nie do testów i plików tłumaczeń.
Sekcje Core i zaawansowane API w devdocs bywają szkieletowe: opisują intencję, ale nie każdy parametr. Wtedy źródłem prawdy jest plik źródłowy. Praktyka z naszych wdrożeń: kopiuj sygnaturę metody z repozytorium, nie z artykułu. Między minorami zmieniają się typy argumentów i wartości domyślne, a artykuł zostaje w starej wersji.
Dobry nawyk: przy każdym wdrożeniu zapisuj link do artykułu w konkretnej wersji (z numerem w adresie), nie do strony głównej devdocs. Po pół roku nikt nie pamięta, czy dany hook był podpinany przed upgradem do 8.x, a wracanie do starej treści to najszybszy sposób, żeby nie powtarzać analizy. Ta sama zasada działa przy zadaniach łączących dokumentację z gotowymi modułami — choćby przy wdrożeniu PrestaShop GA4 eCommerce, gdzie kolejność zdarzeń w hookach trzeba sprawdzać w kodzie, nie w opisie na blogu.
W PrestaShop są dwa typy hooków i pomylenie ich to najczęstsza przyczyna sytuacji „moduł zainstalowany, a na stronie nic się nie zmieniło”. Hooki display... (np. displayHeader, displayHome, displayProductAdditionalInfo) odpowiadają za wyświetlanie w szablonie — moduł podpięty do nich zwraca HTML, który trafia w konkretne miejsce layoutu. Hooki action... (actionCartSave, actionOrderStatusUpdate, actionFrontControllerSetMedia) to zdarzenia w logice — nic nie renderują, tylko wykonują kod w danym momencie. Jeśli potrzebujesz i wyglądu, i logiki (np. banner plus zapis zdarzenia w bazie), rejestrujesz moduł na dwóch hookach — na jednym to nie zadziała.
install() modułu wywołujesz $this->registerHook('displayHeader') albo tablicę nazw. W uninstall() dodaj $this->unregisterHook('displayHeader'), usuń własne tabele i wpisy w konfiguracji. Bez tego po odinstalowaniu zostają śmieci w tabeli ps_hook_module i w konfiguracji, które potrafią „wskrzesić” wywołania po ponownej instalacji modułu.src/Core/Hook/ w nowszych wersjach, klasy legacy w starszych, a pełną listę w pliku XML z definicjami hooków (install-dev/data/xml/hook.xml). Nazwa hooka zmieniona między 1.6 a 1.7+ nie zadziała w obie strony.Jeśli hooki wykorzystujesz do pomiaru zdarzeń, kolejność prac i typowe błędy opisujemy w materiale o wdrożeniu DataLayer w PrestaShop.
| Typ hooka | Kiedy się odpala | Co zwraca | Typowe zastosowanie |
|---|---|---|---|
| display... | W trakcie renderowania szablonu (front lub back office) | HTML (string) | Banner, dodatkowa sekcja karty produktu, skrypt w headzie |
| action... | W momencie zdarzenia w logice kontrolera/modelu | Zwykle nic (może zmodyfikować przekazany parametr) | Zapis do bazy, walidacja koszyka, wysyłka danych do systemu zewnętrznego |
W PrestaShop równolegle działają dwa API i dokumentacja jednego nie opisuje drugiego. Klasyczny WebService jest dostępny od lat — włączasz go w Zaawansowane > WebService, tworzysz klucz i ustawiasz uprawnienia per zasób (GET/POST/PUT/DELETE osobno). Łączysz się Basic auth: login to klucz API, hasło puste. Zasoby siedzą pod /api/orders, /api/products, /api/customers; domyślny format to XML, JSON wymaga parametru ?output_format=JSON.
Praktyka, która oszczędza godziny: zamiast zgadywać pola, pobierz schemat zasobu — /api/products?schema=synopsis pokazuje strukturę, ?schema=blank pusty szkielet do wysłania. Paginację ustawiasz przez ?limit=0,100&sort=[id_ASC], filtrowanie po dacie przez ?date=1. Kody błędów czytaj dosłownie: 401 to zły lub wyłączony klucz, 403 brak uprawnień do metody, 404 zły zasób lub ID. Przy masowych operacjach (np. 5 tys. zamówień do ERP) licz się z limitami i czasem odpowiedzi — klasyczny WebService nie ma bulkowych endpointów, więc pracujesz paczkami i po kolei, najlepiej przez kolejkę.
Nowe API administracyjne oparte o API Platform (wprowadzane od 8.1, rozwijane w 9.x) to inny świat: inne uwierzytelnianie (OAuth2, client credentials), inne ścieżki i dokumentacja generowana jako OpenAPI. Status: dokładne ścieżki i sposób autoryzacji potwierdź w dokumentacji dla swojej wersji, bo kontrakt zmieniał się między wydaniami. Punkt wyjścia to PrestaShop Developer Documentation.
Uczciwe zastrzeżenie: przed integracją z ERP, płatnością czy kurierem zawsze potwierdź kontrakt na środowisku stagingowym — dokumentacja pokazuje kształt żądania, ale nie zachowanie konkretnej instalacji. Porządek w takich projektach opisujemy w artykule o integracjach z PrestaShop.
| Cecha | Klasyczny WebService | Nowe API administracyjne |
|---|---|---|
| Kiedy dostępne | Od wersji 1.4, w 1.7/8.x standard | Od 8.1, rozwijane w 9.x |
| Uwierzytelnianie | Klucz API + Basic auth | OAuth2 (client credentials) |
| Format danych | Domyślnie XML, JSON przez parametr | JSON (OpenAPI) |
| Gdzie dokumentacja | Sekcja WebService w devdocs + schematy przez endpoint | Dokumentacja nowego API / OpenAPI dla danej wersji |
| Do czego nadaje się dziś | Sprawdzone integracje, eksport/import zasobów | Nowe wdrożenia, ale wymaga weryfikacji na stagingu |
Motyw 1.7+ ma powtarzalną strukturę: katalog templates z plikami Twig, assets (css, js, obrazy), modules z nadpisanymi szablonami modułów oraz config/theme.yml. Ostatni plik jest kluczowy, bo właśnie tam deklarujesz motyw potomny (np. parent: classic). Motyw potomny dziedziczy wszystko po bazowym, a Ty nadpisujesz tylko te pliki, które naprawdę zmieniasz. Efekt: aktualizacja motywu bazowego nie kasuje Twojej pracy, bo nie tknąłeś jego plików.
Kolejność wyszukiwania szablonu jest sztywna i warto ją znać, żeby nie kopiować plików bez sensu. Dla modułu PrestaShop najpierw szuka szablonu w motywie (themes/<motyw>/modules/<moduł>/views/templates/...), a dopiero potem w katalogu modułu. Dla szablonów core (karta produktu, koszyk, checkout) Twoje pliki w themes/<motyw>/templates/ mają pierwszeństwo przed tymi z głównego katalogu templates/. Jeśli modyfikujesz kilka plików tego samego komponentu, sprawdź, czy nie nadpisujesz partiala, który jest używany w pięciu miejscach — zmiana odbije się wszędzie.
Przykłady w dokumentacji obejmują strukturę motywu i dziedziczenie Twig, natomiast pełny, działający wzorzec najszybciej obejrzysz w starter theme PrestaShop na GitHubie. Dokumentacja pokazuje koncept, kod pokazuje praktykę.
Pułapka, która zjada najwięcej czasu: po edycji szablonu nie widzisz zmian, bo działa cache. Wejdź w Zaawansowane > Wydajność, włącz opcję ponownego kompilowania szablonów przy zmianie plików i wyczyść cache. Gdy panel nie pomaga, usuń zawartość katalogu var/cache/ (w 1.6 dochodzi jeszcze katalog cache w motywie). Zanim zlecasz przebudowę wyglądu, warto policzyć zakres prac — pomaga w tym materiał o tym, kogo wybrać do wdrożenia PrestaShop i ile to kosztuje.
| Co chcesz zmienić | Gdzie nadpisać plik | Czego nie ruszać |
|---|---|---|
| Szablon strony (np. karta produktu) | themes/<motyw>/templates/... | Plików w katalogu głównym templates/ |
| Szablon modułu frontowego | themes/<motyw>/modules/<moduł>/views/templates/... | Katalogu modules/<moduł>/views/templates/ |
| Style i skrypty | themes/<motyw>/assets/ | Plików motywu bazowego przy pracy na potomnym |
| Struktura motywu i dziedziczenie | config/theme.yml (parent: classic) | Motyvu bazowego, jeśli korzystasz z potomnego |
Dokumentacja PrestaShop istnieje w kilku warstwach i żadna z nich nie jest kompletna. Poniżej cztery luki, które trafiają się najczęściej, oraz metoda na każdą z nich.
1. Brak changelogów między minorami. Między 8.1.0 a 8.1.5 potrafi zmienić się zachowanie walidacji pola albo sygnatura metody, a opis w dokumentacji zostaje bez zmian. Źródłem prawdy są Pull Requesty i historia commitów w repozytorium. W praktyce: git log 8.1.0..8.1.5 -- classes/, a gdy szukasz konkretnej funkcji — git log -S "nazwaMetody". Numer commita wklej do zgłoszenia, żeby nie wracać do tego samego problemu za pół roku.
2. Przykłady kodu pod starą wersję. W dokumentacji dla deweloperów PrestaShop wciąż trafiają się fragmenty pisane pod 1.6 lub 1.7 bez adnotacji. Nie przepisuj ich bezmyślnie — sprawdź sygnaturę w kodzie: classes/, controllers/, src/. Jeśli artykuł mówi jedno, a metoda przyjmuje inne argumenty, wygrywa metoda.
3. Moduły z Marketplace bez dokumentacji technicznej. Część płatnych modułów nie ma żadnego opisu poza stroną sprzedażową. Czytaj kod: plik główny modules/nazwa/nazwa.php (rejestracja hooków, install/uninstall), katalog views/templates oraz override/. Override to najważniejsza informacja — mówi, co moduł nadpisuje w core i co przestanie działać po aktualizacji. Jeśli sklep ma kilka takich modułów, warto zaplanować to jak organizację wdrożenia integracji z PrestaShop, a nie gaszenie pożarów po kolei.
4. Testowanie poza produkcją. Postaw kopię sklepu na stagingu i korzystaj z sandboxa demo PrestaShop, żeby sprawdzić zachowanie bez ryzyka. Ta sama wersja PHP co na produkcji, inaczej wynik testu nic nie znaczy.
Zasada nadrzędna: gdy dokumentacja i kod się kłócą, kod wygrywa. Zapisz wersję PrestaShop, wersję PHP i numer commita, na których testowałeś.
| Luka w dokumentacji | Gdzie szukać odpowiedzi |
|---|---|
| Zmiana zachowania między minorami | Pull Requesty i historia commitów w repozytorium PrestaShop (git log, git log -S) |
| Przykład kodu pod starszą wersję | Sygnatury w kodzie: classes/, controllers/, src/ |
| Brak opisu modułu z Marketplace | Plik modules/…/nazwa.php, widoki, katalog override/ |
| Potrzeba sprawdzenia zachowania | Kopia na stagingu i sandbox demo PrestaShop, ta sama wersja PHP |
Dokumentacja odpowiada na pytanie „jak to działa”. Brief wdrożeniowy odpowiada na „co robimy”. Bez drugiego pierwszy dokument bywa źródłem sporów. Pięć punktów do odhaczenia przed startem — opis wdrożenia krok po kroku znajdziesz też w materiale o organizacji wdrożenia sklepu PrestaShop.
mysqldump --single-transaction. Pliki: tar z katalogu sklepu. Zanim „drobiazg z dokumentacji” wyląduje na produkcji, sprawdź, czy umiesz odtworzyć kopię. Backup bez testu odtworzenia to nie backup.Każdy z tych punktów jest odpowiedzią na zdanie „to nie było w dokumentacji”.
| Decyzja | Pytanie kontrolne | Co zapisać w briefie |
|---|---|---|
| Wersje | Czy PHP na stagingu i produkcji jest identyczne? | PrestaShop, PHP, MySQL, motyw |
| Moduł gotowy czy własny | Istnieje hook z potrzebnymi danymi? | Wybrany hook lub zakres modułu własnego |
| Sposób integracji | WebService czy nowsze API? | Lista funkcji i zależności do aktualizacji |
| Backup | Czy odtworzenie kopii zostało przetestowane? | Komenda mysqldump, zakres tar, data testu |
| Utrzymanie | Kto reaguje na błąd i w jakim czasie? | Kanał zgłoszeń, czas reakcji, zakres |
Granica jest dość wyraźna. Dopóki pracujesz w panelu, na szablonie i na modułach, dokumentacja plus kod modułu zwykle wystarczają. Problemy zaczynają się wtedy, gdy w grę wchodzi kod core i wersjonowanie zmian.
Sygnały, że problem jest większy:
Własny moduł zamiast kolejnej wtyczki. To nie kwestia estetyki, a liczby zależności. Moduł pisany pod konkretny hook robi jedną rzecz, nie wpływa na pozostałe, nie konfliktuje z następnym rozszerzeniem i przechodzi aktualizację razem ze sklepem. Koszt: trzeba go utrzymywać.
Wycena. Uczciwa wycena to liczba godzin pomnożona przez stawkę, rozbita na etapy: analiza, implementacja, testy, wdrożenie, dokumentacja powdrożeniowa. Widełki zależą od zakresu — inny nakład to zmiana szablonu, a inny integracja magazynowa czy integracja PrestaShop z Allegro. Kwota bez opisu zakresu jest bezwartościowa, bo nie da się jej porównać z drugą ofertą.
Opieka po wdrożeniu. Utrzymanie sklepu to aktualizacje PrestaShop, PHP i modułów, backupy z testem odtworzenia, monitoring dostępności i błędów, poprawki w określonym czasie reakcji. Najlepiej z bezpośrednim kontaktem do dewelopera — bez pośredników, którzy przekazują zgłoszenia. Jak wygląda wybór wykonawcy od strony kosztów, opisaliśmy w tekście o wdrożeniu PrestaShop i kosztach.
Czytanie dokumentacji bez sprawdzenia wersji sklepu.
Jak wykryć: W artykule pojawiają się pliki defines.inc.php, stare ścieżki do /classes/ albo nieistniejące już ustawienia, a Twój sklep działa na 8.x.
Jak naprawić: Najpierw ustal wersję (stopka back office lub Zaawansowane > Informacje), a potem w dokumentacji deweloperskiej wybierz tę samą gałąź w lewym menu.
Traktowanie dokumentacji użytkownika i devdocs jako tego samego zasobu.
Jak wykryć: Szukasz argumentów hooka w instrukcji panelu albo opisu ustawienia sklepu w dokumentacji dla programistów i nic nie pasuje.
Jak naprawić: Rozdziel źródła: ustawienie w panelu → dokumentacja użytkownika, kod i hooki → devdocs, endpoint → referencja API, błąd nie do wyjaśnienia → issues w repozytorium.
Kopiowanie sygnatury metody z artykułu zamiast z pliku źródłowego.
Jak wykryć: Funkcja przyjmuje inne argumenty niż w dokumentacji: pojawia się błąd liczby argumentów albo brak parametru, którego kod oczekuje.
Jak naprawić: Otwórz plik źródłowy w repozytorium PrestaShop/PrestaShop dla swojej wersji i skopiuj sygnaturę z kodu. Dokumentacja bywa o minorę do tyłu.
Opieranie się na wpisach z blogów i forum z lat 2015–2018.
Jak wykryć: Data publikacji jest starsza niż Twoja wersja PrestaShop, a w treści nie ma informacji, dla jakiej wersji powstał wpis.
Jak naprawić: Traktuj taki wpis jako trop, nie jako źródło prawdy. Zweryfikuj rozwiązanie w devdocs dla właściwej wersji lub bezpośrednio w kodzie.
Rejestrowanie hooka poza metodą install() i zostawianie wpisów po odinstalowaniu modułu.
Jak wykryć: Po reinstalacji modułu hook nie odpala, a w tabeli hook_module zostają osierocone wpisy po modułach, których już nie ma.
Jak naprawić: Rejestruj hook przez registerHook w install(), wyrejestrowuj w uninstall(). Po testach sprawdź Design > Positions, czy nie ma podwójnych podłączeń.
Debugowanie problemu bez sprawdzenia issues w repozytorium.
Jak wykryć: Godziny spędzone na szukaniu przyczyny błędu, który ma już otwarte zgłoszenie albo znane obejście opisane przez innych.
Jak naprawić: Przed debugowaniem wyszukaj komunikat błędu i nazwę klasy w issues repozytorium PrestaShop/PrestaShop oraz w kodzie na GitHubie.
PrestaShop dokumentacja działa dopiero wtedy, gdy wiesz, do którego z czterech źródeł sięgnąć i na jaką wersję patrzysz. Najtańsza czynność w całym procesie to sprawdzenie wersji sklepu i wersji PHP — kosztuje minutę, a oszczędza godziny debugowania. Dokumentacja bywa niekompletna w obszarze core i zaawansowanego API, więc drugim krokiem zawsze jest kod w repozytorium. Zapisz link do artykułu w konkretnej wersji przy każdym wdrożeniu — wrócisz do niego przy kolejnej poprawce.
Dokumentacja deweloperska opisuje kod: moduły, motywy, hooki, API i testy. Dokumentacja użytkownika tłumaczy panel: gdzie kliknąć, żeby zmienić ustawienie, jak dodać produkt czy metodę dostawy. Jeśli szukasz ustawienia w panelu, wejdź na devdocs PrestaShop dopiero wtedy, gdy to ustawienie wymaga kodu.
Zaloguj się do back office i sprawdź stopkę albo wejdź w Zaawansowane > Informacje. Zobaczysz tam numer wersji sklepu i wersję PHP. Dostęp do plików przydaje się dopiero wtedy, gdy panel jest zablokowany przez błąd — wtedy wersję odczytasz z pliku konfiguracyjnego.
Najczęstsze przyczyny to brak registerHook w metodzie install(), podłączenie do hooka, którego nie ma w danej wersji, oraz cache szablonów. Sprawdź Design > Positions, wyczyść cache i włącz tryb debug, żeby zobaczyć, jakie hooki faktycznie są wywoływane na stronie.
W issues repozytorium PrestaShop/PrestaShop — po komunikacie błędu i nazwie klasy. Duża część problemów to znane przypadki z obejściem opisanym przez innych. Jeśli nic nie znajdziesz, sięgnij do kodu źródłowego: on jest jedynym źródłem prawdy dla Twojej wersji.
Tylko jeśli nadal prowadzisz sklep na 1.6. Ta gałąź nie jest już rozwijana, a rozwiązania z tamtych lat — takie jak defines.inc.php czy stare ścieżki — nie mają zastosowania w 1.7 i nowszych. Przy nowym wdrożeniu nie ma powodu, żeby z niej korzystać.
Nie. Dokumentacja mówi, jak działa mechanizm, ale nie odpowiada na pytania o kolejność prac, mapowanie danych i testy. Przy analityce kluczowy jest poprawny DataLayer i zdarzenia eCommerce, a przy marketplace — ustalenie, kto jest źródłem prawdy o stanie magazynu. Praktyczne podejście opisujemy w materiałach o organizacji integracji z PrestaShop.
Jeśli wolisz, żeby ktoś przeszedł przez tę dokumentację za Ciebie i przełożył ją na działający sklep, napisz do nas — pomagamy wdrożyć i utrzymać PrestaShop. Zanim podejmiesz decyzję, zobacz, jak wygląda organizacja pracy i koszty w materiale o wdrożeniu PrestaShop.