Allgemeine Informationen

ZR Price Calculator berechnet Produktpreise dynamisch anhand kundenseitig erfasster Eingaben (z. B. Fläche, Volumen, Laufmeter).
Dafür legen Sie Berechnungsregeln an – Formeln über Freitext-Variationen und weitere Parameter – und verknüpfen diese in der JTL-Wawi über das Funktionsattribut zr_pricing mit dem Artikel.

Auf der Artikeldetailseite aktualisiert sich der Preis live, sobald der Kunde Werte eingibt. Derselbe Preis wird serverseitig beim Hinzufügen in den Warenkorb neu berechnet und durchgesetzt.

Nach erfolgreicher Verknüpfung der Lizenz und Installation des Plugins finden Sie die Benutzeroberfläche des Plugins im JTL Shop Backend unter installierte Plugins -> ZR Price Calculator.

2. Vorbereitungen in JTL Wawi

Um das Plugin zu nutzen, müssen nachfolgende Einstellungen in der JTL-Wawi vorgenommen werden.

2.1 Funktionsattribut anlegen

In der JTL-Wawi unter Artikel → Attribute ein neues Funktionsattribut anlegen:

EinstellungWert
Namezr_pricing
DatentypText (Freitext)
Onlineshopfür den betreffenden Shop aktivieren

Der Wert des Attributs am Artikel ist später der technische Schlüssel der Berechnungsregel (z. B. quadratmeter). Im Plugin-Backend können Sie diesen Wert per Klick kopieren (zr_pricing = [ihr_schluessel]).

ZR Price Calculator - Funktionsattribut zuweisen

2.2 Freitext-Variationen am Artikel anlegen

Jeder Parameter einer Regel entspricht einer Freitext-Variation (Freifeld / Pflicht-Freifeld) am Artikel. Legen Sie also die Freitextvariationen am Artikel an, die Sie für Ihre Preisberechnung nutzen wollen. Der Variationsname muss mit dem Parameter-Key der Regel übereinstimmen (z. B. Freitext-Variation Breite wird im Plugin der Parameter Breite).

Dropdown-/Auswahl-Variationen werden als Formel-Eingaben nicht unterstützt – nur Freitext-Felder.

Wichtig: Die Regel wird auf der Artikelseite nur aktiv, wenn jeder Parameter der Regel eine passende Freitext-Variation am Artikel hat. Fehlt auch nur eine Zuordnung, bleibt die Live-Berechnung für diesen Artikel deaktiviert.

ZR Price Calculator - Freitextvariationen anlegen

3. Berechnungsregel anlegen

Das Anlegen einer Regel erfolgt schrittweise im Plugin-Backend. Für diese Dokumentation nutzen wir als Praxisbeispiel einen Zuschnitt-Service (z. B. Plattenware): Der Kunde gibt Länge und Breite in cm ein, der Preis ergibt sich aus Fläche × Grundpreis.

3.1 Regeldaten

  1. Neue Regel wählen.
  2. Regelname vergeben (z. B. „Fläche Quadratmeter“).
  3. Technischen Schlüssel festlegen (z. B. quadratmeter). Dieser Wert wird in der Wawi als Wert von zr_pricing am Artikel eingetragen.
  4. Den angezeigten Wawi-Wert kopieren und am Artikel hinterlegen.

3.2 Freie Parameter (Freitext-Variationen zur Kundeneingabe)

Definieren Sie die Freitextvariationen, für die der Kunde im Shop Werte eingibt und die zur Preisberechnung verwendet werden sollen. Jeder Parameter braucht:

FeldBedeutung
Label / KeyAnzeigename und technischer Key (= Variationsname in der Wawi)
Einheitz. B. cm, m, – optional im Shop anzeigen
UmrechnungsfaktorMultiplikator vor der Formel (z. B. 0.01 für cm → m)
min / maxoptionale Grenzwerte
Nachkommastellenerlaubte Nachkommastellen bei der Eingabe

Beispiel Parameter für Flächenpreis:

  • Länge – Einheit cm, Faktor 0.01 (→ Meter), min 10, max 250
  • Breite – Einheit cm, Faktor 0.01 (→ Meter), min 10, max 250

