Beim Relaunch eines JTL-Shops steckte die Startseite fest in Vorlagen des Templates. Daraus wurde ein Plugin mit fünfzehn Bausteinen, die die Redaktion selbst auf die Seite zieht und einstellt. Hier steht, was sie können — und was ich beim Bauen über den OnPage Composer gelernt habe, das in keiner Anleitung steht.
Das neue Design des Shops hatte seine Startseite in eigenen Vorlagen des Templates verdrahtet: Bühne, Themenwelten, Belege, alles fest im Code. Im OnPage Composer ließ sich davon nichts bearbeiten. Und die Vorlagen überschrieben Blöcke des Basis-Templates NOVA — genau die Stellen, die bei einem Update von NOVA brechen können, ohne dass es jemand merkt.
Bausteine für den OnPage Composer lösen beides auf einmal. Die Redaktion zieht sie auf die Seite und stellt Texte, Bilder, Farben und Abstände selbst ein. Das Template braucht keine eigenen Vorlagen mehr, und NOVA bleibt unangetastet. Alle Bausteine liegen in einer eigenen Gruppe der Palette, und jeder kann ein Hintergrundbild mit Ausschnitt und Abdunkelung tragen — einmal gebaut, fünfzehnmal genutzt.
Bild oder Video im Endlosloop, mit Überschrift und Knopf. Drei Höhenmodi sorgen dafür, dass das Motiv auf keinem Bildschirm abgeschnitten wird: Bild bestimmt die Höhe, feste Höhe mit Fokuspunkt oder festes Seitenverhältnis.
Ein Kachelraster mit vier, sechs oder acht Welten. Die ersten beiden sind doppelt so breit und stehen trotzdem exakt so hoch wie die schmalen daneben.
Liest den Kategoriebaum des Shops selbst: alle Kategorien unter einer Wurzel oder bis zu zwölf frei gewählte in eigener Reihenfolge. Kategorien ohne Artikel bleiben weg.
Eine Produktreihe mit Warenkorb-Knopf. Name, Preis und Bild kommen aus dem Artikel — ein Variationsartikel zeigt „ab 49,90 €“ statt eines Preises, den es so nicht gibt.
Ein durchlaufendes Band aus Schlagworten.
Ein schmales Band, das in die Produktauswahl führt: Überschrift, Text und Knopf nebeneinander, auf dem Handy untereinander.
Drei Aufteilungen derselben Fläche, von einem Bild bis zu einem großen und zwei kleinen. Die Bilder müssen kein bestimmtes Format haben; Schlagworte darunter werden auf Wunsch zu Verweisen.
Bis zu sechs nummerierte Kompetenz-Belege in zwei bis vier Spalten.
Per WhatsApp, Facebook, X, Pinterest, E-Mail oder Link kopieren — ohne ein einziges Skript eines Anbieters und damit ohne Einwilligung. Wahlweise mit eigenen Links und Symbolen.
Die eigenen Profile auf zehn Plattformen. Symbol, Name und Markenfarbe bringt der Baustein mit; einzutragen ist nur die Adresse.
Überschrift, Zeichen und formatierter Text — auf Wunsch nur bei Artikeln, die in der Wawi ein bestimmtes Funktionsattribut tragen.
Bewertungs- und Siegel-Widgets von Drittanbietern laden erst, wenn der Besucher im Consent-Manager des Shops zugestimmt hat. Abgesichert mit 16 automatischen Prüfungen.
Videodatei oder YouTube in festem Seitenverhältnis. YouTube lädt über youtube-nocookie.com und — bei aktivem Consent-Manager — erst nach Zustimmung.
Eine Produktart mit bis zu acht Baureihen als Reiter: Kennzahlen, Eigenschaften, Preis aus dem Artikel und ein Sonderelement je Produktart — eine Temperaturleiste, ein maßstäblicher Grundriss oder eine Farbwahl. Eine neue Produktart ist ein neuer Ordner, keine Codeänderung.
Eine Reiterebene darüber, in deren Bereiche die Redaktion beliebige Bausteine legt. Der Inhalt übersteht das Umbenennen eines Reiters.
Farben, Logo, Suche und eine Schublade für Sortimente mit vielen Oberkategorien — als Einstellungen, ohne das Markup des Templates umzubauen. Unter 992 Pixeln bleibt das mobile Menü des Templates unangetastet.
Das neue Design entstand direkt im Shop: als Vorschau-Template, in dem die Redaktion im OnPage Composer arbeitet, während Besucher weiter das bisherige Design sehen. Das verlangt Sorgfalt an einer Stelle, die man leicht übersieht — dem Kopfbereich, dessen Einstellungen auf jeder Seite gelten.
Deshalb gibt es zwei voneinander unabhängige Sperren. Erstens liefert der Shop die Stylesheets des Plugins unter dem aktiven Template gar nicht aus — gemessen, als die Vorschau einmal auf das Live-Template zurückfiel: keine einzige Datei des Plugins im Quelltext. Zweitens hängt jede Regel des neuen Kopfbereichs an einer Kennung, die nur das Vorschau-Template trägt. Fällt eine Sperre weg, hält die andere. Und wird das Vorschau-Template einmal umbenannt, greift schlicht keine Regel mehr — der Ausfall geht in die harmlose Richtung.
Jeder Baustein wurde vor der Auslieferung geprüft, mit dem Stylesheet des alten Templates vor dem eigenen geladen — also genau der Kollision, die im Shop herrscht. Die Proben stehen mit ihrem Ergebnis in der Dokumentation, zusammen mit dem, was sich nicht prüfen ließ.
Bausteine in einer eigenen Gruppe der OnPage-Composer-Palette, dazu Einstellungen für Kopfbereich und Navigation.
Zeilen Code: 23 PHP-Klassen, 18 Vorlagen, 36 Stylesheets und 4 Skripte.
geprüfte Zwischenstände zwischen dem 3. und 14. September 2026.
automatische Prüfungen dafür, dass ein Drittanbieter-Skript erst nach der Zustimmung lädt — und nur ein einziges Mal.
Aufrufe an Google für Schriften. Sie liegen im Plugin, unter einer Lizenz, die genau das erlaubt.
geänderte Dateien im Template des Shops.
Gezählt am Plugin-Paket 0.34.0 vom 14. September 2026.
Beim Bau sind mir Regeln begegnet, die JTL nirgends beschreibt — sie stehen nur im Code. Wo es um eine feste Stelle im Kern geht, habe ich sie zuletzt am Quellcode von JTL-Shop 5.7.2 nachgelesen; die übrigen sind beim Bauen gemessen.
Jeder Baustein bekommt von JTL einen Reiter für Abstände, eigene Klassen und das Ausblenden auf bestimmten Bildschirmgrößen. Dieser Reiter belegt neun Namen: background-color, color, font-size, box-styles, custom-class und hidden-xs bis hidden-lg. Heißt ein eigenes Feld genauso, schreiben zwei Stellen auf denselben Schlüssel: Das Feld lässt sich im Editor einstellen, gespeichert wird es nicht. Aufgefallen ist es an einer Symbolfarbe, die nach jedem Speichern wieder weg war.
Beschriftung und Hilfetext eines Feldes gibt der Editor ungefiltert aus, nur die Beschreibung wird maskiert. Eine Beschriftung, die „<script>“ als Wort enthielt, öffnete deshalb ein echtes Skript-Element — und verschluckte den Rest der Einstellungen. Die Reiter ließen sich noch anklicken, zeigten aber ins Leere.
Im Shop lädt ein Baustein die Datei mit seinem Klassennamen, im Editor eine Datei namens preview.css. Fehlt sie, sieht die Redaktion im Composer einen ungestalteten Baustein, obwohl im Shop alles stimmt. Der Ausweg ohne doppelte Pflege: preview.css holt die eigentliche Datei per @import herein.
Über das Manifest des Plugins registrierte Stylesheets kamen unter einem Template an und unter einem anderen nicht. Drei Zwischenstände zeigten deshalb keinerlei Wirkung, obwohl die Datei auf dem Server nachweislich die neue war. Verlässlich ist der Weg, den der Composer selbst vorsieht: Jeder Baustein bringt sein Stylesheet über die eigene Klasse mit — unabhängig vom Template.
Für seine Palette lädt der Composer jede registrierte Baustein-Klasse. Ein Syntaxfehler oder eine abweichende Methodensignatur in einer einzigen davon, und der ganze Editor bleibt weiß — nicht nur der betroffene Baustein. Einmal war es eine Zeile, die PHP 7 noch angenommen hätte und PHP 8 ablehnt. Seitdem wird vor jedem Paket jede geänderte Datei geprüft.
Die Vorlage eines Bausteins muss genau ein äußeres Element erzeugen. Steht etwas davor — und sei es nur ein Verweis auf ein Stylesheet —, meldet der Kern „Portlet Template hat kein Markup erzeugt!“ und zeigt gar nichts an.
Der Composer vergibt für jeden Artikel eine eigene Seite, für Variantenkinder ebenfalls (PageService::createCurrentPageId()). Ein Baustein, den die Redaktion auf einer Artikelseite ablegt, gilt deshalb nur für genau diesen Artikel. Was auf allen Artikelseiten stehen muss, gehört an einen Hook, nicht in den Composer — so ist das Gewährleistungslabel gelöst.
In den 22 Vorlagen des Checkouts von NOVA steht kein einziger Andockpunkt für den Composer; der Warenkorb hat fünf. Was vor dem Abschluss der Bestellung stehen soll, gehört deshalb in den Warenkorb oder auf die Artikelseite.
Der Smarty-Helfer, mit dem NOVA den Kategoriebaum liefert, gibt für die oberste Ebene andere Objekte zurück als für eine gewählte Unterkategorie — ohne die Methoden, die ein Baustein braucht. Das Ergebnis war ein leeres Raster, ohne jede Fehlermeldung. NOVA selbst geht über die Kinder des Kategorie-Objekts. Dorthin gehört die Verzweigung: in PHP, wo eine fehlende Methode auffällt, statt still eine leere Liste zu erzeugen.
Was ich für JTL-Shop und JTL-Wawi baue — und wie ich dabei vorgehe.
Ansehen →Die Pflichtangabe ab 27. September 2026 ohne Update auf 5.8 — und die Falle im OnPage Composer.
Lesen →Ein Shop-Update vorher an einer Kopie durchspielen — bevor Ihre Kunden es tun.
Ansehen →Dann sehen wir uns an, welche Abschnitte sich in Bausteine überführen lassen, die Ihre Redaktion selbst pflegt.
Individuelle Software und Werkzeuge für Betriebe, die mit Standardlösungen an Grenzen stoßen.