EmDash unterstützt 14 Feldtypen zur Definition von Inhaltsschemata. Jeder Typ wird auf einen SQLite-Spaltentyp abgebildet und liefert passende Admin-UI.
Overview
| Type | SQLite Column | Description |
|---|---|---|
string | TEXT | Kurzes einzeiliges Eingabefeld |
text | TEXT | Mehrzeiliger Text |
number | REAL | Dezimalzahl |
integer | INTEGER | Ganze Zahl |
boolean | INTEGER | Wahr/Falsch |
datetime | TEXT | Datum und Uhrzeit |
select | TEXT | Einzelauswahl aus Optionen |
multiSelect | JSON | Mehrfachauswahl |
portableText | JSON | Rich-Text-Inhalt |
image | TEXT | Bildreferenz |
file | TEXT | Dateireferenz |
reference | TEXT | Verweis auf anderen Eintrag |
json | JSON | Beliebige JSON-Daten |
slug | TEXT | URL-sicherer Identifier |
Text Types
string
Kurzer einzeiliger Text. Für Titel, Namen und kurze Werte.
{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}
Validation options:
minLength— Mindestanzahl ZeichenmaxLength— Höchstanzahl Zeichenpattern— Zu treffendes Regex-Muster
Widget options:
- Keine spezifischen
text
Mehrzeiliger Klartext. Für Beschreibungen, Auszüge und längeren Klartext.
{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}
Validation options:
minLength— Mindestanzahl ZeichenmaxLength— Höchstanzahl Zeichen
Widget options:
rows— Zeilenanzahl im Textarea (Standard: 3)
slug
URL-sicherer Identifier. Wird automatisch aus einem anderen Feld erzeugt oder manuell eingegeben.
{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}
Slugs werden automatisch bereinigt: kleingeschrieben, Leerzeichen zu Bindestrichen, Sonderzeichen entfernt.
Number Types
number
Dezimalzahl. Für Preise, Bewertungen und Maße.
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}
Validation options:
min— Minimalwertmax— Maximalwert
Gespeichert als SQLite REAL (64-Bit-Gleitkomma).
integer
Ganze Zahl. Für Mengen, Zähler und Sortierwerte.
{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}
Validation options:
min— Minimalwertmax— Maximalwert
Gespeichert als SQLite INTEGER.
boolean
Wahr oder falsch. Für Schalter und Flags.
{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}
Gespeichert als SQLite INTEGER (0 oder 1).
Date and Time
datetime
Datum und Uhrzeit. Gespeichert im ISO-8601-Format.
{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}
Validation options:
min— Frühestes Datum (ISO-String)max— Spätestes Datum (ISO-String)
Storage format: 2025-01-24T12:00:00.000Z
Selection Types
select
Einzelauswahl aus vordefinierten Optionen.
{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}
Validation options:
options— Array erlaubter Werte (erforderlich)
Gespeichert als TEXT mit dem gewählten Wert.
multiSelect
Mehrfachauswahl aus vordefinierten Optionen.
{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}
Validation options:
options— Array erlaubter Werte (erforderlich)
Gespeichert als JSON-Array: ["news", "tutorial"]
Rich Content
portableText
Rich Text im Portable-Text-Format. Unterstützt Überschriften, Listen, Links, Bilder und benutzerdefinierte Blöcke.
{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}
Gespeichert als JSON-Array von Portable-Text-Blöcken:
[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]
Plugins können dem Editor eigene Blocktypen (Embeds, Widgets usw.) hinzufügen. Diese erscheinen im Slash-Befehlmenü und werden auf der Site automatisch gerendert. Siehe Creating Plugins — Portable Text Block Types.
Media Types
image
Referenz auf ein hochgeladenes Bild. Enthält Metadaten wie Abmessungen und Alt-Text.
{
slug: "featuredImage",
label: "Featured Image",
type: "image",
options: {
showPreview: true,
},
}
Widget options:
showPreview— Bildvorschau im Admin anzeigen (Standard: true)
Stored value:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}
file
Referenz auf eine hochgeladene Datei (Dokumente, PDFs usw.).
{
slug: "document",
label: "Document",
type: "file",
}
Stored value:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}
Relational Types
reference
Verweis auf einen anderen Inhaltseintrag.
{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}
Widget options:
collection— Ziel-Collection-Slug (erforderlich)allowMultiple— Mehrere Referenzen erlauben (Standard: false)
Single reference stored value:
"01HXK5MZSN..."
Multiple references stored value:
["01HXK5MZSN...", "01HXK6NATS..."]
Flexible Types
json
Beliebige JSON-Daten. Für verschachtelte Strukturen, Drittanbieter-Integrationen oder Daten ohne festes Schema.
{
slug: "metadata",
label: "Metadata",
type: "json",
}
Unverändert in der SQLite-JSON-Spalte gespeichert.
Field Properties
Alle Felder unterstützen diese gemeinsamen Eigenschaften:
| Property | Type | Description |
|---|---|---|
slug | string | Eindeutiger Identifier (erforderlich) |
label | string | Anzeigename (erforderlich) |
type | FieldType | Feldtyp (erforderlich) |
required | boolean | Wert erforderlich (Standard: false) |
unique | boolean | Eindeutigkeit erzwingen (Standard: false) |
defaultValue | unknown | Standardwert für neue Einträge |
validation | object | Typspezifische Validierungsregeln |
widget | string | Benutzerdefiniertes Widget-Override |
options | object | Widget-Konfiguration |
sortOrder | number | Anzeigereihenfolge im Admin |
Reserved Field Slugs
Diese Slugs sind reserviert und dürfen nicht verwendet werden:
idslugstatusauthor_idcreated_atupdated_atpublished_atdeleted_atversion
TypeScript Types
Feldtypen für die programmatische Nutzung importieren:
import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
];