Tipps & Tricks
Tipps & Tricks für JTL, Onlineshops, Templates & Datenbanken
Hier findest du kurze, praxisnahe Lösungen für typische Herausforderungen aus dem Alltag – unter anderem zu JTL-Shop, SEO/GEO, Performance sowie zum Umgang mit MS-SQL (JTL-Wawi) und Shop-Datenbanken (MySQL/MariaDB). Ergänzt wird dies durch weitere technische und prozessbezogene Tipps aus dem Online-Business.
Wichtiger Hinweis
Die Anwendung der gezeigten Tipps & Tricks erfolgt auf eigene Gefahr. Bitte immer eine Sicherung der Shop-Dateien/Datenbank durchführen.
Kategorie: Allgemein
JTL Issue Tracker richtig nutzen
Schwierigkeitsgrad:
Der JTL-IssueTracker ist die zentrale Anlaufstelle, um Fehler, Probleme oder Funktionswünsche rund um JTL-Wawi, JTL-Shop und weitere JTL-Produkte transparent nachzuvollziehen.
Hier kannst du bestehende Tickets einsehen, deren Status verfolgen und prüfen, ob ein bekanntes Problem bereits gemeldet oder sogar schon behoben wurde.
Besonders hilfreich ist der JTL-IssueTracker vor Support-Anfragen oder Updates, da er schnell zeigt, ob es sich um ein bekanntes Verhalten oder einen neuen Fehler handelt.

