Wie ein Theme aufgebaut ist

Die Verzeichnisse eines Themes, die vier Pflichtdateien und was passiert, wenn eine davon fehlt.

Für Entwickler

Voraussetzungen

  • Recht: website:write

Ein Theme ist ein Verzeichnisbaum. Vier Dateien sind PFLICHT: `theme.json` (das Manifest), `config/settings_schema.json`, `config/settings_data.json` und `layout/theme.liquid`. Fehlt eine davon, lässt sich das Theme nicht laden — und zwar hart, nicht mit einem Rückfall.

Alle übrigen Verzeichnisse sind freiwillig und werden nachsichtig gelesen: fehlen sie, bleibt die entsprechende Sammlung eben leer.

`templates/*.json` — je Datei eine Seitenvorlage; der Schlüssel ist der Dateiname ohne Endung. `sections/<typ>.liquid` — die Abschnitte; daneben optional `sections/<typ>.schema.json` mit ihren Einstellungen. `snippets/*.liquid` — Teilstücke für `{% render %}`. `assets/*` — Dateien, die unter einer eigenen Adresse ausgeliefert werden; eine Datei mit der Endung `.liquid` wird davor noch gerendert. `locales/<code>.json` — die Übersetzungen; ein `.default` im Dateinamen wird abgeschnitten, aus `de.default.json` wird also `de`.

ACHTUNG bei den Assets: Sie werden als Text gelesen. Bilder, Schriften und andere Binärdateien gehören deshalb NICHT nach `assets/` — sie würden beschädigt. Bilder kommen über die Mediathek und stehen als Adresse in einer Einstellung.

Das Manifest `theme.json` führt `id`, `name`, `version` und `category`; dazu optional `description`, `preview`, `tags`, `default_locale` und `supported_locales`. Ohne `default_locale` gilt Deutsch.

Eine Prüfung der Struktur gibt es nicht: kein Schema für das Manifest, keine Liste verlangter Dateien, kein Linter. Was beim Schreiben geprüft wird, ist nur die Pfadhygiene — siehe den Artikel über das Bearbeiten des Codes.

Codebeispiele

Der Verzeichnisbaum eines Themes
AusschnittText
mein-theme/├── theme.json                   ← Manifest (Pflicht)├── config/│   ├── settings_schema.json     ← welche Theme-Einstellungen es gibt (Pflicht)│   └── settings_data.json       ← die gespeicherten Werte (Pflicht)├── layout/│   └── theme.liquid             ← die Hülle um jede Seite (Pflicht)├── templates/│   ├── index.json               ← Startseite│   └── page.json                ← generische Unterseite├── sections/│   ├── tageskarte.liquid        ← ein Abschnitt│   └── tageskarte.schema.json   ← seine Einstellungen├── snippets/│   └── gericht-zeile.liquid     ← Teilstück für render├── assets/│   ├── theme.css                ← wird unverändert ausgeliefert│   └── theme.css.liquid         ← wird vor der Auslieferung gerendert└── locales/    ├── de.default.json          ← Standardsprache    └── en.json
Ausschnitt: läuft nicht für sich allein — er gehört an die passende Stelle einer bestehenden Vorlage.Die vier mit „Pflicht" bezeichneten Dateien müssen vorhanden sein. Alles andere darf fehlen — die jeweilige Sammlung bleibt dann leer, ohne Fehlermeldung.
theme.json
AusschnittJSON
{  "id": "mein-theme",  "name": "Mein Theme",  "version": "1.0.0",  "category": "fine-dining",  "description": "Ein Beispiel-Theme für die Dokumentation.",  "preview": "/theme-previews/mein-theme.jpg",  "tags": ["hell", "minimal"],  "default_locale": "de",  "supported_locales": ["de", "en"]}
Ausschnitt: läuft nicht für sich allein — er gehört an die passende Stelle einer bestehenden Vorlage.Pflicht sind `id`, `name`, `version` und `category`. Ohne `default_locale` gilt Deutsch. Das Manifest wird beim Einlesen NICHT gegen ein Schema geprüft — ein Tippfehler im Schlüsselnamen fällt erst dort auf, wo der Wert fehlt.

Wo im Dashboard

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

Im Dashboard öffnen