Zum Hauptinhalt springen

Formel-Beispiele

Fertige Vorlagen zum Kopieren. Jede Formel muss eine Zahl ergeben – das Ergebnis sind die Versandkosten in der aktiven Währung. Welche Daten dir zur Verfügung stehen, zeigt die Seite Verfügbare Variablen.

Grundlagen

Fester Versandpreis

4.90

Kostenloser Versand

0

Rechnen in der Formel

Innerhalb von {{ … }} kannst du frei rechnen:

{{ 3.90 + 1.50 }}

Ergebnis: 5.40

Warenkorbwert und versandkostenfrei

Versandkostenfrei ab 100 Euro

{{ cart.price.totalPrice >= 100 ? 0 : 4.90 }}
  • Warenkorb 79,90 € → Versandkosten 4.90
  • Warenkorb 129,00 € → Versandkosten 0

Versandkostenfrei ab 50 Euro netto

{{ cart.price.netPrice >= 50 ? 0 : 4.90 }}

Prozentual vom Warenkorbwert

2 % der Warenkorbsumme:

{{ cart.price.totalPrice * 0.02 }}

Prozentual mit Mindestbetrag

max wählt den größeren Wert – die Versandkosten fallen nie unter 3.90:

{{ max(3.90, cart.price.totalPrice * 0.02) }}

Prozentual mit Obergrenze

min wählt den kleineren Wert – die Versandkosten steigen nie über 19.90:

{{ min(19.90, cart.price.totalPrice * 0.05) }}

Staffel nach Warenkorbwert

{% if cart.price.totalPrice >= 200 %}
0
{% elseif cart.price.totalPrice >= 100 %}
2.90
{% else %}
5.90
{% endif %}

Gewicht

positions.weight liefert das Gesamtgewicht der Lieferung in Kilogramm – Gewicht je Stück mal bestellte Menge, über alle Artikel summiert.

Preis pro Kilogramm

{{ positions.weight * 0.80 }}

Grundpreis plus Kilopreis

{{ 3.90 + positions.weight * 0.50 }}
  • 4 kg → 3.90 + 2.00 = 5.90
  • 20 kg → 3.90 + 10.00 = 13.90

Gewichtsstaffel

{% if positions.weight <= 5 %}
4.90
{% elseif positions.weight <= 20 %}
9.90
{% else %}
19.90
{% endif %}

Leichte Sendungen versandkostenfrei

Bis 2 kg kostenlos, darüber 4.90:

{{ positions.weight <= 2 ? 0 : 4.90 }}

Preis pro angefangene 10 Kilogramm

round mit 'ceil' rundet immer auf – je angefangene 10 kg werden 5.00 berechnet:

{{ (positions.weight / 10) | round(0, 'ceil') * 5 }}
  • 8 kg → 1 Einheit → 5.00
  • 23 kg → 3 Einheiten → 15.00

Sperrgut-Zuschlag als Teilformel

Teilformeln werden addiert. Lege den Grundpreis als erste Teilformel an (z. B. 4.90) und den Zuschlag als zweite – er greift nur über 31.5 kg:

{{ positions.weight > 31.5 ? 12.50 : 0 }}

Nur Artikel ohne „Versandkostenfrei"-Häkchen wiegen

Artikel, bei denen am Produkt „Versandkostenfrei" angehakt ist, sollen nicht mitzählen:

{{ (positions.lineItems
| filter(item => not (item.deliveryInformation.freeDelivery ?? false))
| map(item => (item.deliveryInformation.weight ?? 0) * item.quantity)
| reduce((summe, gewicht) => summe + gewicht, 0)) * 0.80 }}

Maße: Länge, Breite, Höhe

Die Maße kommen aus den Produkt-Stammdaten und werden in Millimetern geliefert. Mit ?? 0 fängst du Artikel ohne gepflegte Maße ab.

hinweis

Alle Beispiele schließen ihre filter-/map-Ketten bewusst in einem Zug ab und wenden max() nur auf map-Ergebnisse an. Warum das wichtig ist, erklärt der Abschnitt „Das Ergebnis von filter nur einmal verwenden".

Zuschlag ab einer bestimmten Länge

Ist der längste Artikel länger als 1200 mm, kommen 15.00 hinzu (als Teilformel zum Grundpreis):

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

Staffel nach dem längsten Artikel

