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łównejdisplayProductAdditionalInfo- dodatkowe informacje na stronie produktuactionOrderStatusPostUpdate- wywoływany po zmianie statusu zamówieniaactionValidateOrder- 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.