Opanowanie hookow PrestaShop: przewodnik dla deweloperow dla wersji 1.7, 8.x i 9.x

Hooki to sposób, w jaki moduły wchodzą w interakcję z PrestaShop bez modyfikowania plików rdzenia. Zrozumienie, którego hooka użyć, kiedy się uruchamia i jakie dane dostarcza, to wiedza niezbędna dla każdego programisty PrestaShop. Ta referencja obejmuje hooki, których będziesz używać najczęściej.

Hooki wyświetlania vs. hooki akcji

PrestaShop ma dwa typy hooków:

  • Hooki wyświetlania (prefiks: display) — renderują treść w określonych miejscach na stronie. Twoja metoda hooka zwraca HTML. Przykład: displayHeader, displayProductAdditionalInfo
  • Hooki akcji (prefiks: action) — uruchamiane, gdy coś się dzieje. Twoja metoda hooka wykonuje logikę, ale nie zwraca niczego widocznego. Przykład: actionCartSave, actionOrderStatusPostUpdate

Hooki wyświetlania front office

Struktura strony

  • displayHeader — wewnątrz <head>. Dodawaj CSS, meta tagi, odniesienia do JS. Uruchamia się na każdej stronie frontowej.
  • displayTop / displayNavFullWidth — obszar górnej nawigacji. Banery, ogłoszenia.
  • displayHome — obszar treści strony głównej. Wyróżnione produkty, slidery, promocje.
  • displayFooter / displayFooterBefore — treść stopki. Zapis na newsletter, znaki zaufania.

Strona produktu

  • displayProductAdditionalInfo — pod przyciskiem dodaj do koszyka. Szacowany czas dostawy, ostrzeżenia o stanach.
  • displayProductExtraContent — dodaje zakładki do strony produktu. Zwraca obiekt PrestaShop\PrestaShop\Core\Product\ProductExtraContent.
  • displayAfterProductThumbs — pod zdjęciami produktu. Dodatkowe media, widoki 360 stopni.
  • displayProductListReviews — w listach produktów, pod każdym produktem. Oceny gwiazdkowe.

Koszyk i kasa

  • displayShoppingCartFooter — pod tabelą koszyka. Sugestie cross-sell.
  • displayPaymentReturn — strona potwierdzenia zamówienia. Wiadomości z podziękowaniem, informacje o śledzeniu.
  • displayOrderConfirmation — również na potwierdzeniu zamówienia. Skrypty śledzenia analityki.

Kluczowe hooki akcji

Zdarzenia koszyka

  • actionCartSave — uruchamia się po każdej modyfikacji koszyka. Używaj do sprawdzania stanów w czasie rzeczywistym lub przeliczania cen.
  • actionCartUpdateQuantityBefore — przed zmianami ilości. Pozwala walidować lub blokować zmianę.

Zdarzenia zamówień

  • actionValidateOrder — uruchamia się przy tworzeniu zamówienia. Zawiera pełny obiekt zamówienia, koszyk, klienta i walutę.
  • actionOrderStatusPostUpdate — po zmianie statusu zamówienia. Wyzwalaj powiadomienia, aktualizuj systemy zewnętrzne, koryguj stany.
  • actionPaymentConfirmation — gdy płatność zostanie potwierdzona. Różni się od walidacji zamówienia dla metod płatności z odroczeniem.

Zdarzenia klientów

  • actionCustomerAccountAdd — rejestracja nowego klienta. Synchronizacja z CRM, wyzwolenie powitalnego e-maila.
  • actionAuthentication — logowanie klienta. Aktualizacja ostatniego logowania, synchronizacja danych sesji.

Zdarzenia produktów

  • actionProductSave — produkt utworzony lub zaktualizowany. Synchronizacja z feedami, aktualizacja cache.
  • actionProductDelete — produkt usunięty. Sprzątanie powiązanych danych modułu.
  • actionUpdateQuantity — zmiany stanów magazynowych. Wyzwalanie alertów o niskim stanie, aktualizacja dostępności.

Hooki dynamiczne (PS 1.7.7+)

PrestaShop generuje hooki dynamicznie na podstawie encji i akcji:

action{Entity}{Action}Before
action{Entity}{Action}After

Na przykład: actionProductFormBuilderModifier pozwala dodawać pola do formularza edycji produktu w panelu administracyjnym.

Hook setMedia

actionFrontControllerSetMedia to właściwe miejsce do rejestracji plików CSS i JavaScript. W odróżnieniu od displayHeader, uruchamia się przed renderowaniem strony i dostarcza kontekst kontrolera: Dla mniej technicznego przeglądu przeczytaj nasz przewodnik jak moduły komunikują się ze sklepem przez hooki. Moduł wydajności pomoże zidentyfikować wolne hooki.

public function hookActionFrontControllerSetMedia($params)
{
    $controller = $this->context->controller;
    if ($controller instanceof ProductController) {
        $this->context->controller->registerStylesheet(
            'my-module-css',
            'modules/' . $this->name . '/views/css/product.css'
        );
    }
}

Typowe pułapki

  • Ciężkie zapytania bazodanowe w hookach wyświetlania — hooki wyświetlania uruchamiają się przy każdym załadowaniu strony. Cache'uj swoje zapytania lub używaj lazy loading.
  • Rejestrowanie hooków, których nie używasz — każdy zarejestrowany hook dodaje narzut, nawet jeśli metoda nic nie zwraca.
  • Zapomnienie o registerHook() w install() — hooki muszą być zarejestrowane podczas instalacji modułu. Brak tego to przyczyna nr 1, dlaczego hooki nie działają.
  • Brak sprawdzania klasy kontrolera — jeśli Twój hook powinien działać tylko na stronach produktów, sprawdź instanceof ProductController przed wykonaniem pracy.

Hooki są potężne, ale wymagają dyscypliny. Używaj odpowiedniego hooka do odpowiedniego zadania, utrzymuj swoje metody hooków szybkimi i zawsze testuj z włączonym cache, aby wcześnie wyłapać problemy z wydajnością. Nasz moduł Checkout Revolution wykorzystuje wiele z tych hooków do stworzenia zoptymalizowanego procesu zakupowego.

Udostępnij ten wpis:
David Miller

David Miller

Ponad dekada praktycznego doświadczenia z PrestaShop. David tworzy wydajne moduły e-commerce skupione na SEO, optymalizacji zamówień i zarządzaniu sklepem. Pasjonat czystego kodu i mierzalnych...

Spodobał Ci się ten artykuł?

Otrzymuj nasze najnowsze porady, przewodniki i aktualizacje modułów prosto na swoją skrzynkę.

Komentarze (2)

D
David Chen 2026-02-14
The section on displayProductAdditionalInfo was really useful. We were hooking into the wrong place for our custom fields module. Switched to the recommended hook and it works perfectly now.
Odpowiedz
A
Anna Petrova 2026-02-14
This hooks reference is exactly what I needed. Bookmarked! I have been searching for a comprehensive list that covers all three PS versions in one place.
Odpowiedz

Zostaw komentarz

Ładowanie...
Do góry