Shopify Section mit Blocks erstellen: sauberes Liquid-Beispiel

Eine eigene Shopify-Section mit frei sortierbaren Vorteilen: Dieses Beispiel zeigt Liquid, JSON-Schema, Presets, Editor-Attribute und die wichtigsten Tests.

Eine gute Shopify-Section ist wie ein wiederverwendbarer Baukasten: Das Layout bleibt stabil, während Texte und Reihenfolge im Theme-Editor geändert werden. Dafür brauchst du keine zusätzliche App.

Hier bauen wir eine kleine Vorteile-Section mit beliebig sortierbaren Karten. Sie passt zu einer Firmen- oder Produktseite und demonstriert die wichtigsten Grundlagen: section.settings, section.blocks, block.shopify_attributes und presets.

Was wir bauen

Die Section besteht aus einer Überschrift und einer Liste einzelner Vorteile:

  • Überschrift: „Darum bei uns bestellen“.
  • Je Karte: kurzer Titel und Beschreibung.
  • Reihenfolge und Anzahl: im Theme-Editor veränderbar.
  • Ohne JavaScript, ohne externe Bibliothek.

Die Ausgabe verwendet eine semantische Liste. Das ist für kurze gleichartige Vorteile häufig sinnvoller als mehrere unverbundene div-Elemente.

Vollständige Section: sections/benefit-grid.liquid

Lege in einer Kopie deines Themes die folgende Datei an. Shopify erwartet im schema-Tag gültiges JSON; Liquid-Ausdrücke gehören außerhalb dieses Blocks.

<section class="benefit-grid" id="benefit-grid-{{ section.id }}">
  <div class="benefit-grid__inner">
    {%- if section.settings.heading != blank -%}
      <h2>{{ section.settings.heading | escape }}</h2>
    {%- endif -%}

    {%- if section.blocks.size > 0 -%}
      <ul class="benefit-grid__list">
        {%- for block in section.blocks -%}
          {%- case block.type -%}
            {%- when 'benefit' -%}
              {%- assign title = block.settings.title -%}
              {%- assign text = block.settings.text -%}
              {%- if title != blank or text != blank -%}
                <li class="benefit-grid__item" {{ block.shopify_attributes }}>
                  {%- if title != blank -%}
                    <h3>{{ title | escape }}</h3>
                  {%- endif -%}
                  {%- if text != blank -%}
                    <p>{{ text | escape }}</p>
                  {%- endif -%}
                </li>
              {%- endif -%}
          {%- endcase -%}
        {%- endfor -%}
      </ul>
    {%- endif -%}
  </div>
</section>

{% schema %}
{
  "name": "Vorteile",
  "tag": "section",
  "class": "shopify-section--benefits",
  "settings": [
    {
      "type": "text",
      "id": "heading",
      "label": "Überschrift",
      "default": "Darum bei uns bestellen"
    }
  ],
  "blocks": [
    {
      "type": "benefit",
      "name": "Vorteil",
      "settings": [
        {
          "type": "text",
          "id": "title",
          "label": "Titel",
          "default": "Gut durchdacht"
        },
        {
          "type": "textarea",
          "id": "text",
          "label": "Beschreibung"
        }
      ]
    }
  ],
  "max_blocks": 6,
  "presets": [
    {
      "name": "Vorteile",
      "blocks": [
        {
          "type": "benefit",
          "settings": {
            "title": "Klare Produktangaben",
            "text": "Alle relevanten Informationen auf einen Blick."
          }
        },
        {
          "type": "benefit",
          "settings": {
            "title": "Einfach bestellen",
            "text": "Ein übersichtlicher Weg vom Produkt zum Warenkorb."
          }
        }
      ]
    }
  ]
}
{% endschema %}

Wichtig: Diese Texte sind neutrale Demo-Inhalte. Ersetze sie im Shop durch Aussagen, die du tatsächlich belegen kannst.

Warum diese Liquid-Struktur?

section.settings.heading

Der Wert stammt aus einem Einstellungselement der Section. Ein blank-Check verhindert eine leere Überschrift. Der Filter escape schützt die Ausgabe eines einfachen Textfelds vor HTML-Markup.

section.blocks

Die Schleife erzeugt eine Karte je Block. Der Blocktyp benefit kann später um andere Typen ergänzt werden. max_blocks begrenzt die Anzahl auf sechs, damit die Darstellung überschaubar bleibt.

block.shopify_attributes

Dieses Attribut unterstützt den Theme-Editor dabei, den konkreten Block auf der Seite zu erkennen und zu fokussieren. Deshalb gehört es auf das umschließende HTML-Element des Blocks. Shopify dokumentiert das unter Liquid – block.

presets

Das Preset macht die Section im „Section hinzufügen“-Dialog des Theme-Editors verfügbar und liefert einen nachvollziehbaren Beispielzustand. Ohne passendes Preset können Sections in JSON-Templates nicht einfach über denselben Editor-Ablauf hinzugefügt werden.

Quelle: Shopify – Section Schema.

CSS ohne JavaScript

Lege die Styles im vorhandenen Theme-CSS ab – abhängig vom Theme zum Beispiel in einem dedizierten Asset, das die Section lädt. Der folgende Code ist bewusst klein und ohne fest verdrahtete Farbvorgaben gehalten.

