Die Liquid-Umgebung: wie streng sie ist

Unbekannte Variablen und Filter sind still, unbekannte Tags brechen ab — und ausgegeben wird ohne Maskierung.

Für Entwickler

Voraussetzungen

  • Recht: website:write

Gerendert wird mit LiquidJS. Für jede Anfrage entsteht eine frische Umgebung; es gibt keinen Vorlagen-Zwischenspeicher.

Unbekannte VARIABLEN sind erlaubt und rendern leer. Unbekannte FILTER sind erlaubt und reichen den Wert unverändert durch. Unbekannte TAGS dagegen brechen ab — ein `{% schema %}` in einer Abschnittsdatei lässt die Seite mit einem Parse-Fehler stehen.

Es wird NICHT automatisch maskiert. Was in `{{ … }}` steht, geht roh in die Seite. Das ist Absicht, damit Vorlagen HTML erzeugen können — und es macht den Filter `escape` zu Ihrer Pflicht, sobald Sie einen Wert ausgeben, den jemand anders eingetippt hat. Für Adressen gibt es zusätzlich `safe_url`.

Wahrheitswerte folgen den Regeln von JavaScript: Eine leere Zeichenkette ist falsch, `0` ist falsch. Das weicht vom Liquid anderer Anbieter ab, wo beides wahr wäre.

`{% render %}` und `{% include %}` finden ein Teilstück aus `snippets/` unter drei Schreibweisen: `"button"`, `"button.liquid"` und `"snippets/button"`. Ein Zugriff auf das Dateisystem des Servers ist dabei nicht möglich — nachgesehen wird ausschliesslich in den Teilstücken des Themes.

Sandkasten im engeren Sinn gibt es nicht: keine Begrenzung der Renderdauer, keine Schleifengrenze, keine verbotenen Tags. Was begrenzt wird, sind die Schreibvorgänge — siehe den Artikel über das Bearbeiten des Codes.

Codebeispiele

Unbekannte Variablen und Filter schweigen
Liquid
Variable, die es nicht gibt: [{{ gibt_es_nicht }}]
Kette noch eine Ebene tiefer: [{{ gibt_es_nicht.und.tiefer }}]
Filter, den es nicht gibt: [{{ 'Crème Brûlée' | handleize }}]
Eine unbekannte Variable rendert leer, eine Kette über sie hinweg ebenfalls. Ein unbekannter Filter reicht den Wert unverändert durch — `handleize` gibt es in dieser Engine nicht, und niemand sagt es Ihnen.
Wahrheitswerte folgen JavaScript, nicht Shopify
Liquid
{%- assign leer = '' -%}{%- assign null_zahl = 0 -%}leere Zeichenkette: {% if leer %}wahr{% else %}falsch{% endif %}Zahl null: {% if null_zahl %}wahr{% else %}falsch{% endif %}Text mit einer Null: {% if '0' %}wahr{% else %}falsch{% endif %}
In anderen Liquid-Welten sind `""` und `0` WAHR. Hier nicht. Wer `{% if section.settings.abstand %}` schreibt, verliert damit still den Wert 0 — prüfen Sie in solchen Fällen auf `== nil`.
Es wird nichts maskiert
Liquid
Roh: {{ settings.fussnote }}
Maskiert: {{ settings.fussnote | escape }}
Was in `{{ … }}` steht, geht roh in die Seite — das ist Absicht, weil Vorlagen HTML erzeugen. Deshalb gehört JEDER Wert, den jemand anders eingetippt hat, durch `escape`, und jede Adresse durch `safe_url`.

Wo im Dashboard

/restaurant/[slug]/website/themes/[id]/code

Im Dashboard öffnen