Aller au contenu

Référence des Types de Champs

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 une interface d’administration appropriée.

TypeColonne SQLiteDescription
stringTEXTSaisie de texte court
textTEXTTexte multiligne
numberREALNombre décimal
integerINTEGERNombre entier
booleanINTEGERVrai/faux
datetimeTEXTDate et heure
selectTEXTChoix unique parmi options
multiSelectJSONChoix multiples
portableTextJSONContenu de texte enrichi
imageTEXTRéférence d’image
fileTEXTRéférence de fichier
referenceTEXTRéférence à une autre entrée
jsonJSONDonnées JSON arbitraires
slugTEXTIdentifiant adapté aux URL

Texte court, sur une seule ligne. À utiliser pour les titres, noms et valeurs courtes.

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

Options de validation :

  • minLength — Nombre minimum de caractères
  • maxLength — Nombre maximum de caractères
  • pattern — Modèle d’expression régulière à respecter

Options de widget :

  • Aucune spécifique

Texte brut multiligne. À utiliser pour les descriptions, extraits et textes bruts plus longs.

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

Options de validation :

  • minLength — Nombre minimum de caractères
  • maxLength — Nombre maximum de caractères

Options de widget :

  • rows — Nombre de lignes dans la zone de texte (par défaut : 3)

Identifiant adapté aux URL. Généré automatiquement à partir d’un autre champ ou saisi manuellement.

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

Les slugs sont automatiquement nettoyés : mis en minuscules, espaces remplacés par des traits d’union, caractères spéciaux supprimés.

Nombre décimal. À utiliser pour les prix, évaluations et mesures.

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

Options de validation :

  • min — Valeur minimale
  • max — Valeur maximale

Stocké en tant que SQLite REAL (nombre à virgule flottante 64 bits).

Nombre entier. À utiliser pour les quantités, compteurs et valeurs d’ordre.

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

Options de validation :

  • min — Valeur minimale
  • max — Valeur maximale

Stocké en tant que SQLite INTEGER.

Vrai ou faux. À utiliser pour les interrupteurs et indicateurs.

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

Stocké en tant que SQLite INTEGER (0 ou 1).

Valeur de date et d’heure. Stockée au format ISO 8601.

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

Options de validation :

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

Format de stockage : 2025-01-24T12:00:00.000Z

Sélection unique parmi des options prédéfinies.

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

Options de validation :

  • options — Tableau des valeurs autorisées (requis)

Stocké en tant que TEXT contenant la valeur sélectionnée.

Sélections multiples parmi des options prédéfinies.

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

Options de validation :

  • options — Tableau des valeurs autorisées (requis)

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

Contenu de texte enrichi utilisant le format Portable Text. Prend en charge les titres, listes, liens, images et blocs personnalisés.

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

Stocké en tant que 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 (intégrations, widgets, etc.) à l’éditeur. Ceux-ci apparaissent dans le menu de commande slash et sont automatiquement rendus sur le site. Voir Création de plugins — Types de blocs Portable Text.

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

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

Options de widget :

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

Valeur stockée :

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

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

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

Valeur stockée :

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

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

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

Options de widget :

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

Valeur stockée pour une référence unique :

"01HXK5MZSN..."

Valeur stockée pour plusieurs références :

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

Données JSON arbitraires. À utiliser pour les structures imbriquées complexes, les intégrations tierces ou les données sans schéma fixe.

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

Stockées telles quelles dans la colonne JSON de SQLite.

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

PropriétéTypeDescription
slugstringIdentifiant unique (requis)
labelstringNom d’affichage (requis)
typeFieldTypeType de champ (requis)
requiredbooleanExiger une valeur (par défaut : false)
uniquebooleanAppliquer l’unicité (par défaut : false)
defaultValueunknownValeur par défaut pour nouvelles entrées
validationobjectRègles de validation spécifiques au type
widgetstringRemplacement de widget personnalisé
optionsobjectConfiguration du widget
sortOrdernumberOrdre d’affichage dans l’admin

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

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