.benefit-grid__inner {
  width: min(100% - 2rem, 72rem);
  margin-inline: auto;
}
.benefit-grid__list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
  gap: 1rem;
  list-style: none;
  padding: 0;
  margin: 1.5rem 0 0;
}
.benefit-grid__item {
  min-width: 0;
  padding: 1.25rem;
  border: 1px solid currentColor;
}
.benefit-grid__item h3 { margin: 0 0 .5rem; }
.benefit-grid__item p { margin: 0; overflow-wrap: anywhere; }

Das responsive Grid verhindert, dass eine Karte wegen einer festen Breite den mobilen Viewport sprengt. Passe Farben, Fokuszustände und Abstände an dein bestehendes Designsystem an.

Fünf Tests vor dem Livegang

  1. Theme-Kopie nutzen: Nicht direkt im veröffentlichten Theme experimentieren.
  2. Editor testen: Section hinzufügen, Karten sortieren, löschen und neu anlegen.
  3. Leere Werte prüfen: Keine leeren h2-, h3- oder Listen-Container ausgeben.
  4. Responsive prüfen: Schmale Displays, Zoom auf 200 % und lange Titel testen.
  5. HTML prüfen: Überschriftenhierarchie und semantische Liste im gerenderten DOM kontrollieren.

Bei mehreren Sections auf derselben Seite müssen ihre CSS-Regeln unabhängig funktionieren. Deshalb sind spezifische Klassen besser als globale Selektoren wie section h2.

Wann wäre eine App Extension sinnvoller?

Diese Section ist im Theme verankert. Soll derselbe Funktionsbaustein über viele Shops als eigenständige App bereitstehen, lohnt der Blick auf Theme App Extension oder Section.

Für Daten je Produkt kannst du die Section außerdem mit Shopify-Metafeldern und Metaobjekten verbinden. Für individuelle Shop-Layouts findest du weitere Informationen unter Shopify-Webdesign und Entwicklung.

Fazit

Die Kombination aus klarer Liquid-Ausgabe, validem Schema, Editor-Attributen und einem Preset schafft eine überschaubare, gut wartbare Shopify-Section. Beginne mit wenigen Optionen. Jede zusätzliche Einstellung sollte einen echten Zweck erfüllen.

War dieser Artikel hilfreich?

Dein Feedback hilft uns, unsere Ratgeber zu verbessern.

Mit Digitalhaus Kunze gearbeitet?

Dann freuen wir uns über deine ehrliche Erfahrung auf Google – unabhängig davon, ob sie positiv oder kritisch war.

Auf Google bewerten

Artikel teilen

WhatsApp ↗ LinkedIn ↗ E-Mail ↗

Alle Ratgeberartikel

DIGITALHAUS / REGIONEN

In deiner Region aktiv.

Entdecke die verfügbaren regionalen Leistungsseiten. Betreut aus Wettin-Löbejün im Saalekreis.

Rhein-Neckar

Auch im Umfeld: Heidelberg · Ludwigshafen am Rhein · Schwetzingen · Viernheim

Halle & Saalekreis

Auch im Umfeld: Bad Dürrenberg · Landsberg · Leuna · Petersberg · Salzatal · Schkopau · Wettin-Löbejün

Leipzig & Umgebung

Auch im Umfeld: Delitzsch · Markkleeberg · Markranstädt · Schkeuditz · Taucha

Salzlandkreis

Auch im Umfeld: Alsleben (Saale) · Arnstein · Barby · Bördeland · Calbe (Saale) · Güsten · Ilberstedt · Könnern · Nienburg (Saale) · Seeland

Anhalt-Bitterfeld

Auch im Umfeld: Aken (Elbe) · Muldestausee · Osternienburger Land · Raguhn-Jeßnitz · Sandersdorf-Brehna · Südliches Anhalt · Zörbig

Magdeburg & Umgebung

Auch im Umfeld: Biederitz · Sülzetal · Wolmirstedt

Dessau-Roßlau & Umgebung

Auch im Umfeld: Aken (Elbe) · Coswig (Anhalt) · Oranienbaum-Wörlitz

Mansfeld-Südharz

Auch im Umfeld: Gerbstedt · Goldene Aue · Großörner · Klostermansfeld · Mittelhausen · Niederröblingen · Oberröblingen · Siebigerode · Vatterode · Walbeck · Wettelrode · Wolferstedt

Rhein-Main-Gebiet

Auch im Umfeld: Aschaffenburg · Bruchköbel · Budenheim · Bürgel · Dreieich · Flörsheim am Main · Friedrichsdorf · Griesheim · Groß-Gerau · Hofheim am Taunus · Ingelheim am Rhein · Kaiserlei · Langen (Hessen) · Maintal · Ober-Eschbach · Oberursel (Taunus) · Pfungstadt · Raunheim · Schwalbach am Taunus · Sulzbach (Taunus) · Taunusstein · Weiterstadt

Thüringen

Auch im Umfeld: Apolda · Arnstadt · Gotha · Rudolstadt · Stadtroda · Weimar

Sachsen

Auch im Umfeld: Freiberg · Freital · Mittweida · Pirna · Radebeul · Zwickau

Harz

Auch im Umfeld: Allrode · Bad Suderode · Ballenstedt · Derenburg · Drei Annen Hohne · Friedrichsbrunn · Gernrode · Heimburg · Hüttenrode · Huy · Ilsenburg · Langenstein · Osterwieck · Schierke · Treseburg