Liquid Templating
Liquid ist eine Templatesprache die in 42°OS überall dort eingesetzt wird, wo du Texte dynamisch mit Werten aus der aktuellen Nachricht befüllen willst — in SQL-Statements des Internal Storage Agents, in Message Formatting Agents, in E-Mail-Texten und an vielen weiteren Stellen.
Das Grundprinzip: du schreibst einen Text mit Platzhaltern, und Liquid setzt beim Ausführen die echten Werte ein.
Grundsyntax
Werte ausgeben: {{ }}
Doppelte geschweifte Klammern geben den Wert einer Variable aus:
Guten Morgen, {{ name }}!
Wenn die Nachricht {"name": "Jonas"} enthält, ergibt das:
Guten Morgen, Jonas!
Verschachtelte Objekte werden mit Punkt navigiert:
{{ supplier.name }}
{{ supplier.address.city }}
Array-Elemente mit Index (beginnt bei 0):
{{ positions[0].bezeichnung }}
Logik: {% %}
Geschweifte Klammern mit Prozentzeichen enthalten Logik — Bedingungen, Schleifen, Zuweisungen. Sie geben keinen Text aus.
Bedingungen
{% if amount > 1000 %}
Großauftrag — bitte Freigabe einholen.
{% elsif amount > 500 %}
Standardauftrag.
{% else %}
Kleinauftrag.
{% endif %}
Vergleichsoperatoren: ==, !=, >, <, >=, <=
Logische Operatoren: and, or
{% if level == "ERROR" or level == "CRITICAL" %}
⚠️ Kritischer Eintrag: {{ info }}
{% endif %}
Prüfen ob ein Wert vorhanden ist:
{% if customer_number != null and customer_number != "" %}
Kundennummer: {{ customer_number }}
{% endif %}
Schleifen
{% for position in positions %}
- {{ position.bezeichnung }}: {{ position.betrag }} €
{% endfor %}
Wenn positions ein Array ist, wird der Block für jedes Element wiederholt. Mit forloop-Hilfsvariablen:
{% for entry in log_entries %}
{% if forloop.first %}### Log-Einträge{% endif %}
{{ forloop.index }}. {{ entry.level }} — {{ entry.info }}
{% endfor %}
| Variable | Bedeutung |
|---|---|
forloop.index | Aktueller Index, beginnt bei 1 |
forloop.index0 | Aktueller Index, beginnt bei 0 |
forloop.first | true beim ersten Durchlauf |
forloop.last | true beim letzten Durchlauf |
forloop.length | Gesamtanzahl der Elemente |
Filter
Filter verändern einen Wert bei der Ausgabe. Sie werden mit | angehängt:
{{ name | upcase }} → JONAS
{{ name | downcase }} → jonas
{{ name | capitalize }} → Jonas
{{ amount | round: 2 }} → 1190.00
{{ invoice_date | date: "%d.%m.%Y" }} → 10.03.2026
{{ text | strip }} → Leerzeichen am Anfang/Ende entfernen
{{ text | replace: "GmbH", "GmbH & Co. KG" }}
{{ array | size }} → Anzahl der Elemente
{{ array | first }} → erstes Element
{{ array | last }} → letztes Element
{{ array | join: ", " }} → Elemente mit Komma verbinden
Variablen zuweisen
{% assign total = 0 %}
{% for position in positions %}
{% assign total = total | plus: position.betrag %}
{% endfor %}
Gesamtbetrag: {{ total }} €
Praxisbeispiele in 42°OS
SQL-Statement mit Liquid (Internal Storage Agent)
INSERT INTO logs (log_entry_id, log_date, log_time, level, source, info, reported_state, created_at)
VALUES (
'{{ log_date }}-{{ log_time }}-{{ source }}',
'{{ log_date }}',
'{{ log_time }}',
'{{ level }}',
'{{ source }}',
'{{ info }}',
'unreported',
datetime('now')
)
Markdown-Tabelle aus Array (Message Formatting Agent)
| Level | Quelle | Info | Anzahl |
|---|---|---|---|
{% for entry in log_entries %}
| {{ entry.level }} | {{ entry.source }} | {{ entry.info }} | {{ entry.anzahl }} |
{% endfor %}
E-Mail mit Bedingung
Betreff: {% if level == "ERROR" %}⚠️ Fehler{% else %}Info{% endif %} — {{ source }}
Hallo,
im Schichtbericht vom {{ report_date }} wurde folgender Eintrag erfasst:
**Level:** {{ level }}
**Quelle:** {{ source }}
**Beschreibung:** {{ info }}
**Erstes Auftreten:** {{ erstes_auftreten }}
**Anzahl:** {{ anzahl }}
{% if anzahl > 10 %}
⚠️ Dieser Fehler tritt häufig auf. Bitte prüfen.
{% endif %}
Häufige Fehler
Variable existiert nicht — wenn ein Schlüssel in der Nachricht fehlt, gibt {{ schluessel }} einen leeren String zurück (kein Fehler, aber leise). Mit {% if schluessel != null %} absichern wenn der Wert zwingend gebraucht wird.
Array vs. einzelner Wert — {% for x in y %} funktioniert nur wenn y ein Array ist. Wenn y ein einzelnes Objekt ist, gibt es einen Fehler oder keine Ausgabe.
Zahlen als Strings — {{ amount | plus: 100 }} funktioniert nur wenn amount eine Number ist. Strings müssen erst mit | plus: 0 in Zahlen umgewandelt werden.
Weiterführend
Die vollständige Liquid-Dokumentation mit allen Filtern und Tags: shopify.github.io/liquid — 42°OS nutzt den Liquid-Standard, alle dort dokumentierten Funktionen funktionieren auch hier.