EmDash unterstützt 16 Feldtypen zur Definition von Content-Schemas. Jeder Typ wird auf einen SQLite-Spaltentyp abgebildet und bietet eine entsprechende Admin-Oberfläche.
Übersicht
Die folgende Tabelle listet alle Feldtypen und ihre SQLite-Spalten auf:
| Typ | SQLite-Spalte | Beschreibung |
|---|---|---|
string | TEXT | Kurze Texteingabe |
text | TEXT | Mehrzeiliger Text |
url | TEXT | URL-Wert |
number | REAL | Dezimalzahl |
integer | INTEGER | Ganzzahl |
boolean | INTEGER | Wahr/Falsch |
datetime | TEXT | Datum und Uhrzeit |
select | TEXT | Einzelauswahl aus Optionen |
multiSelect | JSON | Mehrfachauswahl |
portableText | JSON | Rich-Text-Inhalt |
image | TEXT | Bildverweis |
file | TEXT | Dateiverweis |
reference | TEXT | Verweis auf einen anderen Eintrag |
json | JSON | Beliebige JSON-Daten |
slug | TEXT | URL-sicherer Bezeichner |
repeater | JSON | Wiederholende Feldgruppe |
Texttypen
string
Kurzer, einzeiliger Text. Verwenden Sie diesen für Titel, Namen und kurze Werte.
{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}
Validierungsoptionen:
minLength— Minimale ZeichenanzahlmaxLength— Maximale Zeichenanzahlpattern— Zu erfüllendes Regex-Muster
Widget-Optionen:
- Keine spezifischen
text
Mehrzeiliger Klartext. Verwenden Sie diesen für Beschreibungen, Auszüge und längere Klartexte.
{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}
Validierungsoptionen:
minLength— Minimale ZeichenanzahlmaxLength— Maximale Zeichenanzahl
Widget-Optionen:
rows— Anzahl der Zeilen im Textarea (Standard: 3)
slug
URL-sicherer Bezeichner. Wird automatisch aus einem anderen Feld generiert oder manuell eingegeben.
{
slug: "slug",
label: "URL Slug",
type: "slug",
required: true,
unique: true,
}
Slugs werden automatisch bereinigt: kleingeschrieben, Leerzeichen durch Bindestriche ersetzt, Sonderzeichen entfernt.
Zahlentypen
number
Dezimalzahl. Verwenden Sie diesen für Preise, Bewertungen und Messungen.
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}
Validierungsoptionen:
min— Minimalwertmax— Maximalwert
Gespeichert als SQLite REAL (64-Bit-Gleitkommazahl).
integer
Ganzzahl. Verwenden Sie diesen für Mengen, Zählungen und Bestellwerte.
{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}
Validierungsoptionen:
min— Minimalwertmax— Maximalwert
Gespeichert als SQLite INTEGER.
boolean
Wahr oder falsch. Verwenden Sie diesen für Umschalter und Flags.
{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}
Gespeichert als SQLite INTEGER (0 oder 1).
Datum und Uhrzeit
datetime
Datums- und Zeitwert. Gespeichert im ISO 8601-Format.
{
slug: "publishedAt",
label: "Published At",
type: "datetime",
}
Validierungsoptionen:
min— Minimales Datum (ISO-String)max— Maximales Datum (ISO-String)
Speicherformat: 2025-01-24T12:00:00.000Z
Auswahltypen
select
Einzelauswahl aus vordefinierten Optionen.
{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}
Validierungsoptionen:
options— Array erlaubter Werte (erforderlich)
Gespeichert als TEXT mit dem ausgewählten Wert.
multiSelect
Mehrfachauswahl aus vordefinierten Optionen.
{
slug: "tags",
label: "Tags",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}
Validierungsoptionen:
options— Array erlaubter Werte (erforderlich)
Gespeichert als JSON-Array: ["news", "tutorial"]
Rich Content
portableText
Rich-Text-Inhalt im Portable Text-Format. Unterstützt Überschriften, Listen, Links, Bilder und benutzerdefinierte Blöcke.
{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}
Der Wert wird als JSON-Array von Portable Text-Blöcken gespeichert, zum Beispiel:
[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hello world" }]
}
]
Plugins können benutzerdefinierte Blocktypen (Embeds, Widgets usw.) zum Editor hinzufügen. Diese erscheinen im Slash-Befehlsmenü und werden automatisch auf der Website gerendert. Siehe Portable Text Rendering-Komponenten.
Medientypen
image
Verweis auf ein hochgeladenes Bild. Enthält Metadaten wie Abmessungen und Alt-Text.
{
slug: "featuredImage",
label: "Featured Image",
type: "image",
options: {
showPreview: true,
},
}
Widget-Optionen:
showPreview— Bildvorschau im Admin anzeigen (Standard: true)
Der Wert wird als Objekt mit der Medienreferenz und ihren Metadaten gespeichert:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}
file
Verweis auf eine hochgeladene Datei wie ein Dokument oder PDF.
{
slug: "document",
label: "Document",
type: "file",
}
Der Wert wird als Objekt mit der Dateireferenz und ihren Metadaten gespeichert:
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}
Relationale Typen
reference
Verweis auf einen anderen Content-Eintrag.
{
slug: "author",
label: "Author",
type: "reference",
required: true,
options: {
collection: "authors",
},
}
Widget-Optionen:
collection— Ziel-Collection-Slug (erforderlich)allowMultiple— Mehrere Verweise erlauben (Standard: false)
Ein einzelner Verweis wird als Ziel-Eintrags-ID gespeichert:
"01HXK5MZSN..."
Mehrere Verweise werden als Array von Eintrags-IDs gespeichert:
["01HXK5MZSN...", "01HXK6NATS..."]
Flexible Typen
json
Beliebige JSON-Daten. Verwenden Sie diesen für komplexe verschachtelte Strukturen, Drittanbieter-Integrationen oder Daten ohne festes Schema.
{
slug: "metadata",
label: "Metadata",
type: "json",
}
Gespeichert unverändert in der SQLite JSON-Spalte.
Feldeigenschaften
Alle Felder unterstützen diese gemeinsamen Eigenschaften:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
slug | string | Eindeutiger Bezeichner (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 | Benutzerdefinierte Widget-Überschreibung |
options | object | Widget-Konfiguration |
sortOrder | number | Anzeigereihenfolge im Admin |
Reservierte Feld-Slugs
Diese Slugs sind reserviert und können nicht verwendet werden:
idslugstatusauthor_idprimary_byline_idcreated_atupdated_atpublished_atscheduled_atdeleted_atversionlive_revision_iddraft_revision_idtermsbylinesbyline
TypeScript-Typen
Importieren Sie die Feldtyp-Definitionen für die programmatische Verwendung:
import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"url",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
"repeater",
];