Skip to main content
Mit dem $wsProducts Modul können Sie Produktdaten dynamisch im Frontend laden und anzeigen.

Modulübersicht

Beispiel / Ausschnitt über $wsProducts
JSON-Ausgabe
Anmerkung: ƒ() kennzeichnet eine Funktion. Methoden in der Übersicht

Templates

Standardmäßig werden Produkte über das Template product.htm angezeigt. Dieses befindet sich im Verzeichnis views. Der Name product.htm und der Speicherort dürfen nicht geändert werden, da das Template fest in der Software hinterlegt ist und nicht konfigurierbar oder anpassbar ist. Produktdaten können jedoch flexibel auch auf anderen Seiten eingebunden werden, zum Beispiel:
  • Startseite → Darstellung von Top-Sellern, Angeboten oder einer Produktauswahl.
  • Warenkorbseite → Cross-Selling-Produkte als Kaufempfehlungen.
  • Kategorieseiten & Suchergebnisse → Individuelle Produktlisten mit Filtern.
  • Checkout & Bestellbestätigung → Anzeige von ergänzenden Produkten oder Rabattaktionen.
Mit $wsProducts lassen sich Produktinformationen dynamisch abrufen und individuell in verschiedenen Templates integrieren, um eine gezielte Präsentation von Artikeln zu ermöglichen.

Variablen

Für $wsProducts stehen keine Variablen zur Verfügung.

Methoden

$wsProducts.load()

Gibt ein Produkt anhand der Produkt-ID zurück. Signatur
$wsProducts.load(productId)
Rückgabe
map - Product-Map mit allen Produktdaten.
Parameter Beispiel, das ein Produkt lädt und den Namen des Produkts ausgibt.

$wsProducts.loadByNumber()

Gibt ein Produkt anhand der Artikelnummer zurück. Signatur
$wsProducts.loadByNumber(itemNumber)
Rückgabe
map - Product-Map mit allen Produktdaten.
Parameter Beispiel, das ein Produkt anhand der Artikelnummer lädt:

$wsProducts.loadByCustomNumber()

Gibt ein Produkt anhand einer benutzerdefinierten Nummer zurück, beispielsweise EAN oder GTIN. Signatur
$wsProducts.loadByCustomNumber(customNumber)
Rückgabe
map - Product-Map mit allen Produktdaten.
Parameter Beispiel, das ein Produkt anhand der GTIN lädt.
Mit Verwendung der Funktionen $wsProducts.load..() stehen verschiedene Variablen zur Verfügung, um Daten zum Produkt abzurufen und auszugeben. Nachfolgend eine Übersicht, welche Variablen verfügbar sind.

Produkt-Daten (Rückgabe von $wsProducts.load() )

Zunächst ist es notwendig, die Map mit den Produkt-Daten, wie im obigen Beispiel dargestellt, einer lokalen Variable zuzuweisen. Diese kann anschließend an verschiedenen Stellen im Template verwendet werden. JSON-Ausgabe der Variablen
Variablen in der Übersicht

$wsProducts.variantInfo()

Liefert die Varianten-Daten zu einem Produkt zurück. Signatur
$wsProducts.variantInfo(productId)
Rückgabe
map - Map mit Varianten-Daten.
Parameter Beispiel, das die Varianten-Infos eines Produkts lädt.
Mit Verwendung der Funktion $wsProducts.variantInfo() stehen verschiedene Variablen zur Verfügung, um Daten zum Produkt abzurufen und auszugeben. Nachfolgend eine Übersicht, welche Variablen verfügbar sind.

Varianten-Daten (Rückgabe von $wsProducts.variantInfo() )

Zunächst ist es notwendig, die Map mit den Varianten-Daten, wie im obigen Beispiel dargestellt, einer lokalen Variable zuzuweisen. Diese kann anschließend an verschiedenen Stellen im Template verwendet werden. JSON-Ausgabe der Variablen
Variablen in der Übersicht

$wsProducts.variantInfo().resolve()