Im JTL-IssueTracker sind alle Meldungen öffentlich einsehbar und mit zusätzlichen Informationen wie Version, Priorität und Bearbeitungsstatus versehen. So erkennst du auf einen Blick, ob ein Problem bereits in Arbeit ist oder in einer kommenden Version behoben wird.
Eigene Tickets können nur mit einem JTL-Kundenkonto erstellt werden. Vor dem Anlegen eines neuen Issues empfiehlt es sich jedoch immer, die bestehende Ticketliste sorgfältig zu durchsuchen, um doppelte Meldungen zu vermeiden.
Der regelmäßige Blick in den JTL-IssueTracker hilft dabei, Fehlersuche, Update-Planung und Support-Kommunikation deutlich effizienter zu gestalten – insbesondere bei komplexeren JTL-Wawi- oder JTL-Shop-Installationen.
Kategorie: JTL-Shop
Kategorieattribute abfragen
Schwierigkeitsgrad:
Wenn du in deinem Onlineshop bestimmte Inhalte abhängig von der aktuellen Kategorie ausgeben möchtest, sind Kategorieattribute eine sehr saubere Lösung. Du kannst damit z. B. zusätzliche Hinweise, kurze Texte oder Steuerwerte direkt an der Kategorie pflegen – und im Template gezielt auslesen.
Der Vorteil: Die Logik bleibt im Template schlank und du vermeidest harte Texte im Code. So lassen sich Inhalte zentral pflegen und kontrolliert ausgeben, ohne dass du an mehreren Stellen im Template Änderungen nachziehen musst.
/*** Kategorieattribute abfragen ***/
{if $oNavigationsinfo->getCategory() !== null && $oNavigationsinfo->getCategory()->getCategoryFunctionAttribute('Attribut_Name') != ""}
{$oNavigationsinfo->getCategory()->getCategoryFunctionAttribute('Attribut_Name')}
{/if}
In der Abfrage werden zwei Dinge sauber abgesichert: Erstens wird geprüft, ob überhaupt eine Kategorie vorhanden ist. Zweitens wird der Attributwert nur dann ausgegeben, wenn er nicht leer ist. Dadurch verhinderst du leere Platzhalter im Frontend und hältst die Ausgabe im Onlineshop konsistent.
Achte darauf, den Platzhalter Attribut_Name exakt durch den technischen Namen deines Kategorieattributes zu ersetzen. So kannst du pro Kategorie gezielt Inhalte steuern – beispielsweise Zusatztexte im Kopfbereich, Hinweise für Filter-/Landingpages oder interne Steuerwerte für Template-Logik.
Merkmale abfragen
Schwierigkeitsgrad:
Wenn du Merkmale bzw. Eigenschaften eines Artikels im Onlineshop sauber ausgeben möchtest, kannst du diese direkt über das Attribut-Array des Artikels im Template durchlaufen. Das ist besonders hilfreich, wenn du zusätzliche Informationen (z. B. technische Daten oder Varianten-Infos) strukturiert in einer Tabelle darstellen willst.
Der gezeigte Block greift die vorhandenen Attribute ab und rendert diese als Tabellenzeilen. So bleibt die Ausgabe dynamisch: Sobald du in der Artikelpflege Merkmale ergänzt oder änderst, aktualisiert sich die Darstellung automatisch – ohne dass du das Template jedes Mal anfassen musst.
/*** Merkmale abfragen ***/
{block name='productdetails-attributes-shop-attributes'}
{foreach $Artikel->Attribute as $Attribut}
<tr class="attr-custom">
<td class="h6">{$Attribut->cName}: </td>
<td class="attr-value">{$Attribut->cWert}</td>
</tr>
{/foreach}
{/block}
Wichtig ist, dass du die Ausgabe dort platzierst, wo sie in deinem Onlineshop sinnvoll ist – typischerweise im Bereich der Artikel-Details. Durch den Block-Wrapper kannst du die Ausgabe außerdem gezielt überschreiben oder erweitern, ohne die Template-Struktur unnötig zu verbiegen.
Achte darauf, dass wirklich nur die Merkmale ausgegeben werden, die du im Frontend zeigen möchtest. Falls du intern genutzte Attribute hast, empfiehlt sich eine zusätzliche Filterung (z. B. nach Namen oder Präfix), damit im Onlineshop keine unerwünschten Werte erscheinen.
Datenbanktabelle tbesucherarchiv wächst rasant
Schwierigkeitsgrad:Produktive Datenbank
Notfall-Lösung ist die gezeigte SQL-Anweisung. Wir bevorzugen hingegen eine automatisierte Lösung über einen Cronjob. Falls du Probleme bei der Ausführung dieser Anweisung hast, sprich uns an.
/*** DELETE Query: Loeschen alter Eintraege aus tbesucherarchiv. INTERVAL und LIMIT bei Bedarf anpassen ***/
DELETE FROM tbesucherarchiv
WHERE dZeit < DATE_SUB(NOW(), INTERVAL 30 DAY)
LIMIT 10000;
Durch eine sehr hohe Anzahl automatisierter Bot-Zugriffe auf JTL-Shops wächst die Tabelle tbesucherarchiv innerhalb kurzer Zeit stark an. Dies kann die Datenbank erheblich belasten und sich negativ auf Ladezeiten, Backend-Reaktionen und die allgemeine Systemstabilität auswirken.
Der im JTL-Shop integrierte Garbage Collector ist im Shop-Core fest auf eine Aufbewahrungsdauer von 180 Tagen eingestellt und greift bei stark frequentierten Onlineshops häufig zu spät. Die hier gezeigte MySQL Optimierung setzt gezielt an diesem Punkt an und entfernt alle Einträge, die älter als 30 Tage sind, um die Datenmenge nachhaltig zu reduzieren.
Aus Performance-Gründen haben wir das SQL-Query auf 10.000 Datensätze begrenzt. Es muss daher gegebenenfalls mehrfach ausgeführt oder sinnvoll automatisiert werden. Eine regelmäßige Bereinigung trägt maßgeblich dazu bei, die Datenbank dauerhaft schlank zu halten und die Performance deines JTL-Shops langfristig zu sichern.
Kategorie: JTL-Wawi
Suchen/Ersetzen in der Datenbank
Schwierigkeitsgrad:Produktive Datenbank
In der Datenbank eazybusiness eines JTL-Wawi Mandanten lässt sich sehr einfach eine Suchen/Ersetzen-Anweisung realisieren.
Auf diese Weise können Text-Ersetzungen und Text-Entfernungen sehr schnell auf eine große Anzahl an Datensätzen angewendet werden.
/*** UPDATE Query: Ersetzen/Entfernen von Teilen in der Artikelbeschreibung ***/
DECLARE @OldValue AS NVARCHAR(300);
DECLARE @NewValue AS NVARCHAR(300);
SET @OldValue = 'alter-wert';
SET @NewValue = 'neuer-wert';
UPDATE [eazybusiness].[dbo].[tArtikelBeschreibung]
SET cBeschreibung = REPLACE(
CAST(cBeschreibung AS NVARCHAR(MAX)),
@OldValue,
@NewValue
)
WHERE cBeschreibung LIKE '%' + @OldValue + '%';
Die gezeigte SQL-Abfrage ist nicht auf eine einzelne Tabelle beschränkt, sondern lässt sich flexibel auf weitere Tabellen und Spalten übertragen. Damit eignet sie sich ideal für eine gezielte SQL Suchen-und-Ersetzen-Logik innerhalb der JTL-Datenbank. Such- und Ersetzvorgänge können so auch in anderen Textfeldern umgesetzt werden, etwa in Kurzbeschreibungen, Zusatzfeldern oder plattformspezifischen Inhalten, ohne bestehende Datenstrukturen zu gefährden.
Zusätzlich kann die Abfrage über eine erweiterte WHERE-Bedingung präzise eingeschränkt werden. Dadurch lassen sich Änderungen gezielt auf bestimmte Verkaufsplattformen, Sprachen oder Mandanten begrenzen. Diese kontrollierte Vorgehensweise ist besonders wichtig für eine saubere Datenbankpflege in JTL-Wawi, da sie unerwünschte Massenänderungen vermeidet und die Datenintegrität wahrt. Gleichzeitig trägt die gezielte Filterung zu einer besseren Performance-Optimierung der Datenbank bei, da nur relevante Datensätze verarbeitet werden.
