Feldtypen-Referenz

Auf dieser Seite

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:

TypSQLite-SpalteBeschreibung
stringTEXTKurze Texteingabe
textTEXTMehrzeiliger Text
urlTEXTURL-Wert
numberREALDezimalzahl
integerINTEGERGanzzahl
booleanINTEGERWahr/Falsch
datetimeTEXTDatum und Uhrzeit
selectTEXTEinzelauswahl aus Optionen
multiSelectJSONMehrfachauswahl
portableTextJSONRich-Text-Inhalt
imageTEXTBildverweis
fileTEXTDateiverweis
referenceTEXTVerweis auf einen anderen Eintrag
jsonJSONBeliebige JSON-Daten
slugTEXTURL-sicherer Bezeichner
repeaterJSONWiederholende 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 Zeichenanzahl
  • maxLength — Maximale Zeichenanzahl
  • pattern — 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 Zeichenanzahl
  • maxLength — 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 — Minimalwert
  • max — 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 — Minimalwert
  • max — 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:

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

Reservierte Feld-Slugs

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

  • id
  • slug
  • status
  • author_id
  • primary_byline_id
  • created_at
  • updated_at
  • published_at
  • scheduled_at
  • deleted_at
  • version
  • live_revision_id
  • draft_revision_id
  • terms
  • bylines
  • byline

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",
];