PrestaShop Hook-Prioritäten und Ausführungsreihenfolge verstehen
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>-BereichdisplayHome— Startseiten-InhaltsbereichdisplayFooter— FußbereichdisplayProductAdditionalInfo— 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 wirdactionOrderStatusUpdate— bei Statusänderung einer BestellungactionProductAdd— wenn ein Produkt erstellt wirdactionValidateOrder— 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.