resolve() ist eine Methode des Rückgabewertes von $wsProducts.variantInfo(). Sie nimmt eine möglicherweise unvollständige oder ungültige Attributauswahl entgegen und gibt die nächstpassende existierende Variante zurück. Warum resolve() benötigt wird
Variantenprodukte existieren nur in bestimmten Attributkombinationen.
Wenn ein Kunde ein einzelnes Attribut ändert, beispielsweise die Farbe, ist die bisher gewählte Gesamtkombination möglicherweise nicht mehr verfügbar.
resolve() findet in diesem Fall die nächstmögliche gültige Variante, ohne dass Sie alle verfügbaren Kombinationen selbst durchsuchen müssen.

Beispiel
Ein T-Shirt gibt es in diesen Kombinationen:
Der Kunde sieht gerade “Rot, L” und klickt auf “Blau”. Die Kombination “Blau, L” existiert jedoch nicht, weshalb resolve() stattdessen “Blau, S” liefert, also die einzig gültige Variante, bei der die Farbe Blau erhalten bleibt.
Der Parameter fixate steuert dabei, welches Attribut als unveränderlich gilt. In diesem Fall ist es die Farbe, da der Nutzer die Farbe ausgewählt hat.
Signatur
$variantInfo.resolve(selection, fixate)
Parameter
Rückgabe
map - Ein Produktobjekt, das der aufgelösten Variante entspricht. Seine Struktur ist identisch mit der Rückgabe von $wsProducts.load(). Im Fehlerfall, wenn also keine Variante mit dem fixierten Attributwert existiert, gibt resolve() null zurück.

Beispiel
Der Nutzer hatte “Rot, Größe L” gewählt und klickt auf “Blau”. Weil “Blau, L” nicht existiert, liefert resolve() die nächstpassende Variante mit der Farbe Blau.

Aktionen

Für $wsProducts stehen keine Aktionen zur Verfügung.

Beispiele

In den folgenden Beispielen wird das Produkt einer Variable $myProduct zugewiesen. Das bedeutet, dass alle Produktinformationen über diese Variable abgerufen und weiterverarbeitet werden können.

Name und Beschreibung des Produkts

Name und Beschreibung sind Standard-Produktdatenfelder, die vom Shopsystem vorgegeben sind. Sie gehören zu den essenziellen Feldern, die zur Erfassung und Darstellung grundlegender Produktinformationen dienen und für die Bestellabwicklung unerlässlich sind. Die technischen Feldnamen sind fest definiert und werden in der folgenden Form angesprochen:
Die Syntax für den Zugriff auf den Produktnamen und die Produktbeschreibung lautet:

Gewicht als Zusatz-Produktdatenfeld

Im Gegensatz zu Standard-Produktdatenfeldern gehört das Gewicht zu den Zusatz-Produktdatenfeldern. Diese bieten erweiterte Möglichkeiten zur Erfassung und Darstellung von Produktmerkmalen, die über die grundlegenden Informationen hinausgehen. Zusatz-Produktdatenfelder sind:
  • Nicht zwingend für die Bestellabwicklung erforderlich, aber hilfreich für die Produktdarstellung.
  • Individuell anpassbar und können je nach Bedarf hinzugefügt werden.
  • Über das Admin Interface erstellt oder über die Produktdaten-Schnittstelle geliefert werden.
Die technischen Namen dieser Felder werden in der Form angesprochen:
Falls ein Feld weight im Admin-Bereich erstellt wurde, kann das Gewicht eines Produkts so ausgegeben werden:

Produktbilder

Die Datenfelder für Produktbilder gehören nicht zu den Standardfeldern, sondern sind Zusatz-Produktdatenfelder. Um Produktbilder flexibel und in unterschiedlichen Größen auszugeben, müssen diese Felder als Datentyp MultiFormatImage angelegt werden. Dieser Feldtyp ermöglicht die Speicherung eines Bildes in mehreren Formaten und sorgt gleichzeitig für eine automatische Konvertierung, sodass die Bilder in den gewünschten Größen verfügbar sind. Die Anzahl der Zusatz-Produktdatenfelder mit diesem Typ ist nicht begrenzt, sodass beliebig viele Bilder für ein Produkt gespeichert werden können. Die Konfiguration der Bildgrößen erfolgt im Admin Interface im Service Bildkonverter. Dort können die gewünschten Formate festgelegt werden, die für verschiedene Anwendungsbereiche benötigt werden. Typischerweise werden vier Bildgrößen verwendet:
  • mini (Thumbnail)
  • klein
  • normal und
  • groß