Eingebaute Werte, die Sie nicht als Parameter anlegen:

  • grundpreis – Verkaufspreis des Artikels aus dem Shop (Brutto fVK)
ZR Price Calculator - Regeldaten und Parameter

3.3 Formel

Bauen Sie die Formel zur Preisberechnung per Klick aus den Bausteinen Parameter, Operatoren, Funktionen und Zahlen zusammen.

Unterstützte Operatoren

GruppeZeichen
Rechnen+ - * / ^ (Potenz) % (Modulo)
Vergleich> < >= <= ==
Klammern / Argumente( ) ,

Unterstützte Funktionen

FunktionBedeutung
min(a, b)kleinerer Wert
max(a, b)größerer Wert
round(x)runden
if(bedingung, dann, sonst)bedingte Berechnung

Beispiel Flächenpreis:

Länge * Breite * grundpreis

Mit Umrechnungsfaktor 0.01 auf beiden Seiten entspricht das der Fläche in m² × Verkaufspreis (€/m²).

ZR Price Calculator - Formel zur Berechnung erstellen

3.4 Verarbeitung

Hier haben Sie die Möglichkeit, weitere Optionen zur Preisverarbeitung festzulegen. Diese Schritte greifen nach der Formelauswertung:

OptionBeschreibung
Rundungkaufmännisch, abrunden, aufrunden, 5-Cent-, 10-Cent-Rundung
NachkommastellenPräzision der Rundung (außer Cash-Rundung)
MindestpreisUntergrenze des berechneten Preises
Aufschlag / Verschnitt %prozentualer Zuschlag nach der Formel
Leerfallnormaler VK = ohne gültige Eingabe Shop-VK anzeigen; Kauf blockieren = Warenkorb-Add verhindern
PreisaufschlüsselungFormel-/Preis-Erklärung unter dem Preis im Shop

3.5 Test

Im Abschnitt Test geben Sie Beispielwerte für die Parameter ein. Das Ergebnis enthält Staffelauflösung, Formel, Zuschlag, Mindestpreis und Rundung – analog zur Shop- und Warenkorb-Logik.

Abschließend Speichern.

4. Weitere Artikel mit der Regel verknüpfen

  1. In der Wawi am gewünschten Artikel das Funktionsattribut zr_pricing setzen und als Wert den technischen Schlüssel der Regel eintragen (z. B. quadratmeter).
  2. Freitext-Variationen anlegen, deren Namen den Parametern entsprechen.
  3. Artikelpreis (Grundpreis) so setzen, wie ihn die Formel erwartet (z. B. €/m²).
  4. Daten an den Onlineshop übertragen.
  5. Artikelseite im Frontend prüfen: Live-Preis, optionale Aufschlüsselung und Staffel-Tabelle.
ZR Price Calculator - Freitextvariationen anlegen

5. Ausgabe im Shop-Frontend (Kundenansicht)

Sobald eine gültige Regel korrekt am Artikel hängt und alle Parameter-Variationen vorhanden sind, passieren folgende Dinge auf der Artikelseite:

  • Freitextfelder erhalten Einheiten-Hinweis und Validierung (min/max, Pflicht).
  • Der angezeigte Preis aktualisiert sich bei jeder Eingabe ohne zusätzliche AJAX-Anfrage.
  • Optional erscheint die Preisaufschlüsselung unter dem Preis.
  • Optional erscheint die Staffel-Tabelle; die erreichte Stufe ist farblich markiert.
  • Beim Hinzufügen in den Warenkorb wird der Preis serverseitig neu berechnet – die Frontend-Anzeige ist eine Vorschau, der Warenkorb ist maßgeblich.
ZR Price Calculator - Berechnung im Frontend

6. Anwendungsbeispiele

6.1 Anwendungsbeispiel 1: Zuschnitt nach Fläche

