Häufige Fehler und woran man sie erkennt

Was passiert bei einem unbekannten Abschnitt, bei einer fehlenden Einstellung, bei einer Schleife über nichts — und welche Fehler die Seite wirklich abbrechen.

Für Entwickler

Voraussetzungen

  • Recht: website:write

Die meisten Fehler in dieser Engine sind STILL. Das ist die wichtigste Eigenschaft, die man beim Suchen kennen muss: Eine leere Stelle im Ergebnis kann ein Tippfehler sein, ein fehlender Wert oder ein Filter, den es nicht gibt — von aussen sehen alle drei gleich aus.

UNBEKANNTER ABSCHNITT im `{% section %}`-Tag: Es erscheint ein HTML-Kommentar `<!-- section "name" not found -->` und die Seite läuft weiter. Schauen Sie in den Quelltext, wenn ein Kopf- oder Fussbereich fehlt.

UNBEKANNTER ABSCHNITTSTYP in einer Vorlage: Dasselbe in Grün, nur mit anderem Wortlaut — `<!-- section type "typ" missing -->`. Ursache ist fast immer ein `type` in der Vorlage, zu dem keine Datei `sections/<typ>.liquid` gehört.

FEHLENDE EINSTELLUNG: Leere Ausgabe, kein Fehler. Prüfen Sie zuerst die Schreibweise der `id` im Schema — sie ist der Schlüssel unter `section.settings`, und niemand vergleicht die beiden.

SCHLEIFE ÜBER NICHTS: null Runden, kein Fehler. Ein `{% else %}`-Zweig macht daraus eine sichtbare Aussage.

UNBEKANNTER FILTER: Der Wert geht unverändert durch. Aus `{{ preis | money_with_currency }}` wird die nackte Zahl. Das ist die häufigste Ursache für „sieht kaputt aus, steht aber nichts im Log".

WAS WIRKLICH ABBRICHT — und zwar die GANZE Seite, nicht nur den Abschnitt: ein unbekanntes Tag (`{% schema %}`, `{% style %}`, `{% form %}`, `{% javascript %}`, `{% stylesheet %}`, `{% paginate %}`), ein Syntaxfehler in einer Klammer und ein `{% render %}` auf ein Teilstück, das es nicht gibt.

Wenn gespeicherte Änderungen gar nicht erscheinen, liegt es meist nicht am Liquid: Kann der Git-Zweig nicht gelesen werden, wird still die mitgelieferte Vorlage von der Platte ausgeliefert. Das ist die erste Stelle zum Nachsehen.

Codebeispiele

Unbekannter Abschnitt: nur ein Kommentar
Liquid
{% section 'gibt-es-nicht' %}
Die Seite läuft weiter, im Quelltext steht ein Kommentar. Genau deshalb sucht man den fehlenden Fussbereich manchmal lange — im gerenderten Bild ist da einfach nichts.
Unbekannter Abschnittstyp in einer Vorlage
AusschnittHTML
<!-- section type "tageskrate" missing -->
Ausschnitt: läuft nicht für sich allein — er gehört an die passende Stelle einer bestehenden Vorlage.Kein Liquid, sondern das, was im Quelltext steht: In `templates/index.json` stand ein `type`, zu dem es keine Datei `sections/<typ>.liquid` gibt. In neun von zehn Fällen ein Dreher im Dateinamen.
Fehlende Einstellung: still leer
Liquid
ohne Rückfall: [{{ section.settings.gibt_es_nicht }}]
mit Rückfall: [{{ section.settings.gibt_es_nicht | default: 'Vorgabe' }}]
so fällt es auf: {% if section.settings.gibt_es_nicht == blank %}<!-- Einstellung gibt_es_nicht ist leer -->{% endif %}
Die dritte Zeile ist der Kniff: ein HTML-Kommentar während der Entwicklung macht aus einer leeren Stelle eine Aussage. Vor dem Veröffentlichen wieder entfernen.
Schleife über nichts
Liquid
vorher{% for eintrag in gibt_es_nicht %}NIEMALS{% endfor %}nachher
{% for eintrag in gibt_es_nicht %}{{ eintrag }}{% else %}<!-- Liste ist leer oder fehlt -->{% endfor %}
Null Runden, kein Fehler — auch dann, wenn die Variable gar nicht existiert. Das `{% else %}` ist die einzige Stelle, an der Sie den Unterschied sichtbar machen können.
Ein Tippfehler im Objektnamen fällt nicht auf
Liquid
richtig: [{{ restaurant.name }}]Tippfehler im Objekt: [{{ restaurants.name }}]Tippfehler im Feld: [{{ restaurant.namen }}]falsches Objekt aus einer anderen Liquid-Welt: [{{ shop.name }}]
Drei Fehler, dreimal dieselbe leere Klammer. Es gibt keine strenge Betriebsart, die das meldet — der Diagnose-Schnipsel aus dem Artikel über die Objekte ist deshalb der schnellste Weg, die richtigen Namen nachzusehen.
money auf einer leeren Zeichenkette ergibt null Euro
Liquid
leere Zeichenkette: [{{ '' | money }}]
gar nichts: [{{ gibt_es_nicht | money }}]
Text: [{{ 'kostenlos' | money }}]
Eine LEERE Zeichenkette wird zur Zahl null und damit zu „0,00 €" — in einer Preisspalte ist das schlimmer als gar nichts, weil es wie ein gepflegter Wert aussieht. Prüfen Sie deshalb vorher mit `!= blank`. Ein nicht gesetzter Wert und ein Text bleiben dagegen unverändert.
Was die ganze Seite abbricht
AusschnittLiquid
{% schema %}{ "name": "Abschnitt" }{% endschema %}{% style %}.a { color: red; }{% endstyle %}{% render 'teilstueck-das-es-nicht-gibt' %}{% if %}Klammer ohne Bedingung{% endif %}
Ausschnitt: läuft nicht für sich allein — er gehört an die passende Stelle einer bestehenden Vorlage.NICHT prüfbar, weil jede dieser vier Zeilen absichtlich abbricht. Die ersten beiden und die vierte scheitern schon beim Zerlegen der Vorlage, also bevor irgendetwas gerendert wird — betroffen ist dann die ganze Seite, nicht nur der Abschnitt. Das `{% render %}` scheitert beim Rendern mit `ENOENT: Failed to lookup`. Im Editor sehen Sie in allen vier Fällen eine Fehlermeldung mit Zeile und Spalte; nutzen Sie sie, statt zu raten.

Wo im Dashboard

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

Im Dashboard öffnen