Im Admin Interface Service Bildkonverter wird auch das Speicherverzeichnis für die Bilder auf dem Server definiert. Der Pfad zum Bild wird dann durch die entsprechende Variable direkt mit ausgegeben. Der Zugriff auf Produktbilder erfolgt nach dem folgenden Schema
  • $myProduct.custom.<technischer Feldname>.<Definiertes Format>
Wurde beispielsweise das Feld image01 für das Hauptbild des Produkts angelegt, können die Bilder in den verschiedenen Größen folgendermaßen ausgegeben werden:

Varianten eines Produktes

Produkte, die in unterschiedlichen Ausführungen wie Größe, Farbe oder Material erhältlich sind, werden als Variantenprodukte angelegt. Varianten sind keine eigenständigen Artikel, sondern untergeordnete Versionen eines Hauptprodukts, die sich in bestimmten Merkmalen unterscheiden. Damit Varianten korrekt im Shop verwaltet und dargestellt werden können, werden spezielle Produktdatenfelder verwendet, die als typspezifische Produktdatenfelder bezeichnet werden. Diese Felder sind speziell darauf ausgerichtet, die Anforderungen von Variantenprodukten, Setprodukten und anderen komplexen Produktstrukturen zu unterstützen. Sie sind tief in der Shop-Software verankert, fest vorgegeben und können technisch nicht geändert werden. Das bedeutet, dass sowohl die Bezeichnung als auch die Spezifikationen dieser Felder nicht angepasst werden können. Das betrifft beispielsweise erlaubte Werte, Feldtypen und Vererbungsmechanismen. Die eigentlichen Produktinformationen einer Variante, wie Name, Beschreibung, Preis oder Bilder, werden über die Standard- und Zusatz-Produktdatenfelder gepflegt, die für die Varianten definiert wurden. Diese Daten können entweder individuell pro Variante festgelegt werden. Sind keine spezifischen Werte hinterlegt, werden sie automatisch vom Hauptprodukt geerbt. Für den Zugriff auf Varianten eines Produkts wird die folgende Syntax verwendet:

Preis eines Produkts

Jedes Produkt hat einen Verkaufspreis, der im Shop angezeigt wird. Zusätzlich kann ein Produkt zeitgesteuerte Aktionspreise tragen, die nur innerhalb eines gepflegten Zeitraums gelten. Dieser Abschnitt beschreibt zuerst die beiden Felder für den regulären Preis und den Aktionspreis, danach die Darstellung als Streichpreis, anschließend die Preise von Set-Produkten und zuletzt den Zugriff auf weitere Preisfelder.

Aktueller Preis und Standardpreis

Der Shop löst den Preis bei jedem Seitenaufruf neu auf. Sie müssen also nicht selbst prüfen, ob eine Aktion läuft. Dafür stehen drei Felder zur Verfügung. Damit die Preise mit der richtigen Währung ausgegeben werden, wird die Währungsformatierung automatisch aus den Shopeinstellungen im Admin Interface übernommen. Das bedeutet, dass die Währung entweder als ISO-Code (EUR) oder als Symbol () angezeigt wird, je nach Konfiguration des Shops. Ob die Preise im Shop netto (zzgl. MwSt.) oder brutto (inkl. MwSt.) behandelt werden, ist ebenfalls eine Einstellung, die im Admin Interface konfiguriert werden kann.

Streichpreis und Aktionshinweis anzeigen

Ein Streichpreis ist nur dann sinnvoll, wenn der Standardpreis tatsächlich über dem aktuellen Preis liegt. Prüfen Sie das deshalb vor der Ausgabe.
Aktionspreise werden im Admin Interface je Preisfeld mit einem Von-Bis-Zeitraum gepflegt. Über die Schnittstelle geschieht das mit dem Feld scheduledPrices, beschrieben in der API-Referenz Produkte.

Preise von Set-Produkten

