PrestaShop Hook-Prioritäten und Ausführungsreihenfolge verstehen

385 Aufrufe

Was sind Hooks in PrestaShop?

Hooks sind PrestaShops Erweiterungsmechanismus — die Punkte im Code, an denen Module sich anhängen können, um Funktionalität hinzuzufügen, Verhalten zu ändern oder Inhalte in Seiten einzufügen. Stellen Sie sich Hooks als benannte Verbindungspunkte vor, die über die gesamte PrestaShop-Codebasis verteilt sind.

Zwei Arten von Hooks

Display-Hooks

Display-Hooks (mit Präfix display) injizieren HTML-Inhalte in die Seite. Beispiele -

  • displayHeader — im HTML-<head>-Bereich
  • displayHome — Startseiten-Inhaltsbereich
  • displayFooter — Fußbereich
  • displayProductAdditionalInfo — Zusätzliche Produktinformationen

Action-Hooks

Action-Hooks (mit Präfix action) führen Logik aus, ohne HTML zurückzugeben. Beispiele -

  • actionCartSave — wenn ein Warenkorb gespeichert wird
  • actionOrderStatusUpdate — bei Statusänderung einer Bestellung
  • actionProductAdd — wenn ein Produkt erstellt wird
  • actionValidateOrder — bei Bestellvalidierung

Wie die Ausführungsreihenfolge funktioniert

PrestaShop schaut in der ps_hook_module-Tabelle nach, welche Module für einen Hook registriert sind. Module werden in der Reihenfolge der position-Spalte ausgeführt.

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;

Warum Position wichtig ist

Bei Display-Hooks bestimmt die Position die visuelle Reihenfolge. Bei Action-Hooks bestimmt die Position die Verarbeitungsreihenfolge — kritisch wenn Module dieselben Daten modifizieren.

Hooks in Ihrem Modul registrieren

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);
}

Hook-Positionen im Back Office verwalten

Navigieren Sie zu Design > Positionen, um alle Hooks und ihre zugeordneten Module zu sehen. Hier können Sie Module per Drag-and-Drop umordnen oder transplantieren.

Häufige Hook-Ausführungsprobleme

Modulkonflikte durch gemeinsame Hooks

Wenn zwei Module auf demselben Display-Hook doppelte Inhalte erzeugen, ordnen Sie sie um oder entfernen Sie das störende Modul vom Hook.

CSS/JS-Ladereihenfolge

Module, die CSS über displayHeader laden, laden ihre Styles in der Hook-Positions-Reihenfolge.

Performance-Auswirkung

Jedes Modul auf displayHeader wird bei jedem Seitenaufruf ausgeführt.

-- Module pro Hook zählen für Performance-Analyse
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;

Wichtige Hooks für Shopbetreiber

  • Checkout - displayPayment, paymentOptions, actionValidateOrder
  • SEO - displayHeader, filterHtmlContent, actionDispatcher
  • Produktanzeige - displayProductAdditionalInfo, displayAfterProductThumbs

War diese Antwort hilfreich?

Haben Sie noch Fragen?

Can't find what you're looking for? Send us your question and we'll get back to you quickly.

Lade ...
Nach oben