Zum Inhalt
AnmeldenKostenlos testen

JTL-Shop

JTL-Shop Plugin-Entwicklung: Aufbau, info.xml, Bootstrap und Hooks

Mit Plugins erweiterst du JTL-Shop, ohne den Code des Shops zu verändern. So bleibt der Shop laut JTL jederzeit updatefähig. Hier steht, wie ein Plugin für JTL-Shop 5 aufgebaut ist und worauf du beim Entwickeln achtest. Alle Angaben stammen aus der Entwicklerdokumentation von JTL-Shop, Stand Oktober 2026.

In diesem Artikel

Was ein Plugin in JTL-Shop kann

Ein Plugin kann Funktionen im Frontend ausführen (Frontend-Links), eigene Seiten im Backend bereitstellen, etwa Auswertungen (Custom-Links), neue Zahlungsarten anbieten, Boxen für das Frontend liefern und eigene E-Mail-Vorlagen mitbringen. Ein Plugin kann eine dieser Aufgaben erfüllen oder mehrere kombinieren.

Installiert wird ein Plugin, indem du es in den Ordner plugins/ im Shop-Hauptverzeichnis hochlädst und in der Pluginverwaltung im Backend installierst. Dort lässt es sich auch vorübergehend deaktivieren oder deinstallieren, im laufenden Betrieb.

Ordner und Plugin-ID

Seit JTL-Shop 5 liegt jedes Plugin in einem eigenen Ordner direkt unter [Shop-Root]/plugins/. Der Ordnername muss der Plugin-ID aus der info.xml entsprechen. Die Plugin-ID darf nur Buchstaben, Ziffern und Unterstriche enthalten, JTL empfiehlt ein Schema wie SoftwareFirma_PluginName, damit Plugins verschiedener Hersteller nicht kollidieren. Aus der ID wird außerdem der PSR-4-Namespace, also Plugin\SoftwareFirma_PluginName.

Typische Unterordner sind adminmenu/ für Tabs und Einstellungen im Backend, frontend/ für eigene Seiten im Shop, paymentmethod/ für Zahlungsarten, locale/ und Migrations/. Im Hauptordner liegen info.xml und Bootstrap.php. Den früheren Unterordner version/ gibt es ab JTL-Shop 5 nicht mehr.

Die info.xml

Die info.xml ist laut JTL das wichtigste Element eines Plugins, weil sie Installation und Updates steuert. Sie enthält Name, Beschreibung, Autor und Version, dazu die technischen Angaben: verwendete Hooks, Adminmenü mit Einstellungen, Frontend-Links, Zahlungsmethoden, Sprachvariablen, E-Mail-Vorlagen, Boxen und statische Ressourcen.

MinShopVersion legt fest, ab welcher Shopversion das Plugin läuft. Ist der Shop neuer als MaxShopVersion, zeigt das Backend eine Warnung. Soll das Plugin im JTL-Store verkauft werden, braucht die info.xml die ExsID, die du im JTL-Kundencenter nach dem Anlegen der Extension findest.

Bootstrap.php und Hooks

Einstiegspunkt ist die Klasse Bootstrap in der Datei Bootstrap.php. Sie implementiert JTL\Plugin\BootstrapperInterface mit Methoden wie installed(), updated(), enabled(), disabled() und uninstalled(). Die Methode boot() läuft bei jedem Aufruf im Frontend und im Backend. JTL warnt ausdrücklich: Sie soll nur Hooks registrieren. Hängt boot() etwa an einem Server, der nicht antwortet, ist auch das Backend gesperrt, und damit die Möglichkeit, das Plugin zu deinstallieren.

Hooks sind feste Stellen im Shopcode, an denen JTL-Shop executeHook() aufruft. Dein Plugin kann dort Daten lesen und verändern. Nutzen mehrere Plugins denselben Hook, laufen sie in der Reihenfolge ihrer Installation. Ein häufiger Fall ist HOOK_SMARTY_OUTPUTFILTER (ID 140), um eigenes HTML in die Seite einzufügen. Ab JTL-Shop 5 gibt es als Alternative den EventDispatcher, den du in boot() bekommst.

Datenbank: Migrationen statt SQL-Dateien

Ab JTL-Shop 5.0.0 werden SQL-Dateien aus dem Ordner sql/ nicht mehr ausgeführt. Eigene Tabellen legst du mit Migrationen im Ordner Migrations/ an. Die Dateien heißen Migration<YYYYMMDDhhmmss>.php, liegen im Namespace Plugin\<Plugin-ID>\Migrations und implementieren JTL\Update\IMigration mit up() zum Ausführen und down() zum Zurücknehmen.

Sichere Plugins schreiben

Plugins haben laut JTL vollständigen Zugriff auf den Onlineshop. JTL rät deshalb, alle Eingaben zu validieren und SQL-Abfragen ausschließlich als Prepared Statements über die Datenbankklasse des Shops auszuführen, weil sich Freitextfelder nicht zuverlässig validieren lassen.

  1. Plugin-ID eindeutig wählen und Ordner gleich benennen.
  2. In boot() nur Hooks registrieren, keine Aufrufe an fremde Server.
  3. Tabellen per Migration anlegen, mit down() zum Zurücknehmen.
  4. Eingaben validieren, SQL nur mit Prepared Statements.
  5. MinShopVersion und MaxShopVersion pflegen und jedes Update auf einer Testinstanz prüfen.

Eigene Suche als Plugin?

Eine bessere Produktsuche ist ein häufiger Wunsch an Plugin-Entwickler. Eine eigene Suchlogik im Shop bedeutet Index, Tippfehler-Toleranz, Filter und Pflege bei jedem Shop-Update. Grumeria nimmt das ab: Die Suche läuft auf eigenen Servern, das Grumeria-Plugin für JTL-Shop 5 bindet sie nur ins Suchfeld ein. Agenturen, die JTL-Shops betreuen, erhalten über unser Partnerprogramm 50 % vom Nettoumsatz jedes vermittelten Kunden, 12 Monate lang.

Suche ohne eigenes Plugin-Projekt

Probier Tippfehler, Wortteile und Artikelnummern in der Live-Suche von Grumeria aus und vergleiche mit der Suche deines JTL-Shops.

Live-Suche ausprobieren →

Passend dazu

Alle Anleitungen ansehen →