Référence des types de champs

Sur cette page

EmDash prend en charge 14 types de champs pour définir les schémas de contenu. Chaque type correspond à un type de colonne SQLite et fournit l’interface d’administration appropriée.

Overview

TypeSQLite ColumnDescription
stringTEXTSaisie texte courte sur une ligne
textTEXTTexte multiligne
numberREALNombre décimal
integerINTEGERNombre entier
booleanINTEGERVrai / faux
datetimeTEXTDate et heure
selectTEXTChoix unique parmi des options
multiSelectJSONChoix multiples
portableTextJSONContenu de texte enrichi
imageTEXTRéférence d’image
fileTEXTRéférence de fichier
referenceTEXTRéférence vers une autre entrée
jsonJSONDonnées JSON arbitraires
slugTEXTIdentifiant sûr pour les URL

Text Types

string

Texte court sur une seule ligne. Pour les titres, noms et valeurs courtes.

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

Validation options:

  • minLength — Nombre minimal de caractères
  • maxLength — Nombre maximal de caractères
  • pattern — Motif regex à respecter

Widget options:

  • Aucune spécifique

text

Texte brut multiligne. Pour les descriptions, extraits et texte brut plus long.

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

Validation options:

  • minLength — Nombre minimal de caractères
  • maxLength — Nombre maximal de caractères

Widget options:

  • rows — Nombre de lignes du textarea (défaut : 3)

slug

Identifiant sûr pour les URL. Généré automatiquement depuis un autre champ ou saisi manuellement.

{
  slug: "slug",
  label: "URL Slug",
  type: "slug",
  required: true,
  unique: true,
}

Les slugs sont normalisés automatiquement : minuscules, espaces remplacés par des tirets, caractères spéciaux supprimés.

Number Types

number

Nombre décimal. Pour les prix, notes et mesures.

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

Validation options:

  • min — Valeur minimale
  • max — Valeur maximale

Stocké en SQLite REAL (flottant 64 bits).

integer

Nombre entier. Pour les quantités, compteurs et ordres.

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

Validation options:

  • min — Valeur minimale
  • max — Valeur maximale

Stocké en SQLite INTEGER.

boolean

Vrai ou faux. Pour les bascules et indicateurs.

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

Stocké en SQLite INTEGER (0 ou 1).

Date and Time

datetime

Date et heure. Stockées au format ISO 8601.

{
  slug: "publishedAt",
  label: "Published At",
  type: "datetime",
}

Validation options:

  • min — Date minimale (chaîne ISO)
  • max — Date maximale (chaîne ISO)

Storage format: 2025-01-24T12:00:00.000Z

Selection Types

select

Choix unique parmi des options prédéfinies.

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

Validation options:

  • options — Tableau de valeurs autorisées (obligatoire)

Stocké en TEXT avec la valeur sélectionnée.

multiSelect

Choix multiples parmi des options prédéfinies.

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

Validation options:

  • options — Tableau de valeurs autorisées (obligatoire)

Stocké en tableau JSON : ["news", "tutorial"]

Rich Content

portableText

Texte enrichi au format Portable Text. Prend en charge titres, listes, liens, images et blocs personnalisés.

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

Stocké en tableau JSON de blocs Portable Text :

[
	{
		"_type": "block",
		"style": "normal",
		"children": [{ "_type": "span", "text": "Hello world" }]
	}
]

Les plugins peuvent ajouter des types de blocs personnalisés (embeds, widgets, etc.) à l’éditeur. Ils apparaissent dans le menu des commandes slash et sont rendus automatiquement sur le site. Voir Creating Plugins — Portable Text Block Types.

Media Types

image

Référence à une image téléversée. Inclut des métadonnées comme les dimensions et le texte alternatif.

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

Widget options:

  • showPreview — Afficher l’aperçu de l’image dans l’admin (défaut : true)

Stored value:

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

file

Référence à un fichier téléversé (documents, PDF, etc.).

{
  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

Référence vers une autre entrée de contenu.

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

Widget options:

  • collection — Slug de la collection cible (obligatoire)
  • allowMultiple — Autoriser plusieurs références (défaut : false)

Single reference stored value:

"01HXK5MZSN..."

Multiple references stored value:

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

Flexible Types

json

Données JSON arbitraires. Pour des structures imbriquées, intégrations tierces ou données sans schéma fixe.

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

Stocké tel quel dans la colonne JSON SQLite.

Field Properties

Tous les champs prennent en charge ces propriétés communes :

PropertyTypeDescription
slugstringIdentifiant unique (obligatoire)
labelstringNom d’affichage (obligatoire)
typeFieldTypeType de champ (obligatoire)
requiredbooleanValeur requise (défaut : false)
uniquebooleanForcer l’unicité (défaut : false)
defaultValueunknownValeur par défaut pour les nouvelles entrées
validationobjectRègles de validation propres au type
widgetstringRemplacement de widget personnalisé
optionsobjectConfiguration du widget
sortOrdernumberOrdre d’affichage dans l’admin

Reserved Field Slugs

Ces slugs sont réservés et ne peuvent pas être utilisés :

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

TypeScript Types

Importer les types de champs pour une utilisation programmatique :

import type { FieldType, Field, CreateFieldInput } from "emdash";

const fieldTypes: FieldType[] = [
	"string",
	"text",
	"number",
	"integer",
	"boolean",
	"datetime",
	"select",
	"multiSelect",
	"portableText",
	"image",
	"file",
	"reference",
	"json",
	"slug",
];