Use Case: Platten, Stoffe, Glas – Kunde misst in cm, Preis in €/m².

  • Parameter: Breite (Faktor 0.01), Länge (Faktor 0.01)
  • Formel: Breite * Länge * grundpreis
  • Wawi: zr_pricing = quadratmeter, Freitextfelder Breite und Länge

JSON-Import dieses Beispiels:

{
  "key": "quadratmeter",
  "name": "Fläche Quadratmeter",
  "formulaTokens": [
    {
      "type": "param",
      "key": "Breite"
    },
    {
      "type": "operator",
      "value": "*"
    },
    {
      "type": "param",
      "key": "Länge"
    },
    {
      "type": "operator",
      "value": "*"
    },
    {
      "type": "param",
      "key": "grundpreis"
    }
  ],
  "tierMetricKey": null,
  "priceTiers": [],
  "roundingMode": "round_half_up",
  "roundingPrecision": 2,
  "minPrice": 0,
  "surchargePercent": 0,
  "emptyInputBehavior": "fallback_vk",
  "showBreakdown": true,
  "showStaffel": false,
  "isActive": true,
  "parameters": [
    {
      "key": "Breite",
      "label": "Breite",
      "unit": "cm",
      "showUnit": true,
      "conversionFactor": 0.01,
      "minValue": 10,
      "maxValue": 250,
      "step": 0.1,
      "decimalPlaces": 1
    },
    {
      "key": "Länge",
      "label": "Länge",
      "unit": "cm",
      "showUnit": true,
      "conversionFactor": 0.01,
      "minValue": 10,
      "maxValue": 250,
      "step": 0.1,
      "decimalPlaces": 1
    }
  ]
}

6.2 Anwendungsbeispiel 2: Laufmeter mit Mindestpreis

Use Case: Profile, Leisten, Kabel – Preis pro Meter, kleiner Auftrag nicht unter Mindestpreis.

  • Parameter: Länge (Einheit m, Faktor 1, min 0,5, max 50)
  • Formel: Länge * grundpreis
  • Verarbeitung: Mindestpreis z. B. 25

emptyInputBehavior: "block" verhindert den Kauf ohne gültige Längenangabe.

JSON-Import dieses Beispiels:

{
  "key": "laufmeter",
  "name": "Laufmeter",
  "formulaTokens": [
    {
      "type": "param",
      "key": "Länge"
    },
    {
      "type": "operator",
      "value": "*"
    },
    {
      "type": "param",
      "key": "grundpreis"
    }
  ],
  "tierMetricKey": "Länge",
  "priceTiers": [
    {
      "from": 10,
      "value": 0.9
    },
    {
      "from": 20,
      "value": 0.85
    }
  ],
  "roundingMode": "round_half_up",
  "roundingPrecision": 2,
  "minPrice": 25,
  "surchargePercent": 0,
  "emptyInputBehavior": "block",
  "showBreakdown": true,
  "showStaffel": false,
  "isActive": true,
  "parameters": [
    {
      "key": "Länge",
      "label": "Länge",
      "unit": "m",
      "showUnit": true,
      "conversionFactor": 1,
      "minValue": 0.5,
      "maxValue": 50,
      "step": 0.1,
      "decimalPlaces": 1
    }
  ]
}

Anwendungsbeispiel 3: Mengenstaffel über Fläche

Use Case: Je größer die bestellte Fläche, desto günstiger der Faktor.

  • Parameter: flaeche (m²)
  • Bezugsparameter Staffel: flaeche
  • Formel: staffel * flaeche
  • Staffel-Übersicht im Shop aktiv

Bei 12 m² greift die Stufe ab 5 → staffel = 42 → Preis 42 × 12 = 504.

