Das Layout: layout/theme.liquid
Die Hülle um jede Seite — mit content_for_layout und den fest eingebauten Abschnitten.
Für EntwicklerVoraussetzungen
- Recht: website:write
`layout/theme.liquid` ist die äussere Hülle jeder Seite: das `<html>`-Gerüst, der Kopfbereich, die Einbindung von CSS und JavaScript.
An der Stelle, an der die Seite selbst erscheinen soll, steht `{{ content_for_layout }}`. Dort setzt TacticTable die gerenderten Abschnitte der jeweiligen Vorlage ein.
Kopf- und Fussbereich gehören nicht in die Vorlagen, sondern ins Layout — dort mit `{% section "header" %}` und `{% section "footer" %}`. Deshalb sind sie im Theme-Editor unverrückbar und tragen das Kennzeichen „Fix".
Im Layout steht zusätzlich das Objekt `sections` bereit: eine Zuordnung vom Dateinamen eines Abschnitts auf seine Einstellungen und Blöcke. Damit kommen Sie im Kopfbereich an Werte heran, die in einem Abschnitt hinterlegt sind.
Eine Besonderheit des `{% section %}`-Tags: Der damit gerenderte Abschnitt bekommt `section.id`, `section.settings` und `section.blocks` — aber KEIN `section.type`. Abschnitte, die aus einer Vorlage kommen, haben es. Fragen Sie in einer Datei, die beides bedienen soll, also nicht danach.
Codebeispiele
<!doctype html><html lang="{{ locale }}"><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>{% if page_meta.title %}{{ page_meta.title }}{% elsif page_title %}{{ page_title }} · {{ restaurant.name }}{% else %}{{ restaurant.name }}{% endif %}</title> {%- if page_meta.description %} <meta name="description" content="{{ page_meta.description | escape }}"> {%- elsif restaurant.description %} <meta name="description" content="{{ restaurant.description | escape }}"> {%- endif %} {%- if restaurant.icon_url %} <link rel="icon" href="{{ restaurant.icon_url | safe_url }}"> {%- endif %} <link rel="stylesheet" href="{{ 'theme.css' | asset_url }}"> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family={{ settings.font_headline | font_url_family }}:wght@400;600&display=swap"></head><body> {% section 'kopf' %} <main>{{ content_for_layout }}</main> {%- if widget.display_mode == 'floating' %} <script src="{{ widget.loader_url | safe_url }}" data-slug="{{ widget.slug }}" data-mode="floating" async></script> {%- endif %} {%- if analytics.enabled %} <script src="{{ analytics.script_url | safe_url }}" data-slug="{{ analytics.slug }}" defer></script> {%- endif %}</body></html><header class="kopf" data-abschnitt="{{ section.id }}"> {%- assign logo = section.settings.logo | default: settings.logo | default: restaurant.logo_url | safe_url -%} {% if logo != blank %} <a href="/"><img src="{{ logo }}" alt="{{ restaurant.name | escape }}" style="width:{{ section.settings.logo_breite | default: 140 }}px"></a> {% else %} <a href="/">{{ restaurant.name | escape }}</a> {% endif %} <nav> {%- assign hauptmenue = navigation_menus_by_handle['hauptmenue'] -%} {% for eintrag in hauptmenue.items %} <a href="{{ eintrag.url | safe_url }}"{% if eintrag.open_in_new %} target="_blank" rel="noopener"{% endif %}>{{ eintrag.label | escape }}</a> {% endfor %} </nav> <a class="knopf" href="{{ restaurant.booking_url | safe_url }}">{{ 'kopf.reservieren' | t }}</a></header>{ "name": "Kopfbereich", "settings": [ { "type": "image_picker", "id": "logo", "label": "Logo", "info": "Leer lassen: dann gilt das Logo aus den Website-Einstellungen." }, { "type": "range", "id": "logo_breite", "label": "Logo-Breite", "min": 80, "max": 320, "step": 4, "default": 140, "unit": "px" } ], "default": { "settings": { "logo_breite": 140 } }}Überschrift der Tageskarte: {{ sections.tageskarte.settings.ueberschrift }}
Logo-Breite aus dem Kopfbereich: {{ sections.kopf.settings.logo_breite }}px
Kennung, unter der die Tageskarte in der Vorlage steht: {{ sections.tageskarte.id }}Meldungen, die hierher gehören
Siehe auch
- Einen eigenen Abschnitt bauenZwei Dateien genügen: die Vorlage und ihr Schema — danach steht der Abschnitt im Theme-Editor zur Auswahl.
- Seitenvorlagen: templates/*.jsonWelche Abschnitte auf welcher Seite stehen, in welcher Reihenfolge — und wie man Liquid in einen Einstellungswert schreibt.
- Das Objekt section und seine zwei GesichterWas innerhalb eines Abschnitts zur Verfügung steht — und der eine Unterschied zwischen Rumpf und Layout.