Zrozumienie priorytetów hooków PrestaShop i kolejności wykonania

388 wyświetleń

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łównej
  • displayFooter — stopka
  • displayProductAdditionalInfo — dodatkowe informacje o produkcie

Hooki akcji

Hooki akcji (z prefiksem action) wykonują logikę bez zwracania HTML. Przykłady -

  • actionCartSave — gdy koszyk jest zapisywany
  • actionOrderStatusUpdate — przy zmianie statusu zamówienia
  • actionValidateOrder — 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.

Loading...
Back to top