Zum Inhalt springen

Feldtypen-Referenz

EmDash unterstützt 14 Feldtypen zur Definition von Inhalts-Schemas. Jeder Typ wird einem SQLite-Spaltentyp zugeordnet und bietet eine entsprechende Admin-Benutzeroberfläche.

TypSQLite-SpalteBeschreibung
stringTEXTKurze Texteingabe
textTEXTMehrzeiliger Text
numberREALDezimalzahl
integerINTEGERGanze Zahl
booleanINTEGERWahr/Falsch
datetimeTEXTDatum und Uhrzeit
selectTEXTEinzelauswahl aus Optionen
multiSelectJSONMehrfachauswahl
portableTextJSONRich-Text-Inhalt
imageTEXTBildreferenz
fileTEXTDateireferenz
referenceTEXTVerweis auf einen anderen Eintrag
jsonJSONBeliebige JSON-Daten
slugTEXTURL-sicherer Bezeichner

Kurzer, einzeiliger Text. Verwenden Sie ihn für Titel, Namen und kurze Werte.

{
slug: "title",
label: "Titel",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}

Validierungsoptionen:

  • minLength — Mindestanzahl an Zeichen
  • maxLength — Höchstanzahl an Zeichen
  • pattern — Regex-Muster, das übereinstimmen muss

Widget-Optionen:

  • Keine spezifischen

Mehrzeiliger Klartext. Verwenden Sie ihn für Beschreibungen, Auszüge und längeren Klartext.

{
slug: "excerpt",
label: "Auszug",
type: "text",
options: {
rows: 3,
},
}

Validierungsoptionen:

  • minLength — Mindestanzahl an Zeichen
  • maxLength — Höchstanzahl an Zeichen

Widget-Optionen:

  • rows — Anzahl der Zeilen im Textbereich (Standard: 3)

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: in Kleinbuchstaben umgewandelt, Leerzeichen durch Bindestriche ersetzt, Sonderzeichen entfernt.

Dezimalzahl. Verwenden Sie sie für Preise, Bewertungen und Messwerte.

{
slug: "price",
label: "Preis",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}

Validierungsoptionen:

  • min — Mindestwert
  • max — Höchstwert

Wird als SQLite REAL (64-Bit-Gleitkommazahl) gespeichert.

Ganze Zahl. Verwenden Sie sie für Mengen, Zählungen und Reihenfolgewerte.

{
slug: "quantity",
label: "Menge",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}

Validierungsoptionen:

  • min — Mindestwert
  • max — Höchstwert

Wird als SQLite INTEGER gespeichert.

Wahr oder falsch. Verwenden Sie ihn für Umschalter und Flags.

{
slug: "featured",
label: "Hervorgehoben",
type: "boolean",
defaultValue: false,
}

Wird als SQLite INTEGER (0 oder 1) gespeichert.

Datum- und Uhrzeitwert. Wird im ISO 8601-Format gespeichert.

{
slug: "publishedAt",
label: "Veröffentlicht am",
type: "datetime",
}

Validierungsoptionen:

  • min — Mindestdatum (ISO-String)
  • max — Höchstdatum (ISO-String)

Speicherformat: 2025-01-24T12:00:00.000Z

Einzelauswahl aus vordefinierten Optionen.

{
slug: "status",
label: "Status",
type: "select",
required: true,
defaultValue: "draft",
validation: {
options: ["draft", "published", "archived"],
},
}

Validierungsoptionen:

  • options — Array der erlaubten Werte (erforderlich)

Wird als TEXT gespeichert, der den ausgewählten Wert enthält.

Mehrfachauswahl aus vordefinierten Optionen.

{
slug: "tags",
label: "Schlagwörter",
type: "multiSelect",
validation: {
options: ["news", "tutorial", "review", "opinion"],
},
}

Validierungsoptionen:

  • options — Array der erlaubten Werte (erforderlich)

Wird als JSON-Array gespeichert: ["news", "tutorial"]

Rich-Text-Inhalt im Portable-Text-Format. Unterstützt Überschriften, Listen, Links, Bilder und benutzerdefinierte Blöcke.

{
slug: "content",
label: "Inhalt",
type: "portableText",
required: true,
}

Wird als JSON-Array von Portable-Text-Blöcken gespeichert:

[
{
"_type": "block",
"style": "normal",
"children": [{ "_type": "span", "text": "Hallo Welt" }]
}
]

Plugins können benutzerdefinierte Blocktypen (Einbettungen, Widgets usw.) zum Editor hinzufügen. Diese erscheinen im Slash-Befehl-Menü und werden automatisch auf der Website gerendert. Siehe Plugins erstellen — Portable-Text-Blocktypen.

Verweis auf ein hochgeladenes Bild. Enthält Metadaten wie Abmessungen und Alt-Text.

{
slug: "featuredImage",
label: "Beitragsbild",
type: "image",
options: {
showPreview: true,
},
}

Widget-Optionen:

  • showPreview — Bildvorschau im Admin anzeigen (Standard: true)

Gespeicherter Wert:

{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Beschreibung",
"width": 1920,
"height": 1080
}

Verweis auf eine hochgeladene Datei (Dokumente, PDFs usw.).

{
slug: "document",
label: "Dokument",
type: "file",
}

Gespeicherter Wert:

{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}

Verweis auf einen anderen Inhalteintrag.

{
slug: "author",
label: "Autor",
type: "reference",
required: true,
options: {
collection: "authors",
},
}

Widget-Optionen:

  • collection — Slug der Zielkollektion (erforderlich)
  • allowMultiple — Mehrere Verweise erlauben (Standard: false)

Gespeicherter Wert für Einzelverweis:

"01HXK5MZSN..."

Gespeicherter Wert für Mehrfachverweise:

["01HXK5MZSN...", "01HXK6NATS..."]

Beliebige JSON-Daten. Verwenden Sie sie für komplexe verschachtelte Strukturen, Integrationen von Drittanbietern oder Daten ohne festes Schema.

{
slug: "metadata",
label: "Metadaten",
type: "json",
}

Wird unverändert in der SQLite-JSON-Spalte gespeichert.

Alle Felder unterstützen diese gemeinsamen Eigenschaften:

EigenschaftTypBeschreibung
slugstringEindeutiger Bezeichner (erforderlich)
labelstringAnzeigename (erforderlich)
typeFieldTypeFeldtyp (erforderlich)
requiredbooleanWert erforderlich (Standard: false)
uniquebooleanEindeutigkeit erzwingen (Standard: false)
defaultValueunknownStandardwert für neue Einträge
validationobjectTypspezifische Validierungsregeln
widgetstringBenutzerdefinierte Widget-Überschreibung
optionsobjectWidget-Konfiguration
sortOrdernumberAnzeigereihenfolge im Admin

Diese Slugs sind reserviert und können nicht verwendet werden:

  • id
  • slug
  • status
  • author_id
  • created_at
  • updated_at
  • published_at
  • deleted_at
  • version

Importieren Sie Feldtypen für die programmatische Verwendung:

import type { FieldType, Field, CreateFieldInput } from "emdash";
const fieldTypes: FieldType[] = [
"string",
"text",
"number",
"integer",
"boolean",
"datetime",
"select",
"multiSelect",
"portableText",
"image",
"file",
"reference",
"json",
"slug",
];