Zum Hauptinhalt springen
Manche Angaben passen in kein Feld der Warenwirtschaft: technische Datenblätter zu einem Produkt, Versandlaufzeiten je Postleitzahl, ein Menübaum, die Antwort eines Zahlungsanbieters. Die JSON-Schnittstelle bringt solche Daten an beliebige Stellen im Template, und zwar so, dass sie sich dort wie Shopdaten verwenden lassen. Typische Anwendungen:
  • zusätzliche Produktinformationen, Bilder und technische Parameter
  • Sendungsverfolgung im Kundenkonto
  • ein vollständiges Hauptmenü samt Untermenüs
  • Topseller-Strukturen und Cross-Links für Kategorien oder Produkte
  • Postleitzahlenlisten mit Versandlaufzeiten und europaweite Feiertage für die Lieferzeitberechnung
  • Bewertungen von Drittanbietern
  • Inhalte aus einem Redaktionssystem
Die Richtung stimmt dabei in beide Wege: Der Shop kann JSON-Daten nicht nur lesen, sondern auch selbst erzeugen und verändern, um sie per AJAX, JavaScript oder E-Mail weiterzugeben. Für den Versand an fremde Systeme eignet sich ASSE.

Woher die Daten kommen

Freischaltung und FTP-Zugang

Lassen Sie die JSON-Schnittstelle für Ihren Shop freischalten. Sie bekommen dafür einen eigenen FTP-Zugang mit Server, Benutzername und Passwort. Wollen Sie ausschließlich mit internen Daten arbeiten, also mit Antworten fremder Systeme, brauchen Sie weder Freischaltung noch eigenen FTP-Zugang.

Die Ordnerstruktur

Im Wurzelverzeichnis liegen die Dateien, die für alle Shops und Subshops gelten. Soll ein Subshop eigene Dateien bekommen, legen Sie ein Verzeichnis mit der Subshop-ID an und legen die Dateien dort ab. Der Dateiname muss in allen Subshop-Verzeichnissen derselbe sein. Welche Datei geladen wird, entscheidet der Subshop, in dem der Besucher gerade ist. Weitere Unterverzeichnisse dürfen Sie frei anlegen.
Legen Sie nicht mehr als 500 JSON-Dateien in ein Verzeichnis. Darüber leidet die Geschwindigkeit. Teilen Sie die Dateien stattdessen auf Unterverzeichnisse auf.

Anforderungen an die Dateien

Der zweite Name ist ungültig, weil er Klammern und einen Punkt enthält. Richtig:
Ein Tag darf höchstens 128 Zeichen lang sein, und der Zugriffspfad steht im Tag. Halten Sie die Namen deshalb kurz und die Hierarchien flach. Bei tief verschachtelten Daten mit langen Namen stoßen Sie an diese Grenze.

Die beiden Tag-Familien

Die Tags funktionieren auf allen Templates. Eine Anpassung der shop.config ist nicht nötig.

Daten laden

Geladen wird mit EJD-LoadData(). Das Tag nimmt drei Angaben: den Typ, den Pfad und eine Kennung.
Die Kennung im dritten Feld vergeben Sie frei. Alle folgenden Tags greifen darüber auf die geladenen Daten zu. In einem Template lassen sich mehrere Dateien parallel laden, jede mit einer eigenen Kennung.
Höchstens 100 JSON-Dateien lassen sich gleichzeitig laden.
Referenz: EJD-LoadData()

Prüfen, ob die Daten angekommen sind

Das negative Tag gibt als Einzel-Tag den Fehlercode aus. Damit lässt sich unterscheiden, ob die Datei fehlt oder ob sie kein gültiges JSON enthält. Referenz: EJD-DataOK()

Auf Werte zugreifen

Ein Wert wird über seinen Zugriffspfad angesprochen. Dieser entsteht aus den Namen der Ebenen, verbunden durch Punkte. Elemente eines Arrays bekommen ihren Index in eckigen Klammern, gezählt ab null. Für das oberste Element steht ein leerer Pfad oder _root_. Die folgenden Beispiele arbeiten mit dieser Datei:
Im Template:
Der Dateiname darf selbst aus einem Tag kommen. Im Beispiel wird je Produkt die Datei mit der Produktnummer im Namen geladen. Referenz: EJD-DA-Value()

Die Kennung einmal setzen

Wird auf dem Template nur eine Datei verwendet, erspart EJD-SetUseID() die Wiederholung der Kennung in jedem Tag.
EJD-DataOK() braucht die Kennung weiterhin. Für dieses eine Tag greift die Voreinstellung nicht.
Referenz: EJD-SetUseID()

Werte in anderen Tags weiterverwenden

Die EJD-DA--Tags tragen ihre Angaben in Klammern und lassen sich deshalb nicht einfach in andere Tags schachteln. Der Shop merkt sich aber jeden Wert und jeden Namen, den ein solches Tag anfasst. Über EJD-LastValueAccessed und EJD-LastNameAccessed kommen Sie an das zuletzt Angefasste heran, und dieses lässt sich wie jeder andere Wert weiterverwenden.
Soll ein Wert gemerkt, aber nicht ausgegeben werden, gibt es dafür eigene Tags:
Der Zugriffspfad lässt sich auch in einem freien Platzhalter zusammenbauen, wenn der Index aus einer Schleife kommt:
Referenz: EJD-DA-ArrayElements() · EJD-LastValueAccessed · EJD-LastNameAccessed · EJD-DA-TouchName() · EJD-DA-TouchValue() · EJD-DA-TouchArrayElements() · DC-ZeroLoop1…3 · DC-ZeroLoop1…3_set() · DC-ZeroLoop1…3_position

