Zum Inhalt springen

Page Builder

Der Page Builder ist der zentrale Bereich im Admin zum Bearbeiten von Seiteninhalten. Er zeigt die echte Seite im iframe und ermöglicht Live-Editing — Änderungen werden direkt in der Vorschau sichtbar.

Konzept: Registry + SetzKastenPage

Das Zusammenspiel basiert auf zwei Bausteinen: Die Registry mappt Section-Types auf Komponenten-Pfade, und die SetzKastenPage-Komponente rendert die Sections einer Seite automatisch in der richtigen Reihenfolge.

defineRegistry() definiert, welche Section-Types verfügbar sind. definePage() legt fest, welche Sections auf einer Seite erlaubt sind. Gleiche Types können mehrfach auf einer Seite vorkommen — mit unterschiedlichen Keys (z.B. hero und hero--about).

setzkasten.config.ts

Die zentrale Konfiguration definiert Registry und Pages. Jeder Eintrag in registry mappt einen Section-Type auf den Pfad zur Astro-Komponente. Jede Page hat ein Label und eine Liste erlaubter Section-Types.

setzkasten.config.ts
import { defineConfig, defineRegistry, definePage } from '@setzkasten-cms/core'

export default defineConfig({
  registry: defineRegistry({
    hero: './src/components/HeroSection.astro',
    features: './src/components/FeaturesSection.astro',
    cta: './src/components/CTASection.astro',
  }),
  pages: {
    index: definePage({ label: 'Startseite', allowedSections: ['hero', 'features', 'cta'] }),
    about: definePage({ label: 'Über uns', allowedSections: ['hero', 'cta'] }),
  },
  // ... products, auth, storage
})

SetzKastenPage in einer Astro-Seite

In der Astro-Seite wird die SetzKastenPage-Komponente eingebunden. Die componentMap übergibt die tatsächlichen Komponenten-Importe. Der pageKey referenziert die Page-Definition aus der Config.

src/pages/index.astro
---
import { SetzKastenPage } from '@setzkasten-cms/astro/SetzKastenPage'
import HeroSection from '../components/HeroSection.astro'
import FeaturesSection from '../components/FeaturesSection.astro'
import CTASection from '../components/CTASection.astro'

const componentMap = { hero: HeroSection, features: FeaturesSection, cta: CTASection }
---

Section-Management im Page Builder

Der Page Builder bietet eine vollständige Verwaltung aller Sections einer Seite. Jede Section wird mit einer Toolbar angezeigt, die folgende Aktionen bereitstellt:

Aktion Icon Beschreibung
Löschen Trash Zwei Klicks zur Bestätigung — erster Klick zeigt Warnung, zweiter löscht
Duplizieren Copy Erstellt eine Kopie der Section. Key wird automatisch zu hero--copy
Hinzufügen + Öffnet Picker-Modal mit verfügbaren Types aus der Registry
Sortieren Drag-Handle Reihenfolge per Drag & Drop ändern
Ein-/Ausblenden Auge Section bleibt erhalten, wird aber nicht gerendert

Page-Config JSON

Der Page Builder speichert die Konfiguration jeder Seite als JSON-Datei unter content/pages/. Hier wird festgelegt, welche Sections in welcher Reihenfolge auf der Seite erscheinen. Bei Multi-Instanzen (gleicher Type, verschiedene Keys) wird der type explizit angegeben.

content/pages/_index.json
{
  "label": "Startseite",
  "sections": [
    { "key": "hero", "enabled": true, "order": 0 },
    { "key": "features", "enabled": true, "order": 1 },
    { "key": "hero--about", "type": "hero", "enabled": true, "order": 2 }
  ]
}
Hinweis: Die Page-Config wird vom Page Builder automatisch verwaltet. Manuelle Änderungen an der JSON-Datei sind möglich, sollten aber nur bei Bedarf vorgenommen werden — der Page Builder überschreibt die Datei beim nächsten Speichern.