Bei Set-Produkten wird der Preis aus dem Hauptprodukt und den Unterprodukten berechnet, und zwar bei jedem Seitenaufruf neu. Die Felder price und rawPrice enthalten dabei die Werte des Sets. Zusätzlich stehen folgende Felder zur Verfügung. Die Syntax für den Zugriff lautet:
Die fünf Set-Felder stehen nur bei Set-Produkten zur Verfügung. Bei allen anderen Produkten sind sie nicht vorhanden. Ob ein Produkt ein Set ist, sagt das Feld isSetProduct, das an jedem Produkt vorhanden ist.

Preis im Warenkorb

Der Preis einer Warenkorbposition wird beim Hinzufügen festgeschrieben. Betroffen sind $wsBasket.items[].price und die daraus abgeleiteten Werte total, totalNet, totalGross und totalTax. Endet eine Aktion, während der Artikel im Warenkorb liegt, behält die Position den Preis vom Zeitpunkt des Hinzufügens. Das gilt ebenso für die Unterprodukte eines Sets und für automatisch hinzugefügte Positionen. Das Produktobjekt innerhalb einer Warenkorbposition, also $wsBasket.items[].product, löst seinen Preis dagegen bei jedem Aufruf neu auf. Beide Werte können deshalb auseinanderlaufen.

Änderungen an bestehenden Templates

Die folgenden Änderungen können bestehende Templates betreffen. Prüfen Sie Ihre Preisausgaben, bevor Sie aktualisieren.

Weitere Preisfelder auslesen

Neben dem Standardpreis kann ein Shop weitere Preisfelder als Zusatz-Produktdatenfelder führen. Auch diese Felder können Aktionspreise tragen, und auch der direkte Zugriff über $myProduct.custom.<feld> liefert bereits den aufgelösten Preis. getFullPriceInfo() brauchen Sie erst dann, wenn Sie zusätzlich den Standardpreis oder den Aktionstext eines solchen Feldes benötigen. Signatur
$myProduct.getFullPriceInfo(field)
Rückgabe
map - Map mit den Feldern price, rawPrice und promotionInfo. Für ein unbekanntes Feld wird null zurückgegeben.
Parameter Beispiel, das ein zusätzliches Preisfeld mit Streichpreis ausgibt.

Wo diese Felder verfügbar sind

Die Preisfelder gehören zum Produktobjekt selbst. Sie stehen deshalb überall zur Verfügung, wo ein Produktobjekt geliefert wird, und nicht nur bei $wsProducts.load(). Über Modul-Methoden:
  • $wsProducts.load(), $wsProducts.loadByNumber(), $wsProducts.loadByCustomNumber() und $wsProducts.loadNext()
  • $wsProducts.variantInfo(id).resolve(selection, fixate)
  • $wsProduct.load() und $wsProduct.variantInfo(id).resolve(selection, fixate)
  • $wsCategories.loadProducts(categoryId)
  • $wsSearch.search(params, id).products
  • $wsWatchList.loadWatchList(watchListId).items[].product
  • $wsLastSeenProducts.load()
Über Seiten-Variablen und verschachtelte Objekte:
  • $wsViews.current.info.product und $wsViews.current.info.products[]
  • $wsViews.current.info.basketItem.product und $wsViews.current.info.product
  • $wsBasket.items[].product
  • $wsNavigation.path[].object, wenn type den Wert product hat
  • $product.base, also das Basisprodukt einer Variante

Verfügbarkeit eines Produkts

Neben allen anderen Produktinformationen ist die Verfügbarkeit eines Produkts eine der wichtigsten Informationen für den Käufer. Jedes Produkt kann mit einem Lagerbestand versehen werden, der darüber entscheidet, ob und in welcher Menge ein Artikel bestellt werden kann. Zusätzlich besteht die Möglichkeit, den aktuellen Lagerbestand und den zugehörigen Lieferstatus im Shop anzuzeigen. Der Zugriff auf den Lagerbestand erfolgt nicht direkt über $wsProducts, sondern über das separate Modul $wsInventory .
Detaillierte Informationen für den Datenzugriff des Lagerbestands-Moduls finden Sie hier. Weitere Praxisbeispiele zur Umsetzung von Produkten und Produktvarianten finden Sie hier: Praxisbeispiele Produkte