Nachkommastellen festlegen

Referenz: EJD-SetRealOutputFormat()

Elemente prüfen

Die Art eines Wertes lässt sich abfragen. Dabei wird der Wert zugleich gemerkt.
Zur Verfügung stehen EJD-DA-IsTrue(), EJD-DA-IsFalse(), EJD-DA-IsNull(), EJD-DA-IsNumber(), EJD-DA-IsReal(), EJD-DA-IsString(), EJD-DA-IsObject() und EJD-DA-IsArray(). Ob ein Name überhaupt vorkommt, beantwortet ein eigenes Tag. Es merkt sich dabei den Namen.
Ausgegeben wird Crosslinks, also der letzte Teil des Pfades, nicht der ganze Pfad. Referenz: EJD-DA-IsTrue() · EJD-DA-IsFalse() · EJD-DA-IsNull() · EJD-DA-IsNumber() · EJD-DA-IsObject() · EJD-DA-IsReal() · EJD-DA-IsString() · EJD-DA-IsArray() · EJD-DA-NameExists()

Über Elemente laufen

Kennen Sie die Namen der Elemente nicht im Voraus, läuft EJD-ElementIterator() über sie hinweg. Als Schleife wiederholt das Tag den Code, als Einzel-Tag gibt es den Namen des aktuellen Elements aus.
Fehlt ein Element, bleibt die Stelle leer, ohne Fehler. Wo das stört, prüfen Sie vorher mit EJD-DA-NameExists(). Referenz: EJD-ElementIterator()

Eigene JSON-Daten erzeugen

Der Shop kann JSON-Daten auch selbst aufbauen oder geladene Daten verändern und danach ausgeben. Drei Regeln gelten dabei:
  • Gibt es das Element unter dem angegebenen Pfad schon, wird es überschrieben.
  • Gibt es es noch nicht, wird es angelegt.
  • Je Aufruf lässt sich genau ein Element bearbeiten.

Einfache Werte

Arrays

Ein leeres Array wird angelegt und dann Stelle für Stelle erweitert. Ob Sie abwechselnd erweitern und füllen oder erst alle Stellen anlegen und dann füllen, bleibt Ihnen überlassen.
Soll das Array selbst die oberste Ebene sein, lautet der Pfad _root_.
Ein Element entfernen:

Verschachtelte Daten

Jede Ebene wird zuerst als leeres Objekt angelegt, danach gefüllt.

Prüfen, ob die Änderung geklappt hat

Der Fehlerstand bleibt stehen, auch wenn eine spätere Änderung gelingt. Setzen Sie ihn deshalb mit EJD-ResetModificationOK zurück, sonst prüfen Sie ab der ersten fehlgeschlagenen Änderung immer denselben alten Fehler.
Referenz: EJD-CreateNewData() · EJD-DA-SetStringValue() · EJD-DA-SetNumberValue() · EJD-DA-SetRealValue() · EJD-DA-SetToTrue() · EJD-DA-SetToFalse() · EJD-DA-SetToNull() · EJD-DA-SetToEmptyArray() · EJD-DA-SetToEmptyObject() · EJD-DA-ArrayExtend() · EJD-DA-DeleteElement() · EJD-RawDataOutput() · EJD-ModificationOK · EJD-ResetModificationOK

Daten aus fremden Systemen verarbeiten

Antworten von Zahlungsanbietern, Versanddienstleistern oder vom Shopsystem selbst liegen nicht als Datei vor. Sie kommen im Moment des Aufrufs an und heißen deshalb intern. Bei Dateien wissen Sie, was drinsteht, weil Sie sie selbst hochgeladen haben. Bei internen Daten ist das oft nicht der Fall. EJD-RawDataOutput() gibt deshalb alles aus, was angekommen ist. Das ist der schnellste Weg herauszufinden, womit Sie es zu tun haben.

Schritt 1: Die Daten in die Schnittstelle setzen

Welche Bezeichnung für Ihren Fall gilt, erfahren Sie vom jeweiligen Dienstleister oder von WEBSALE. Kommen die Daten hexcodiert an, verwenden Sie stattdessen EJD-SetRawDataHexCodedInput().

Schritt 2: Laden und Kennung vergeben

Der zweite Parameter ist bei internen Daten keine Pfadangabe, sondern eine technische Bezeichnung, die vom Anwendungsfall abhängt.
Einige interne Daten kommen direkt vom Shopsystem und brauchen Schritt 1 nicht. Die hreflang-Angaben beispielsweise lassen sich unmittelbar laden:
Alles Weitere, also das Prüfen, der Zugriff auf einzelne Werte und die Ausgabe, läuft wie bei Dateien. Referenz: EJD-SetRawDataInput() · EJD-SetRawDataHexCodedInput() Wegweiser: hreflang-Attribut

Verwandte Themen