Datensätze im Theme: Detail- und Übersichtsseiten
Detail-Templates je Datentyp mit record, Übersichten mit dem collection-Setting, JSON-Islands und automatische Rebuilds.
Detailseiten
Für jeden veröffentlichten Eintrag rendert Mosaio eine Seite, wenn das Theme templates/data.<handle>.liquid enthält und der Datentyp ein URL-Muster wie /blog/{slug} hat. Fehlt das Template, wird der Eintrag ohne Fehlermeldung übersprungen.
{# templates/data.blog.liquid #}
{%- assign _parts = record.url | split: '/' -%}
{%- assign overview_url = '/' | append: _parts[1] -%}
<section class="section">
<div class="section__inner">
<a href="{{ overview_url }}" class="btn btn--ghost">← Zurück zur Übersicht</a>
{%- if record.cover -%}
<img src="{{ record.cover.url | image_url }}" alt="{{ record.title | escape }}">
{%- endif -%}
<h1>{{ record.title }}</h1>
{%- if record.published_at -%}<p>{{ record.published_at | date: "%d.%m.%Y" }}</p>{%- endif -%}
{%- if record.content != blank -%}<div>{{ record.content | raw }}</div>{%- endif -%}
</div>
</section>Detail-Templates haben keinen
{% schema %}-Block.Header und Footer werden automatisch ergänzt.
record.id,record.slugundrecord.urlsind immer vorhanden (urlnur mit URL-Muster).
Feldwerte in Liquid
| Feldtyp | Wert |
|---|---|
| Text, Zahl, Auswahl … | primitiver Wert |
| Richtext | HTML → | raw |
| Bild | Objekt { id, url } → {{ record.cover.url | image_url }} |
| Datum / Datum & Uhrzeit | ISO-String → | date |
| Referenz | aufgelöste Objekte (nur Detailseite) |
Übersichtsseiten
<section class="section">
{% if section.collection %}
<div class="grid">
{% for item in section.collection %}
<a href="{{ item.url }}" class="card">
{% if item.image %}<img src="{{ item.image.url | image_url }}" alt="{{ item.title | escape }}" loading="lazy">{% endif %}
<h3>{{ item.title }}</h3>
</a>
{% endfor %}
</div>
{% else %}
<p>Kein Datentyp gewählt.</p>
{% endif %}
</section>
{% schema %}
{
"name": "Datensatz-Liste",
"category": "Daten",
"enabled_on": { "groups": ["body"] },
"settings": [
{ "type": "collection", "id": "datentyp", "label": "Datentyp" },
{ "type": "text", "id": "heading", "label": "Überschrift" }
],
"presets": [ { "name": "Datensatz-Liste" } ]
}
{% endschema %}section.collectionist nach Position sortiert und auf 250 Einträge begrenzt.Schwere Felder (Richtext, JSON, Wiederholbar) fehlen in Listen – sie gehören auf die Detailseite.
section.collection_metalieferthandle,totalundurl_pattern.Ist der Typ nicht öffentlich, ist
section.collectionleer – immer mit{% if %}prüfen.
Immer aktuell
Mosaio merkt sich, welche Seiten welchen Datentyp verwenden (über das collection-Setting oder collections.<handle>). Wird ein Eintrag veröffentlicht, depubliziert oder gelöscht, baut der Worker Detailseite und alle betroffenen Übersichten neu.
JSON-Island für eigenes JavaScript
<script type="application/json" data-collection-island>
{{ section.collection | pick: 'id', 'url', 'title', 'ort', 'preis' | json }}
</script>Setze Werte aus dem Island im JavaScript nur mit
textContentoder Attribut-Settern ein, nie perinnerHTML– die Daten stammen aus Nutzereingaben.
Unser Support antwortet in der Regel innerhalb eines Werktags.