PrestaShop Hooks meistern: Entwickler-Referenz für 1.7, 8.x und 9.x
Hooks sind die Art und Weise, wie Module mit PrestaShop interagieren, ohne Core-Dateien zu verändern. Zu verstehen, welchen Hook man verwenden sollte, wann er ausgelöst wird und welche Daten er bereitstellt, ist essenzielles Wissen für jeden PrestaShop-Entwickler. Diese Referenz behandelt die Hooks, die Sie am häufigsten verwenden werden.
Display Hooks vs. Action Hooks
PrestaShop hat zwei Arten von Hooks:
- Display Hooks (Präfix:
display) – rendern Inhalte an bestimmten Positionen auf der Seite. Ihre Hook-Methode gibt HTML zurück. Beispiel:displayHeader,displayProductAdditionalInfo - Action Hooks (Präfix:
action) – werden ausgelöst, wenn etwas passiert. Ihre Hook-Methode führt Logik aus, gibt aber nichts Sichtbares zurück. Beispiel:actionCartSave,actionOrderStatusPostUpdate
Front Office Display Hooks
Seitenstruktur
displayHeader– innerhalb von<head>. CSS, Meta-Tags, JS-Referenzen hinzufügen. Wird auf jeder Front-Seite ausgelöst.displayTop/displayNavFullWidth– oberer Navigationsbereich. Banner, Ankündigungen.displayHome– Inhaltsbereich der Startseite. Hervorgehobene Produkte, Slider, Aktionen.displayFooter/displayFooterBefore– Footer-Inhalte. Newsletter-Anmeldung, Vertraünssiegel.
Produktseite
displayProductAdditionalInfo– unterhalb des Warenkorb-Buttons. Lieferschätzungen, Bestandswarnungen.displayProductExtraContent– fügt Tabs zur Produktseite hinzu. Gibt einPrestaShop\PrestaShop\Core\Product\ProductExtraContent-Objekt zurück.displayAfterProductThumbs– unterhalb der Produktbilder. Zusätzliche Medien, 360-Grad-Ansichten.displayProductListReviews– in Produktlisten, unter jedem Produkt. Sternebewertungen.
Warenkorb und Checkout
displayShoppingCartFooter– unterhalb der Warenkorb-Tabelle. Cross-Sell-Vorschläge.displayPaymentReturn– Bestellbestätigungsseite. Dankesnachrichten, Tracking-Informationen.displayOrderConfirmation– ebenfalls auf der Bestellbestätigung. Analytics-Tracking-Skripte.
Wichtige Action Hooks
Warenkorb-Events
actionCartSave– wird nach jeder Warenkorb-Änderung ausgelöst. Für Echtzeit-Bestandsprüfungen oder Preisneuberechnungen verwenden.actionCartUpdateQuantityBefore– vor Mengenänderungen. Ermöglicht Validierung oder Blockierung der Änderung.
Bestell-Events
actionValidateOrder– wird bei Erstellung einer Bestellung ausgelöst. Enthält das vollständige Bestellobjekt, Warenkorb, Kunde und Währung.actionOrderStatusPostUpdate– nach einer Bestellstatus-Änderung. Benachrichtigungen auslösen, externe Systeme aktualisieren, Bestand anpassen.actionPaymentConfirmation– wenn die Zahlung bestätigt wird. Unterscheidet sich von der Bestellvalidierung bei aufgeschobenen Zahlungsmethoden.
Kunden-Events
actionCustomerAccountAdd– neue Kundenregistrierung. Sync zum CRM, Willkommens-E-Mail auslösen.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. Zugehörige Moduldaten bereinigen.actionUpdateQuantity– Bestandsänderungen. Niedrigbestand-Alarme auslösen, Verfügbarkeit 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 ermöglicht das Hinzufügen 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 ausgelöst und stellt den Controller-Kontext bereit: Für eine weniger technische Übersicht lesen Sie unseren Leitfaden wie Module über Hooks mit Ihrem Shop kommunizieren. Ein Performance-Modul kann langsame Hooks identifizieren.
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'
);
}
}
Häufige Fallstricke
- Schwere Datenbankabfragen in Display Hooks – Display Hooks werden bei jedem Seitenaufruf ausgelöst. 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 zurückgibt.
registerHook()ininstall()vergessen – Hooks müssen während der Modulinstallation registriert werden. Dies zu vergessen ist der Grund Nr. 1, warum Hooks nicht ausgelöst werden.- Controller-Klasse nicht prüfen – wenn Ihr Hook nur auf Produktseiten laufen soll, prüfen Sie
instanceof ProductControllerbevor Sie arbeiten.
Hooks sind mächtig, erfordern aber Disziplin. Verwenden Sie den richtigen Hook für die richtige Aufgabe, halten Sie Ihre Hook-Methoden schnell und testen Sie immer mit aktiviertem Cache, um Performance-Probleme früh zu erkennen. Unser Checkout Revolution Modul nutzt viele dieser Hooks für ein optimiertes Checkout-Erlebnis.
Kommentare (2)
Einen Kommentar hinterlassen