Hooks
Hooks bieten Plugins die Möglichkeit, an vordefinierten Stellen in die Ausführungslogik des Onlineshops einzugreifen
und ggf. übergebene Daten bzw. das Ausgabedokument zu manipulieren.
Möglich ist dies an allen Stellen im Code des Onlineshops, an denen explizit die Funktion
executeHook(int $nHook, array $args_arr)
ausgeführt wird.
Eine Liste aller verfügbaren Hooks finden Sie im Kapitel "Liste aller Hooks".
Wie Sie dem Onlineshop mitteilen, welche Hooks Ihr Plugin nutzen möchte, erfahren Sie im Kapitel zur info.xml
im Abschnitt "Plugin-Hooks".
Beispiel:
Ausführen eines Hooks vor dem Speichern eines News-Kommentars, in der Datenbank:
executeHook(\HOOK_NEWS_PAGE_NEWSKOMMENTAR_EINTRAGEN, ['comment' => &$oNewsKommentar]);
Auf diesen Hook registrierte Plugins können in der entsprechenden Hook-Datei das Array $args_arr
nutzen
und ggf. modifizieren.
Nutzt ein Plugin z. B. den oben genannten Hook HOOK_NEWS_PAGE_NEWSKOMMENTAR_EINTRAGEN
(ID 34), lässt sich
der dort übergebene Kommentar verändern.
<?php
if (!empty($args_arr['comment'])) {
$args_arr['comment'] .= '<br>Dieser Text wird an nicht-leere Kommentare angehängt!';
}
Ab JTL-Shop 5.x existiert eine neue Alternative zu den bekannten Hooks in JTL-Shop - der EventDispatcher. Wie Sie Gebrauch von diesem neuen Feature machen, finden Sie im Kapitel "Bootstrapping" unter "Der EventDispatcher".
Manipulation des DOM
Einer der häufigsten Anwendungsfälle ist, eigenen HTML-Code in das Ausgabedokument zu schreiben.
Hierzu dient der Hook HOOK_SMARTY_OUTPUTFILTER
(ID 140). Dort kann via PHPQuery beliebiger Inhalt in den DOM
eingefügt werden.
In einem trivialen Beispiel könnte ein Plugin den Inhalt eines Templates via Smarty rendern und
an den Body des HTML-Dokuments anhängen:
<?php
$template = $plugin->getPaths()->getFrontendPath() . 'templates/' . 'example.tpl';
pq('body')->append($smarty->fetch($template));
Eine Übersicht über PHPQuery finden Sie in dessen Dokumentation.