Zum Hauptinhalt springen

Verfügbare Variablen

In jeder Formel stehen dir die folgenden Variablen zur Verfügung. Du greifst mit einem Punkt auf die Eigenschaften zu, zum Beispiel cart.price.totalPrice.

hinweis

Gewichte werden – wie am Produkt gepflegt – in Kilogramm geliefert, Maße (Länge, Breite, Höhe) in Millimetern.

cart – der gesamte Warenkorb

EigenschaftBedeutung
cart.price.totalPriceWarenkorbsumme, wie sie der Kunde im Warenkorb sieht
cart.price.netPriceWarenkorbsumme netto
{{ cart.price.totalPrice >= 100 ? 0 : 4.90 }}

positions – die versandfähigen Artikel dieser Lieferung

Die praktischste Variable für Gewicht und Menge: Sie enthält nur die Artikel, die tatsächlich versendet werden (keine Rabatte oder Gutscheine), und rechnet die bestellte Menge bereits mit ein.

EigenschaftBedeutung
positions.weightGesamtgewicht in kg (Gewicht je Stück mal Menge, über alle Artikel summiert)
positions.quantityGesamtstückzahl über alle Artikel
positions.volumeGesamtvolumen in mm³ (aus Länge, Breite, Höhe der Produkte)
positions.lineItemsDie einzelnen Artikel (siehe lineItems unten)
{{ 3.90 + positions.weight * 0.50 }}

lineItems – die einzelnen Artikel

lineItems enthält alle Positionen des Warenkorbs, positions.lineItems nur die versandfähigen – für Versandkosten ist fast immer positions.lineItems die richtige Wahl. Je Artikel stehen unter anderem bereit:

EigenschaftBedeutung
item.quantityBestellte Menge
item.labelBezeichnung des Artikels
item.payload.productNumberProduktnummer
item.price.unitPriceEinzelpreis
item.price.totalPricePositionssumme
item.deliveryInformation.weightGewicht je Stück in kg
item.deliveryInformation.lengthLänge in mm
item.deliveryInformation.widthBreite in mm
item.deliveryInformation.heightHöhe in mm
item.deliveryInformation.freeDeliveryHäkchen „Versandkostenfrei" am Produkt

Über die Artikel gehst du am besten mit den Twig-Werkzeugen filter, map und max – zum Beispiel: Länge des längsten Artikels:

{{ max(positions.lineItems | map(item => item.deliveryInformation.length ?? 0)) }}
hinweis

Nicht jeder Artikel hat alle Angaben gepflegt. Mit ?? 0 setzt du einen Ersatzwert, falls eine Angabe fehlt – so bricht die Formel nicht ab.

Wichtig: das Ergebnis von filter nur einmal verwenden

Das Ergebnis von filter ist ein „Einweg-Durchlauf": Es kann in der Formel nur ein einziges Mal durchlaufen werden. Speicherst du es in einer Variablen und verwendest es zweimal – oder steckst es direkt in max() bzw. min() – schlägt die Formel mit der Meldung „Cannot rewind a generator that was already run" fehl (der Kunde sieht dann den blockierenden Versandkosten-Hinweis, der genaue Fehler steht im Log).

So bleibst du auf der sicheren Seite:

  • Schließe eine filter-Kette immer in einem Zug ab – mit map, reduce oder length dahinter.
  • Wende max() und min() nie direkt auf ein filter-Ergebnis an, sondern immer auf ein map-Ergebnis (das ist eine feste Liste): erst map, dann max.
  • Brauchst du gefilterte Artikel mehrfach, wiederhole die filter-Kette an jeder Stelle, statt sie in einer Variablen zwischenzuspeichern.
{# Sicher: filter -> map -> reduce in einem Zug #}
{{ positions.lineItems
| filter(item => not (item.deliveryInformation.freeDelivery ?? false))
| map(item => (item.deliveryInformation.weight ?? 0) * item.quantity)
| reduce((summe, gewicht) => summe + gewicht, 0) }}
{# Fehlschlag: max() direkt auf einem filter-Ergebnis #}
{{ max(positions.lineItems | filter(item => item.quantity > 1)) }}

delivery – die Lieferung

EigenschaftBedeutung
delivery.location.country.isoLieferland als Kürzel, z. B. DE, AT, CH
delivery.location.country.nameName des Lieferlands
delivery.location.address.zipcodePostleitzahl der Lieferadresse
delivery.location.address.cityOrt der Lieferadresse
{{ delivery.location.country.iso == 'CH' ? 14.90 : 5.90 }}
hinweis

Die Lieferadresse ist erst bekannt, wenn der Kunde eingeloggt ist bzw. sie im Checkout angegeben hat. Greife auf delivery.location.address deshalb immer mit einem Ersatzwert zu, z. B. delivery.location.address.zipcode ?? ''.

customer und customerGroup – Kunde und Kundengruppe

EigenschaftBedeutung
customerDer eingeloggte Kunde – leer, solange niemand eingeloggt ist
customer.customerNumberKundennummer
customerGroup.translated.nameName der aktuellen Kundengruppe
{{ customer ? 4.90 : 5.90 }}
hinweis

Für Unterscheidungen nach Kundengruppe, Land oder Bestellwert sind die „Regelbasierten Formeln" mit Rule-Builder-Regeln meist die bessere Wahl – sie sind ohne Formelkenntnisse pflegbar und lassen sich frei kombinieren. Die Variablen brauchst du vor allem zum Rechnen.

Weitere Variablen

VariableBedeutung
currency.isoCodeAktive Währung, z. B. EUR, CHF
currency.factorUmrechnungsfaktor der Währung zur Standardwährung
shippingMethod.translated.nameName der Versandart
salesChannel.translated.nameName des Verkaufskanals
salesChannelContextDer komplette Verkaufskanal-Kontext (für Spezialfälle)

Das Formel-Ergebnis wird nicht automatisch umgerechnet – es gilt in der Währung, in der bestellt wird. Möchtest du einen Euro-Preis in anderen Währungen anbieten, multipliziere mit dem Faktor:

{{ 4.90 * currency.factor }}

Fertige Vorlagen für alle Variablen findest du in den Formel-Beispielen.