{% set laenge = max(positions.lineItems | map(item => item.deliveryInformation.length ?? 0)) %}
{% if laenge > 2000 %}
39.90
{% elseif laenge > 1200 %}
19.90
{% else %}
5.90
{% endif %}

Gurtmaß (Länge plus Umfang)

Viele Paketdienste rechnen mit dem Gurtmaß: Länge + 2 × Breite + 2 × Höhe. Über 3000 mm wird es teurer:

{% set gurtmass = max(positions.lineItems | map(item =>
(item.deliveryInformation.length ?? 0)
+ 2 * (item.deliveryInformation.width ?? 0)
+ 2 * (item.deliveryInformation.height ?? 0)
)) %}
{{ gurtmass > 3000 ? 24.90 : 6.90 }}

Preis nach Volumen

positions.volume liefert das Gesamtvolumen in mm³. Geteilt durch 1000000000 ergibt Kubikmeter – ab einem halben Kubikmeter gilt der Speditionspreis:

{{ positions.volume / 1000000000 > 0.5 ? 29.90 : 9.90 }}

Menge und Positionen

Preis pro Stück

{{ positions.quantity * 0.99 }}

Preis pro Stück mit Obergrenze

{{ min(9.90, positions.quantity * 0.99) }}

Ab 5 Stück versandkostenfrei

{{ positions.quantity >= 5 ? 0 : 3.90 }}

Preis pro Position

1.50 je unterschiedlichem Artikel im Warenkorb (unabhängig von der Menge):

{{ (positions.lineItems | length) * 1.50 }}

Preis pro Paket

Passen 10 Stück in ein Paket, kostet jedes angefangene Paket 3.90:

{{ (positions.quantity / 10) | round(0, 'ceil') * 3.90 }}

Land, Postleitzahl und Währung

hinweis

Für Länderpreise sind meist die „Regelbasierten Formeln" mit Rule-Builder-Regeln (z. B. „Lieferland ist Schweiz") die übersichtlichere Wahl – die folgenden Varianten zeigen den Weg direkt in der Formel.

Auslandszuschlag für ein Land

{{ delivery.location.country.iso == 'CH' ? 14.90 : 5.90 }}

Mehrere Länder unterscheiden

{% if delivery.location.country.iso in ['AT', 'CH'] %}
12.90
{% else %}
5.90
{% endif %}

Inselzuschlag nach Postleitzahl

Als Teilformel zum Grundpreis – hier für Sylt (PLZ 25980). Der Ersatzwert ?? '' greift, solange noch keine Lieferadresse bekannt ist:

{{ (delivery.location.address.zipcode ?? '') starts with '25980' ? 25 : 0 }}

Preis in anderen Währungen umrechnen

Das Formel-Ergebnis gilt in der aktiven Währung. Ein Euro-Preis, der in jeder Währung stimmt:

{{ 4.90 * currency.factor }}

Kunde und Kundengruppe

Händler versenden kostenfrei

Am wartungsärmsten löst du das über eine regelbasierte Formel mit einer Kundengruppen-Regel. Direkt in der Formel geht es so:

{{ customerGroup.translated.name == 'Händler' ? 0 : 4.90 }}

Preis für nicht eingeloggte Kunden

customer ist leer, solange niemand eingeloggt ist:

{{ customer ? 4.90 : 5.90 }}

Zusammenspiel: Regeln und Teilformeln

Szenario: versandkostenfrei ab 100 Euro, aber nur in Deutschland

Ganz ohne Wenn-dann-Formeln, nur mit der Reihenfolge der Regeln:

  1. Regel 1 – Rule-Builder-Regel „Warenkorb ab 100 € und Lieferland Deutschland", Teilformel: 0
  2. „Standard-Formel (Fallback)": 5.90

Die erste zutreffende Regel gewinnt: Deutsche Bestellungen ab 100 € versenden kostenfrei, alle anderen zahlen 5.90.

Szenario: Baukasten aus Teilformeln

Eine Regel mit drei Teilformeln – die Ergebnisse werden addiert:

  1. Grundpreis: 3.90
  2. Gewichtszuschlag: {{ positions.weight > 20 ? 9.00 : 0 }}
  3. Inselzuschlag: {{ (delivery.location.address.zipcode ?? '') starts with '25980' ? 25 : 0 }}

Eine 25-kg-Bestellung nach Sylt kostet damit 3.90 + 9.00 + 25.00 = 37.90 Versand.