Hooki to sposob, w jaki moduly wchodza w interakcje z PrestaShop bez modyfikowania plikow rdzenia. Zrozumienie, ktorego hooka uzyc, kiedy sie uruchamia i jakie dane dostarcza, jest niezbedna wiedza dla kazdego dewelopera PrestaShop. Ten przewodnik obejmuje hooki, z ktorych bedziesz korzystac najczesciej.
Display Hooks vs. Action Hooks
PrestaShop ma dwa typy hookow:
- Display Hooks (prefiks:
display) – renderuja zawartosc w okreslonych pozycjach na stronie. Twoja metoda hooka zwraca HTML. Przyklad:displayHeader,displayProductAdditionalInfo - Action Hooks (prefiks:
action) – uruchamiaja sie, gdy cos sie dzieje. Twoja metoda hooka wykonuje logike, ale nie zwraca niczego widocznego. Przyklad:actionCartSave,actionOrderStatusPostUpdate
Front Office Display Hooks
Struktura strony
displayHeader– wewnatrz<head>. Dodawanie CSS, meta tagow, referencji JS. Uruchamia sie na kazdej stronie front.displayTop/displayNavFullWidth– gorny obszar nawigacji. Bannery, ogloszenia.displayHome– obszar tresci strony glownej. Wyroznione produkty, slidery, promocje.displayFooter/displayFooterBefore– tresc stopki. Zapis do newslettera, odznaki zaufania.
Strona produktu
displayProductAdditionalInfo– ponizej przycisku dodania do koszyka. Szacunki dostawy, ostrzezenia o stanie magazynowym.displayProductExtraContent– dodaje zakladki do strony produktu. Zwraca obiektPrestaShop\PrestaShop\Core\Product\ProductExtraContent.displayAfterProductThumbs– ponizej zdjec produktu. Dodatkowe media, widoki 360 stopni.displayProductListReviews– w listach produktow, pod kazdym produktem. Oceny gwiazdkowe.
Koszyk i Checkout
displayShoppingCartFooter– ponizej tabeli koszyka. Sugestie cross-sell.displayPaymentReturn– strona potwierdzenia zamowienia. Wiadomosci podziekowania, informacje o sledzeniu.displayOrderConfirmation– rowniez na potwierdzeniu zamowienia. Skrypty sledzenia analytics.
Kluczowe Action Hooks
Zdarzenia koszyka
actionCartSave– uruchamia sie po kazdej modyfikacji koszyka. Uzywaj do sprawdzania stanu magazynowego w czasie rzeczywistym lub przeliczania cen.actionCartUpdateQuantityBefore– przed zmianami ilosci. Pozwala na walidacje lub zablokowanie zmiany.
Zdarzenia zamowien
actionValidateOrder– uruchamia sie przy tworzeniu zamowienia. Zawiera pelny obiekt zamowienia, koszyk, klienta i walute.actionOrderStatusPostUpdate– po zmianie statusu zamowienia. Wyzwalanie powiadomien, aktualizacja systemow zewnetrznych, korekta stanow magazynowych.actionPaymentConfirmation– gdy platnosc jest potwierdzona. Rozni sie od walidacji zamowienia dla odroczonych metod platnosci.
Zdarzenia klienta
actionCustomerAccountAdd– nowa rejestracja klienta. Synchronizacja z CRM, wyzwolenie emaila powitalnego.actionAuthentication– klient sie loguje. Aktualizacja ostatniego logowania, synchronizacja danych sesji.
Zdarzenia produktu
actionProductSave– produkt utworzony lub zaktualizowany. Synchronizacja do feedow, aktualizacja cache.actionProductDelete– produkt usuniety. Czyszczenie powiazanych danych modulu.actionUpdateQuantity– zmiany poziomu stanow magazynowych. Wyzwalanie alertow niskiego stanu, aktualizacja dostepnosci.
Dynamic Hooks (PS 1.7.7+)
PrestaShop generuje hooki dynamicznie na podstawie encji i akcji:
action{Entity}{Action}Before
action{Entity}{Action}After
Na przyklad: actionProductFormBuilderModifier pozwala dodawac pola do formularza edycji produktu w panelu admin.
Hook setMedia
actionFrontControllerSetMedia to wlasciwe miejsce do rejestrowania plikow CSS i JavaScript. W przeciwienstwie do displayHeader, uruchamia sie przed renderowaniem strony i dostarcza kontekst controllera:
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 pulapki
- Ciezkie zapytania bazodanowe w Display Hooks – Display Hooks uruchamiaja sie przy kazdym ladowaniu strony. Cachuj swoje zapytania lub uzywaj leniwego ladowania.
- Rejestrowanie hookow, ktorych nie uzywasz – kazdy zarejestrowany hook dodaje narzut, nawet jesli metoda nic nie zwraca.
- Zapominanie o
registerHook()winstall()– hooki musza byc rejestrowane podczas instalacji modulu. Zapomnienie o tym to powod nr 1, dlaczego hooki sie nie uruchamiaja. - Niesprawdzanie klasy controllera – jesli Twoj hook powinien dzialac tylko na stronach produktu, sprawdz
instanceof ProductControllerzanim zaczniesz prace.
Hooki sa potezne, ale wymagaja dyscypliny. Uzywaj wlasciwego hooka do wlasciwego zadania, utrzymuj swoje metody hookow szybkimi i zawsze testuj z wlaczonym cache, aby wczesnie wylapac problemy z wydajnoscia.
Komentarze (2)
Zostaw komentarz