Ihr Content-Modell ist die Gesamtheit der Collections und Felder, die Ihre Website speichert. Sie definieren es im Admin-Panel oder mit der CLI, ändern es bei Bedarf und generieren optional TypeScript-Typen daraus. Diese Seite zeigt, wie Sie damit arbeiten.
Collections und Felder
Eine Collection ist ein Inhaltstyp (Posts, Produkte, Autoren). Jede Collection hat Felder, die Sie definieren (ein Titel, ein Text, ein Preis). Jeder Eintrag hat außerdem Systemfelder, die EmDash für Sie verwaltet.
Sie erstellen und bearbeiten Collections und Felder visuell im Admin-Panel unter Content Types oder mit der CLI. Änderungen werden sofort wirksam, und ein Nicht-Entwickler kann dies tun.
Systemfelder
Zusätzlich zu den von Ihnen definierten Feldern hat jeder Eintrag diese Felder, die immer vorhanden sind:
| Feld | Zweck |
|---|---|
id | Stabiler eindeutiger Bezeichner |
slug | URL-sicherer Bezeichner, eindeutig pro Locale |
status | draft, published oder scheduled |
author_id | Der Benutzer, der den Eintrag erstellt hat |
created_at / updated_at / published_at | Zeitstempel |
deleted_at | Bei Soft-Delete gesetzt; die Zeile bleibt |
version | Wird bei jedem Speichern erhöht |
Das Löschen eines Eintrags ist ein Soft-Delete: Er kann wiederhergestellt werden.
Das Modell jederzeit ändern
Sie können jederzeit ein Feld einer Live-Collection hinzufügen, umbenennen, entfernen oder neu typisieren — über das Admin-Panel oder die CLI. Vorhandene Inhalte bleiben erhalten.
TypeScript-Typen
Die Typgenerierung ist optional, aber empfohlen. Generieren Sie Typen aus Ihrem aktuellen Modell:
npx emdash types
Dies schreibt .emdash/types.ts mit einem Interface pro Collection und typisierten Query-Überladungen, sodass getEmDashCollection("posts") vollständig typisierte Einträge zurückgibt:
export interface Post {
title: string;
content: PortableTextBlock[];
excerpt?: string;
}
declare module "emdash" {
export function getEmDashCollection(
type: "posts",
): Promise<{ entries: ContentEntry<Post>[]; error?: Error }>;
}
Führen Sie den Befehl nach Modelländerungen erneut aus, um die Typen synchron zu halten.
Workflows
Beide Workflows ändern dasselbe Modell.
Ein Nicht-Entwickler nutzt das Admin-Panel:
- Öffnen Sie Content Types im Admin-Panel.
- Klicken Sie auf Add Collection.
- Definieren Sie Felder mit dem visuellen Builder.
- Beginnen Sie mit der Erstellung von Inhalten.
Ein Entwickler kann die CLI verwenden, um Typen zu generieren und das Modell zwischen Umgebungen zu verschieben:
npx emdash types # TypeScript-Typen generieren
npx emdash export-seed > seed.json # Modell als Seed-Datei exportieren
Seed-Dateien
Eine Seed-Datei ist eine JSON-Beschreibung von Collections, Taxonomien und Menüs. Templates liefern eine mit, und Sie können Ihre eigene für die Versionskontrolle oder zum Einrichten einer anderen Umgebung exportieren.
{
"version": "1",
"collections": [
{
"slug": "posts",
"label": "Blog Posts",
"labelSingular": "Post",
"supports": ["drafts", "revisions", "preview"],
"fields": [
{ "slug": "title", "type": "string", "required": true },
{ "slug": "content", "type": "portableText" }
]
}
],
"taxonomies": [{ "name": "category", "label": "Categories", "hierarchical": true }],
"menus": [{ "name": "primary", "label": "Primary Navigation" }]
}
Das Anwenden eines Seeds ist idempotent, es ist also sicher, ihn erneut auszuführen:
import { applySeed, validateSeed } from "emdash/seed";
import seedData from "./.emdash/seed.json";
const { valid, errors } = validateSeed(seedData);
await applySeed(db, seedData, { includeContent: true, onConflict: "skip" });
Siehe Seed-Dateiformat für das vollständige Schema.
Nächste Schritte
Collections
Definieren Sie Feldtypen und Validierung.
Admin Panel
Sehen Sie sich das Admin-Panel an.
Seeding
Richten Sie Websites mit Seed-Dateien ein.