Wenn Du Deinen JTL-Shop individuell erweitern willst, ohne den Core-Code zu verändern, kommst Du an einem Thema nicht vorbei: Hooks. Sie sind ein zentrales Werkzeug im Plugin-System von JTL und bieten Dir die Möglichkeit, gezielt in Prozesse einzugreifen oder Inhalte zu verändern – genau dort, wo es notwendig ist. In diesem Artikel erfährst Du, was es mit JTL Hooks auf sich hat, wie sie funktionieren und welche Rolle insbesondere der Hook 140 sowie das Zusammenspiel mit Smarty im JTL-Shop 4 spielt.
Ob Du nun ein einfaches Plugin schreiben oder tief in die Shoplogik eingreifen willst: Mit Hooks bist Du in der Lage, Deine Ideen sauber und update-sicher umzusetzen. Und genau darum lohnt sich ein genauerer Blick auf dieses Thema.
Ganz einfach gesagt: Hooks sind definierte Stellen im Code von JTL-Shop, an denen Du eigenes PHP (oder auch JavaScript bzw. Smarty) einhängen kannst, ohne die ursprünglichen Dateien des Shops zu verändern. Das Prinzip dahinter ist aus der Plugin-Entwicklung vieler Systeme bekannt: Der Shop ruft an bestimmten Punkten alle registrierten Plugins auf, die an diesem Punkt eingreifen wollen.
Ein Beispiel: Wenn Du nach dem Laden des Warenkorbs eigene Funktionen ausführen willst – z. B. ein Zusatzprodukt anzeigen oder einen Hinweistext ausgeben –, kannst Du das über einen passenden Hook tun. Der große Vorteil: Dein Plugin bleibt unabhängig von der Hauptsoftware. Updates des Shops überschreiben Deinen Code nicht, und Du arbeitest nach den Regeln des Systems.
Ein klassischer JTL-Hook besteht aus drei Bausteinen:
140
. Diese ID gibt an, an welcher Stelle im Shop-Code der Hook ausgelöst wird.Das Ganze passiert entweder auf PHP-Ebene oder – je nach Hook – direkt im Template via JTL Smarty. Letzteres ist besonders spannend, wenn Du visuelle Änderungen im Frontend realisieren willst.
Hier mal ein einfaches Beispiel in einem Plugin:
JTL setzt im Frontend auf die Template-Engine Smarty. Das bedeutet: Viele Inhalte, die der Kunde sieht, durchlaufen vor der Ausgabe eine Verarbeitung durch Smarty. Und genau da wird es interessant für Dich als Entwickler: Mit einem Hook kannst Du in diesen Prozess eingreifen – zum Beispiel, um Texte dynamisch zu verändern, HTML-Blöcke hinzuzufügen oder Platzhalter zu ersetzen.
Ein besonders mächtiger Anwendungsfall ist das Einfügen eines Smarty Outputfilters. Dabei handelt es sich um eine Funktion, die das komplette HTML nach der Generierung nochmals durchläuft und verändert. Du kannst damit z. B. bestimmte Begriffe durch Icons ersetzen oder personalisierte Hinweise einbauen. Die Registrierung eines solchen Filters geschieht typischerweise über Hook 140 – also genau an der Stelle, bevor der Output an den Browser geht.
Ein einfaches Beispiel für so einen Filter:
Hook 140 ist einer der bekanntesten und vielseitigsten Hooks in JTL-Shop. Er wird unmittelbar vor der Ausgabe der Seite ausgelöst – also an dem Punkt, wo alle Inhalte bereits zusammengestellt sind. Das macht ihn perfekt für:
Da zu diesem Zeitpunkt das komplette Smarty-Template durchlaufen wurde, hast Du über den Outputfilter Zugriff auf alles, was dem Nutzer angezeigt wird.
Aber Vorsicht: Die Arbeit mit Outputfiltern kann performanceintensiv sein, insbesondere wenn große Textmengen verarbeitet oder viele Ersetzungen durchgeführt werden. Hier lohnt es sich, gezielt und effizient zu arbeiten.
Gerade wenn Du ein eigenes Plugin planst, willst Du sicher wissen: An welchen Stellen kann ich überhaupt einhaken? JTL stellt dafür eine umfangreiche Hook-Liste zur Verfügung – mit über 200 Hooks, die verschiedene Events im Shop abdecken:
Die Hooks sind nach Bereichen sortiert, und Du findest für fast jede Situation den passenden Einstiegspunkt. Besonders im JTL-Shop 4 bietet das eine solide Grundlage für die Entwicklung individualisierter Features.
Du weißt nun, was JTL Hooks sind und wie Du sie theoretisch nutzt. Aber wie sieht das Ganze in der Praxis aus? Im zweiten Teil werfen wir einen Blick auf ein einfaches Plugin-Beispiel, das zeigt, wie Hooks in einem echten Projekt zum Einsatz kommen. Außerdem bekommst Du wertvolle Hinweise für den Umgang mit Hook IDs, die Integration von Smarty und sinnvolle Debugging-Strategien.
Angenommen, Du möchtest am Ende jeder Produktseite einen Hinweistext ausgeben – zum Beispiel, dass die Lieferung CO₂-neutral erfolgt. Eine klassische Aufgabe für einen Smarty Outputfilter in Kombination mit Hook 140.
Hier ein vereinfachter Aufbau für Dein Plugin:
info.xml
anlegen mit grundlegenden Angabenplugin.php
schreiben, in der Du Deinen Hook registrierstBeispiel: plugin.php
Was passiert hier genau?
hook140()
kurz vor dem Seiten-Output auf.</body>
Deinen Hinweis ein.Das Beispiel ist bewusst einfach gehalten, lässt sich aber problemlos erweitern: Du könntest prüfen, ob eine bestimmte Seite geladen wurde, Inhalte aus der Datenbank einbinden oder sogar auf Session-Daten reagieren.
Bei über 200 verfügbaren Hooks kann es schnell unübersichtlich werden. Hier ein paar Tipps, wie Du den richtigen Hook findest und effizient arbeitest:
Logger::debug()
oder schreibe einen Eintrag in eine eigene Datei.getPageType()
, ob Du Dich auf der Produktseite befindest.Nicht jeder Eingriff erfordert einen Outputfilter. Oft reicht es, Variablen an Smarty zu übergeben und im Template gezielt einzubinden. Auch das kannst Du über Hooks erreichen, etwa durch hook_include_inc
.
Beispiel: Du möchtest ein bestimmtes Label über dem Preis anzeigen, wenn ein Produkt in einer speziellen Kategorie liegt.
Im Template (productdetails.tpl
) kannst Du dann einfach prüfen:
So arbeitest Du performant, wartbar und gezielt mit den Möglichkeiten von JTL Smarty – ganz ohne aufwendige Stringmanipulationen.
Gerade wenn Du tiefer in die Logik des Shops eingreifst, ist sauberes Debugging das A und O. Hier ein paar bewährte Methoden:
🔸 Logger::log()
oder eigene Logdateien: Schreibe gezielte Einträge, um zu sehen, ob und wann ein Hook feuert.
🔸 Ausgabe ins Template schleusen: Weise Werte über Shop::Smarty()->assign()
zu und zeige sie temporär im Frontend an.
🔸 Mit die()
vorsichtig sein: Temporär sinnvoll, aber nicht in der Produktivumgebung – stattdessen lieber Logging nutzen.
🔸 Plugin-Cache leeren: Nach jeder Änderung im Plugin unbedingt den Plugin-Cache leeren, sonst greift Dein Code nicht.
JTL Hooks sind eines der mächtigsten Werkzeuge, um Deinen Shop flexibel und update-sicher zu erweitern. Ob Du Inhalte verändern, eigene Logik einbauen oder externe Systeme anbinden willst – mit Hooks hast Du die volle Kontrolle an definierten Punkten im Shop-System.
Gerade in Kombination mit Smarty eröffnen sich Dir viele Möglichkeiten, die Benutzererfahrung zu verbessern oder gezielte Anpassungen im Frontend vorzunehmen – ohne den Core-Code anzutasten.
Mit dem richtigen Umgang, einem klaren Verständnis der Hook-IDs und einer sauberen Struktur gelingt Dir die individuelle Weiterentwicklung Deines Shops nachhaltig und effizient.
Wenn Du einmal damit angefangen hast, wirst Du schnell merken: Hooks sind keine Hürde, sondern ein Schlüssel – zu mehr Kontrolle, mehr Flexibilität und einer klaren Trennung zwischen Core und Custom Code.