Hooks sind die Art und Weise, wie Module mit PrestaShop interagieren, ohne Core-Dateien zu veraendern. Zu verstehen, welchen Hook man verwenden sollte, wann er ausgeloest wird und welche Daten er bereitstellt, ist essenzielles Wissen fuer jeden PrestaShop-Entwickler. Diese Referenz behandelt die Hooks, die Sie am haeufigsten verwenden werden.
Display Hooks vs. Action Hooks
PrestaShop hat zwei Arten von Hooks:
- Display Hooks (Praefix:
display) – rendern Inhalte an bestimmten Positionen auf der Seite. Ihre Hook-Methode gibt HTML zurueck. Beispiel:displayHeader,displayProductAdditionalInfo - Action Hooks (Praefix:
action) – werden ausgeloest, wenn etwas passiert. Ihre Hook-Methode fuehrt Logik aus, gibt aber nichts Sichtbares zurueck. Beispiel:actionCartSave,actionOrderStatusPostUpdate
Front Office Display Hooks
Seitenstruktur
displayHeader– innerhalb von<head>. CSS, Meta-Tags, JS-Referenzen hinzufuegen. Wird auf jeder Front-Seite ausgeloest.displayTop/displayNavFullWidth– oberer Navigationsbereich. Banner, Ankuendigungen.displayHome– Inhaltsbereich der Startseite. Hervorgehobene Produkte, Slider, Aktionen.displayFooter/displayFooterBefore– Footer-Inhalte. Newsletter-Anmeldung, Vertrauenssiegel.
Produktseite
displayProductAdditionalInfo– unterhalb des Warenkorb-Buttons. Lieferschaetzungen, Bestandswarnungen.displayProductExtraContent– fuegt Tabs zur Produktseite hinzu. Gibt einPrestaShop\PrestaShop\Core\Product\ProductExtraContent-Objekt zurueck.displayAfterProductThumbs– unterhalb der Produktbilder. Zusaetzliche Medien, 360-Grad-Ansichten.displayProductListReviews– in Produktlisten, unter jedem Produkt. Sternebewertungen.
Warenkorb und Checkout
displayShoppingCartFooter– unterhalb der Warenkorb-Tabelle. Cross-Sell-Vorschlaege.displayPaymentReturn– Bestellbestaetigungsseite. Dankesnachrichten, Tracking-Informationen.displayOrderConfirmation– ebenfalls auf der Bestellbestaetigung. Analytics-Tracking-Skripte.
Wichtige Action Hooks
Warenkorb-Events
actionCartSave– wird nach jeder Warenkorb-Aenderung ausgeloest. Fuer Echtzeit-Bestandspruefungen oder Preisneuberechnungen verwenden.actionCartUpdateQuantityBefore– vor Mengenänderungen. Ermoeglicht Validierung oder Blockierung der Aenderung.
Bestell-Events
actionValidateOrder– wird bei Erstellung einer Bestellung ausgeloest. Enthaelt das vollstaendige Bestellobjekt, Warenkorb, Kunde und Waehrung.actionOrderStatusPostUpdate– nach einer Bestellstatus-Aenderung. Benachrichtigungen ausloesen, externe Systeme aktualisieren, Bestand anpassen.actionPaymentConfirmation– wenn die Zahlung bestaetigt wird. Unterscheidet sich von der Bestellvalidierung bei aufgeschobenen Zahlungsmethoden.
Kunden-Events
actionCustomerAccountAdd– neue Kundenregistrierung. Sync zum CRM, Willkommens-E-Mail ausloesen.actionAuthentication– Kunde meldet sich an. Letzte Anmeldung aktualisieren, Sitzungsdaten synchronisieren.
Produkt-Events
actionProductSave– Produkt erstellt oder aktualisiert. Zu Feeds synchronisieren, Caches aktualisieren.actionProductDelete– Produkt entfernt. Zugehoerige Moduldaten bereinigen.actionUpdateQuantity– Bestandsaenderungen. Niedrigbestand-Alarme ausloesen, Verfuegbarkeit aktualisieren.
Dynamic Hooks (PS 1.7.7+)
PrestaShop generiert Hooks dynamisch basierend auf Entity und Action:
action{Entity}{Action}Before
action{Entity}{Action}After
Zum Beispiel: actionProductFormBuilderModifier ermoeglicht das Hinzufuegen von Feldern zum Produktbearbeitungsformular im Admin-Panel.
Der setMedia Hook
actionFrontControllerSetMedia ist der richtige Ort, um CSS- und JavaScript-Dateien zu registrieren. Im Gegensatz zu displayHeader wird er vor dem Rendern der Seite ausgeloest und stellt den Controller-Kontext bereit:
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'
);
}
}
Haeufige Fallstricke
- Schwere Datenbankabfragen in Display Hooks – Display Hooks werden bei jedem Seitenaufruf ausgeloest. Cachen Sie Ihre Abfragen oder verwenden Sie Lazy Loading.
- Hooks registrieren, die man nicht nutzt – jeder registrierte Hook verursacht Overhead, selbst wenn die Methode nichts zurueckgibt.
registerHook()ininstall()vergessen – Hooks muessen waehrend der Modulinstallation registriert werden. Dies zu vergessen ist der Grund Nr. 1, warum Hooks nicht ausgeloest werden.- Controller-Klasse nicht pruefen – wenn Ihr Hook nur auf Produktseiten laufen soll, pruefen Sie
instanceof ProductControllerbevor Sie arbeiten.
Hooks sind maechtig, erfordern aber Disziplin. Verwenden Sie den richtigen Hook fuer die richtige Aufgabe, halten Sie Ihre Hook-Methoden schnell und testen Sie immer mit aktiviertem Cache, um Performance-Probleme frueh zu erkennen.
Kommentare (2)
Kommentar hinterlassen