Zrozumienie priorytetów hooków PrestaShop i kolejności wykonania
Czym są hooki w PrestaShop?
Hooki to mechanizm rozszerzeń PrestaShop — punkty w kodzie, gdzie moduły mogą się podpinać, aby dodawać funkcjonalność, modyfikować zachowanie lub wstrzykiwać treść na strony.
Dwa typy hooków
Hooki wyświetlania
Hooki wyświetlania (z prefiksem display) wstrzykują treść HTML na stronę. Przykłady -
displayHeader— w sekcji<head>displayHome— obszar treści strony głównejdisplayFooter— stopkadisplayProductAdditionalInfo— dodatkowe informacje o produkcie
Hooki akcji
Hooki akcji (z prefiksem action) wykonują logikę bez zwracania HTML. Przykłady -
actionCartSave— gdy koszyk jest zapisywanyactionOrderStatusUpdate— przy zmianie statusu zamówieniaactionValidateOrder— przy walidacji zamówienia
Jak działa kolejność wykonania
PrestaShop sprawdza tabelę ps_hook_module, aby znaleźć moduły zarejestrowane na hooku. Moduły są wykonywane w kolejności kolumny position.
SELECT hm.position, m.name AS module_name, h.name AS hook_name
FROM ps_hook_module hm
JOIN ps_module m ON hm.id_module = m.id_module
JOIN ps_hook h ON hm.id_hook = h.id_hook
WHERE h.name = 'displayHeader'
ORDER BY hm.position ASC;Dlaczego pozycja ma znaczenie
Dla hooków wyświetlania pozycja określa kolejność wizualną. Dla hooków akcji pozycja określa kolejność przetwarzania.
Rejestrowanie hooków w module
public function install()
{
return parent::install()
&& $this->registerHook('displayHeader')
&& $this->registerHook('displayProductAdditionalInfo')
&& $this->registerHook('actionCartSave');
}
public function hookDisplayHeader($params)
{
$this->context->controller->addCSS($this->_path . 'views/css/style.css');
}
public function hookActionCartSave($params)
{
$cart = $params['cart'];
$this->logCartActivity($cart);
}Zarządzanie pozycjami hooków w Back Office
Przejdź do Wygląd > Pozycje, aby zobaczyć wszystkie hooki i przypisane moduły. Możesz zmieniać kolejność przez przeciąganie lub przesadzanie modułów.
Typowe problemy z wykonaniem hooków
Konflikty modułów
Gdy dwa moduły na tym samym hooku wyświetlania produkują zduplikowaną treść, zmień ich kolejność lub odpnij problematyczny moduł.
Wpływ na wydajność
SELECT h.name, COUNT(*) AS module_count
FROM ps_hook_module hm
JOIN ps_hook h ON hm.id_hook = h.id_hook
GROUP BY h.name
ORDER BY module_count DESC
LIMIT 20;Ważne hooki dla właścicieli sklepów
- Checkout - displayPayment, paymentOptions, actionValidateOrder
- SEO - displayHeader, filterHtmlContent
- Wyświetlanie produktu - displayProductAdditionalInfo, displayAfterProductThumbs
Czy ta odpowiedź była pomocna?
Masz jeszcze pytania?
Can't find what you're looking for? Send us your question and we'll get back to you quickly.