Bedingte Logik für JTL Kontaktformular
{
  "key": "flaeche_staffel",
  "name": "Fläche mit Staffel",
  "formulaTokens": [
    { "type": "param", "key": "staffel" },
    { "type": "operator", "value": "*" },
    { "type": "param", "key": "flaeche" }
  ],
  "tierMetricKey": "flaeche",
  "priceTiers": [
    { "from": 0, "value": 45 },
    { "from": 5, "value": 42 },
    { "from": 20, "value": 38 }
  ],
  "roundingMode": "round_half_up",
  "roundingPrecision": 2,
  "minPrice": null,
  "surchargePercent": null,
  "emptyInputBehavior": "fallback_vk",
  "showBreakdown": true,
  "showStaffel": true,
  "isActive": true,
  "parameters": [
    {
      "key": "flaeche",
      "label": "Fläche",
      "unit": "m²",
      "showUnit": true,
      "conversionFactor": 1,
      "minValue": 0.5,
      "maxValue": 200,
      "step": null,
      "decimalPlaces": 2
    }
  ]
}

Anwendungsbeispiel 4: Bedingte Formel mit if

Use Case: Rabatt ab einer bestimmten Fläche, sonst Normalpreis.

Entspricht: if(flaeche > 10, flaeche * grundpreis * 0.9, flaeche * grundpreis) mit 5-Cent-Rundung.

Bedingte Logik für JTL Kontaktformular
{
  "key": "flaeche_rabatt",
  "name": "Fläche mit Mengenrabatt",
  "formulaTokens": [
    { "type": "function", "name": "if" },
    { "type": "operator", "value": "(" },
    { "type": "param", "key": "flaeche" },
    { "type": "operator", "value": ">" },
    { "type": "number", "value": 10 },
    { "type": "operator", "value": "," },
    { "type": "param", "key": "flaeche" },
    { "type": "operator", "value": "*" },
    { "type": "param", "key": "grundpreis" },
    { "type": "operator", "value": "*" },
    { "type": "number", "value": 0.9 },
    { "type": "operator", "value": "," },
    { "type": "param", "key": "flaeche" },
    { "type": "operator", "value": "*" },
    { "type": "param", "key": "grundpreis" },
    { "type": "operator", "value": ")" }
  ],
  "tierMetricKey": null,
  "priceTiers": [],
  "roundingMode": "cash_05",
  "roundingPrecision": 2,
  "minPrice": null,
  "surchargePercent": null,
  "emptyInputBehavior": "fallback_vk",
  "showBreakdown": true,
  "showStaffel": false,
  "isActive": true,
  "parameters": [
    {
      "key": "flaeche",
      "label": "Fläche",
      "unit": "m²",
      "showUnit": true,
      "conversionFactor": 1,
      "minValue": 1,
      "maxValue": 100,
      "step": null,
      "decimalPlaces": 2
    }
  ]
}

Import und Export

In der Regelübersicht können Sie Regeln:

  • Als JSON exportieren – Datei zum Backup oder zur Übertragung in einen anderen Shop
  • Importieren – JSON-Datei hochladen oder Inhalt einfügen

Der technische Schlüssel muss beim Import eindeutig sein. Das JSON-Format entspricht den Beispielen in Abschnitt 5 (ohne Datenbank-id).

6 - Kontaktformular über das OPC Portlet einfügen

Übersicht und Verwaltung

In der Regelübersicht sehen Sie alle angelegten Regeln mit Name, Schlüssel und Status. Sie können:

  • suchen und nach Aktiv/Inaktiv filtern
  • Regeln bearbeiten, duplizieren oder löschen
  • den Status (aktiv/inaktiv) umschalten
  • importieren und exportieren

Inaktive Regeln werden im Shop nicht angewendet, auch wenn zr_pricing am Artikel noch gesetzt ist.

Hinweise und Einschränkungen

  • Die Formel und Verarbeitungsoptionen liegen als JSON in der Artikelseite (Live-Berechnung ohne Server-Roundtrip). Der Warenkorbpreis wird dennoch immer serverseitig neu ermittelt.
  • Nur Freitext-Variationen (FREIFELD / PFLICHT-FREIFELD) als Parameter.
  • Alle Parameter der Regel müssen am Artikel vorhanden sein – sonst keine Live-Berechnung.
  • Texte für Validierung, Staffel und Aufschlüsselung lassen sich über die Plugin-Sprachvariablen im Shop anpassen (z. B. zrPricingMsgRequired, zrPricingMsgStaffelFrom).
6 - Kontaktformular über das OPC Portlet einfügen