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.
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
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:
- Regel 1 – Rule-Builder-Regel „Warenkorb ab 100 € und Lieferland Deutschland", Teilformel:
0 - „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:
- Grundpreis:
3.90 - Gewichtszuschlag:
{{ positions.weight > 20 ? 9.00 : 0 }} - 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.