Przejdź do treści
PrestaShop

Jak zbudować moduł PrestaShop: struktura i podstawy

2 lipca 2025 8 min czytania

Pisanie własnych modułów PrestaShop otwiera pełnię możliwości platformy. Zamiast modyfikować pliki rdzenia, co uniemożliwia aktualizacje, umieszczasz logikę w module odizolowanym od systemu. Moduł można włączyć lub wyłączyć bez ryzyka dla sklepu.

Struktura katalogu modułu

Każdy moduł mieszka w katalogu /modules/nazwa-modulu/. Minimalna struktura to plik głównej klasy modułu oraz opcjonalny config.xml z metadanymi. Klasa modułu rozszerza klasę Module z PrestaShop. W konstruktorze definiujesz nazwę, autora, wersję i kompatybilność z wersjami PS.

Metody install i uninstall

Metoda install() jest wywoływana podczas instalacji modułu. Tu rejestrujesz hooki, tworzysz tabele w bazie i zapisujesz domyślną konfigurację. Metoda uninstall() powinna cofać te operacje. Brak dobrej metody uninstall to częsty błąd przy budowie modułów.

Hooki - serce systemu modułów

Hooki to punkty w aplikacji PS, do których moduł może się podpiąć i wstrzyknąć kod lub wyświetlić HTML. Przykłady hooków:

  • displayHome - obszar na stronie głównej
  • displayProductAdditionalInfo - dodatkowe informacje na stronie produktu
  • actionOrderStatusPostUpdate - wywoływany po zmianie statusu zamówienia
  • actionValidateOrder - wywoływany po złożeniu zamówienia

Dla każdego zarejestrowanego hooka musisz stworzyć metodę o odpowiedniej nazwie, np. hookDisplayHome().

Szablony Smarty

Widoki modułu są pisane w Smarty - domyślnym silniku szablonów PS. Pliki .tpl umieszczasz w katalogu views/templates/ wewnątrz modułu. Zmienne przekazujesz z klasy PHP metodą assign na obiekcie Smarty z kontekstu PS.

Konfiguracja modułu

Ustawienia modułu przechowujesz w tabeli ps_configuration używając metod Configuration::get() i Configuration::updateValue(). Panel konfiguracyjny wyświetlasz implementując metodę getContent().

Override czy moduł

Override to nadpisanie istniejącej klasy PS własną wersją. Moduł to rozszerzenie przez hooki. Override jest silniejszy, ale łamie się przy aktualizacjach. Jeśli hook daje to czego potrzebujesz, używaj modułu. Override stosuj tylko gdy hook dla danego miejsca nie istnieje.