Block-System
Wie Blöcke im Headless-Modell funktionieren - defineBlock, Instanzen, die Komponente, Context und der Data-Loader.
Überblick
Blöcke sind die Bausteine jeder Cmssy-Seite. Im Headless-Modell ist ein Block eine React-Komponente in deinem eigenen Next.js-Repo, deklariert mit defineBlock und einem fields-Schema. Im Cmssy-Admin platzieren und konfigurieren Redakteure Block-Instanzen; deine Site rendert sie mit dem SDK. Ein Block hat drei Teile:
- Schema (
fields) — die editierbaren Felder im Admin - Komponente — die React-Komponente, die den Inhalt rendert
- Registrierung — der Block wird zum Array in
cmssy/blocks.tshinzugefügt
Einen Block definieren
Ein Block wird mit defineBlock und einem fields-Schema deklariert, und seine Komponente leitet ihre Props aus genau diesem Schema ab: BlockProps<typeof props> - ein Feld wird also an exakt einer Stelle benannt. Block-Entwicklung führt komplett hindurch; Schema & Feldtypen listet alle Feldtypen.
Block-Instanzen
Wenn ein Redakteur deinen Block zu einer Seite hinzufügt, speichert Cmssy eine Block-Instanz:
{
id: string; // unique UUID for this instance
type: string; // matches your block's `type` (e.g. "hero")
content: Record<string, unknown>; // language-keyed field values
}Inhalte werden pro Sprache gespeichert ({ en: {...}, pl: {...} }); das SDK löst die aktive Locale auf, bevor es content an deine Komponente übergibt - du liest die Felder also direkt.
Die Komponente, Context & Daten
Deine Komponente erhält { content, context, data }. content ist bereits für die aktive Locale aufgelöst und aus deinem Schema typisiert; context trägt locale und isPreview, dazu forms sowie auth / workspace, wenn deine App sie über buildBlockContext liefert; data ist das Ergebnis eines Server-Loaders.
Die Registrierung ist ein Array, cmssy/blocks.ts, und es ist die einzige Quelle der Wahrheit: Es steuert das Rendering, und der Editor lernt daraus über die SDK-Bridge das Schema jedes Blocks - der Picker zeigt also immer genau das, was deine Site rendern kann. Blöcke gehen mit dem Deploy deiner App live; einen separaten Block-Build oder -Publish gibt es nicht.
Layout-Blöcke
Header, Footer und andere geteilte Bereiche sind Layout-Blöcke — identisch mit Seiten-Blöcken, aber mit layoutPositions markiert (z. B. ["header"]) und von CmssyServerLayout pro Position gerendert.
Internationalisierung
Inhalte sind im CMS pro Sprache gespeichert und werden pro Request aufgelöst. Das Routing läuft über Pfad-Prefix (/pl/*), die Standard-Locale nutzt saubere URLs. Lies die aktive und die aktivierten Locales aus context.locale.
Nächste Schritte
- Block-Entwicklung — vollständige Anleitung: definieren, Komponente, registrieren, deployen
- Schema & Feldtypen — alle Feldtypen, Repeater, Gruppen
- Erweiterte Funktionen — Layout-Blöcke, Styling, Server-Loader