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
| Type | SQLite Column | Description |
|---|---|---|
string | TEXT | Saisie texte courte sur une ligne |
text | TEXT | Texte multiligne |
number | REAL | Nombre décimal |
integer | INTEGER | Nombre entier |
boolean | INTEGER | Vrai / faux |
datetime | TEXT | Date et heure |
select | TEXT | Choix unique parmi des options |
multiSelect | JSON | Choix multiples |
portableText | JSON | Contenu de texte enrichi |
image | TEXT | Référence d’image |
file | TEXT | Référence de fichier |
reference | TEXT | Référence vers une autre entrée |
json | JSON | Données JSON arbitraires |
slug | TEXT | Identifiant 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èresmaxLength— Nombre maximal de caractèrespattern— 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èresmaxLength— 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 minimalemax— 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 minimalemax— 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 :
| Property | Type | Description |
|---|---|---|
slug | string | Identifiant unique (obligatoire) |
label | string | Nom d’affichage (obligatoire) |
type | FieldType | Type de champ (obligatoire) |
required | boolean | Valeur requise (défaut : false) |
unique | boolean | Forcer l’unicité (défaut : false) |
defaultValue | unknown | Valeur par défaut pour les nouvelles entrées |
validation | object | Règles de validation propres au type |
widget | string | Remplacement de widget personnalisé |
options | object | Configuration du widget |
sortOrder | number | Ordre d’affichage dans l’admin |
Reserved Field Slugs
Ces slugs sont réservés et ne peuvent pas être utilisés :
idslugstatusauthor_idcreated_atupdated_atpublished_atdeleted_atversion
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",
];