Onlinehändler, die mit dem JTL-Shop arbeiten, wissen: Ein fehlerfreier Betrieb des Shops ist essenziell für Umsatz, Kundenzufriedenheit und SEO. Umso kritischer wird es, wenn plötzlich ein technischer Fehler auftaucht – etwa in Form der kryptischen Meldung „jtl code 118“.
Was auf den ersten Blick nach einem internen Systemproblem aussieht, entpuppt sich bei genauerem Hinsehen meist als Folge einer fehlerhaften Erweiterung, Plugin-Problematik oder fehlerhaften Funktionen. In diesem Artikel erfährst Du, was genau hinter diesem Fehler steckt, wie Du ihn identifizierst und welche Rolle die Datei functions.php
dabei spielt. So kannst Du strukturiert an die Fehlerbehebung herangehen – ohne auf externe Entwickler angewiesen zu sein.
Der Fehlercode 118 ist kein spezifischer Fehler, der von JTL mit einer festen Beschreibung versehen wurde, sondern tritt im Rahmen von Plugin-Prozessen oder individuellen Erweiterungen im Shop auf. In der Regel handelt es sich um einen PHP-bezogenen Fehler – etwa einen fehlgeschlagenen Funktionsaufruf, eine nicht geladene Datei oder einen Konflikt zwischen mehreren Modulen.
Die genaue Fehlermeldung lautet häufig:
Fatal error: Call to undefined function ... in ... on line ...
Das bedeutet: Der JTL-Shop versucht, eine Funktion aufzurufen, die nicht existiert oder nicht zur Verfügung steht – und bricht deshalb an dieser Stelle ab. Oft sind es Plugins oder Templates, die in ihrer functions.php
auf eine Funktion zugreifen möchten, die nicht eingebunden oder schlichtweg nicht definiert ist.
Fehler 118 taucht vor allem in diesen Situationen auf:
functions.php
. Wird diese Datei nicht korrekt eingebunden oder fehlt eine Funktion, quittiert der Shop das mit einem Fehler.functions.php
häufig beteiligt istDie Datei functions.php
ist sozusagen das Nervenzentrum vieler Plugins und Templates. In ihr werden eigene PHP-Funktionen definiert, die innerhalb des Shops verwendet werden sollen – zum Beispiel zur Preismanipulation, Datenverarbeitung oder Individualisierung von Shopprozessen.
Doch genau hier lauern viele Fehlerquellen. Denn:
functions.php
nicht per require_once
oder include_once
korrekt in das Plugin oder Template geladen wird, stehen die Funktionen im weiteren Shopverlauf nicht zur Verfügung – und führen beim Aufruf zum Fehler 118.function_exists()
überschreiben sie sich gegenseitig – bis der Shop abstürzt.Wenn Du im Shop mit Code 118 konfrontiert wirst, solltest Du in folgenden Schritten vorgehen:
Im JTL-Shop kannst Du unter includes/config.JTL-Shop.ini.php
den Developer-Modus aktivieren. Setze dazu:
[debug]
debug = true
Anschließend zeigt Dir der Shop detaillierte Fehlerausgaben, inklusive Pfad zur problematischen Datei und zur fehlerhaften Funktion.
Auf dem Server findest Du meist im logs
-Verzeichnis aktuelle Error-Logs. Alternativ kannst Du in Deinem Hosting-Panel (z. B. cPanel oder Plesk) auf PHP-Logs zugreifen. Suche dort nach dem Begriff Fatal error
in Kombination mit dem Funktionsnamen.
Wenn der Fehler im Zusammenhang mit einem Plugin steht, zeigt die Fehlermeldung oft den Pfad zur Plugin-Datei. Beispiel:
/includes/plugins/meinPlugin/version/Frontend/functions.php
Hier kannst Du gezielt nachsehen, welche Funktion fehlt, fehlerhaft geschrieben ist oder auf andere, nicht geladene Ressourcen zugreift.
Ein Plugin zur Anzeige kundenindividueller Preise enthält folgenden Code in der Bootstrap.php
:
require_once PFAD_PLUGIN . 'includes/functions.php';
zeigeIndividuellenPreis($kunde);
In der functions.php
ist jedoch keine Funktion zeigeIndividuellenPreis()
definiert – oder die Datei functions.php
fehlt komplett. Das Resultat: Der Aufruf schlägt fehl, der Shop wirft jtl code 118
und bleibt im schlimmsten Fall unbenutzbar.
Gerade wenn der Fehler plötzlich auftritt und der Shop nicht mehr aufrufbar ist, solltest Du pragmatisch vorgehen:
Der Fehlercode 118 tritt in JTL-Shops häufig in Kombination mit individuellen Erweiterungen, selbst entwickelten Plugins oder nicht aktualisierten Drittanbieter-Modulen auf. In vielen Fällen ist die Ursache banal – aber der Effekt gravierend: Die Seite lädt nicht mehr, Prozesse brechen ab oder bestimmte Shop-Funktionen funktionieren nicht mehr.
Ein Onlinehändler aktualisiert seinen JTL-Shop auf die neueste Version, ohne alle verwendeten Plugins vorher zu prüfen. Eines dieser Plugins – ein beliebtes Tool zur Rabattlogik – nutzt eine Funktion berechneRabatt()
in seiner functions.php
. Nach dem Update fehlt diese Funktion oder wurde in der neuen Version des Plugins verlagert. Der Shop ruft sie dennoch auf, weil sie z. B. in einer eigenen Vorlage eingebunden ist – und Code 118 wird ausgelöst.
🔍 Lerneffekt: Jedes Update am Shop erfordert eine Kontrolle der Plugin-Kompatibilität. Nicht gepflegte Plugins sind ein hohes Risiko.
Ein Entwickler erweitert ein Template um eine eigene PHP-Funktion zeigeLieferzeit()
. Diese wird im Template korrekt aufgerufen, aber vergessen wurde die Einbindung der functions.php
, in der diese Funktion steht. Im Frontend führt der Aufruf dann zum bekannten Fehler 118 – weil der Shop die Funktion schlicht nicht kennt.
🔍 Lerneffekt: Jede selbst geschriebene Funktion muss korrekt eingebunden werden. Schon ein falscher Pfad reicht für den Fehler.
Zwei Plugins verwenden zufällig denselben Funktionsnamen ladeBenutzerInfo()
. Ohne Schutzmechanismen wie function_exists()
kommt es zum „cannot redeclare function“-Fehler – ebenfalls eine Variante von Code 118. Der Shop weiß nicht, welche Version er verwenden soll, und bricht ab.
🔍 Lerneffekt: Namenskonflikte lassen sich leicht vermeiden – mit sauberer Strukturierung und Best Practices bei der Funktionsdefinition.
Fehler 118 lässt sich in vielen Fällen durch sauberes und vorausschauendes Arbeiten mit PHP und dem JTL-Framework vermeiden. Besonders bei Plugins und Templates mit eigenen Funktionen empfiehlt sich ein strukturierter Aufbau:
Nutze die PHP-Funktion function_exists()
, um sicherzustellen, dass eine Funktion nicht doppelt definiert wird:
if (!function_exists('ladeBenutzerInfo')) {
function ladeBenutzerInfo() {
// Logik
}
}
Damit stellst Du sicher, dass beim zweiten Laden keine Konflikte auftreten – auch wenn ein anderes Plugin denselben Namen verwendet.
Nutze Namespaces, um Funktionskonflikte zu vermeiden – besonders bei umfangreichen Plugins:
namespace MeinPlugin;
function ladeEinstellungen() {
// ...
}
Aufruf erfolgt dann im Plugin oder Template mit \MeinPlugin\ladeEinstellungen();
. So bleibt alles sauber getrennt.
Verwende beim Laden von functions.php
ausschließlich require_once
, um Mehrfach-Einbindungen zu vermeiden:
require_once PFAD_ROOT . 'includes/plugins/meinPlugin/functions.php';
Vergiss auch nicht, Pfadvariablen wie PFAD_ROOT
oder PFAD_PLUGIN
korrekt zu definieren – ansonsten sucht PHP an der falschen Stelle.
Dokumentiere jede eigene Funktion klar mit:
So lassen sich bei Änderungen oder bei der Zusammenarbeit mit Agenturen Fehler schneller identifizieren.
Wenn der Fehler bereits auftritt, hilft ein strukturiertes Vorgehen:
Schritt | Was Du überprüfen solltest | Typische Hinweise |
---|---|---|
1 | Developer-Modus aktivieren | Genaue Fehlerzeile, Dateipfad, Funktionsname |
2 | Error-Logs auslesen | PHP-Fehler wie Call to undefined function |
3 | Plugin-Verzeichnis analysieren | Liegt der Fehler in einem Plugin? Welches Plugin ist betroffen? |
4 | Datei- und Funktionsprüfung | Existiert die Funktion? Ist sie korrekt eingebunden? |
5 | Konflikte mit anderen Plugins | Doppelte Funktionsnamen oder Mehrfachdefinitionen? |
6 | Temporäre Deaktivierung von Plugins | Shop wieder erreichbar? Fehler lokalisiert? |
Mit dieser Checkliste kannst Du den Fehler in den meisten Fällen aufspüren – selbst ohne tiefgehende PHP-Kenntnisse.
Für Entwickler:
Wenn Du Plugins entwickelst oder Templates anpasst, denke immer an künftige Updates und Erweiterungen. Nutze sprechende Namen, arbeite mit Namespaces und dokumentiere jede Funktion. So reduzierst Du das Risiko ungewollter Seiteneffekte deutlich.
Für Shopbetreiber:
Vertraue nicht blind auf Plugins – auch wenn sie im JTL-Store gelistet sind. Prüfe regelmäßig:
Fehlercode 118 ist kein spezifisches Problem von JTL selbst, sondern ein Hinweis auf unsauber eingebundene oder fehlerhafte PHP-Funktionen – meist im Kontext von Plugins, Templates oder benutzerdefinierten Erweiterungen. Besonders die Datei functions.php
ist dabei häufig Auslöser von Konflikten, die sich jedoch mit sauberer Struktur und ein paar Grundregeln einfach vermeiden lassen.
Wenn Du strukturiert vorgehst, auf bewährte Methoden setzt und regelmäßig kontrollierst, welche Plugins aktiv sind und wie sie arbeiten, kannst Du Fehlercode 118 nicht nur beheben – sondern künftig komplett vermeiden. Und falls Du doch mal in der Fehlersuche steckst: Log-Dateien, der Developer-Modus und ein klarer Blick auf die Funktionsstruktur helfen Dir zuverlässig weiter.