EmDash prend en charge 16 types de champs pour définir des schémas de contenu. Chaque type correspond à un type de colonne SQLite et fournit une interface d’administration appropriée.
Vue d’ensemble
Le tableau suivant répertorie chaque type de champ et sa colonne SQLite :
| Type | Colonne SQLite | Description |
|---|---|---|
string | TEXT | Saisie de texte court |
text | TEXT | Texte multiligne |
url | TEXT | Valeur URL |
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 à une autre entrée |
json | JSON | Données JSON arbitraires |
slug | TEXT | Identifiant sécurisé pour URL |
repeater | JSON | Groupe de champs répétitifs |
Types de Texte
string
Texte court sur une seule ligne. Utilisez-le pour les titres, les noms et les valeurs courtes.
{
slug: "title",
label: "Title",
type: "string",
required: true,
validation: {
minLength: 1,
maxLength: 200,
},
}
Options de validation :
minLength— Nombre minimum de caractèresmaxLength— Nombre maximum de caractèrespattern— Motif regex à correspondre
Options de widget :
- Aucune spécifique
text
Texte brut multiligne. Utilisez-le pour les descriptions, les extraits et le texte brut plus long.
{
slug: "excerpt",
label: "Excerpt",
type: "text",
options: {
rows: 3,
},
}
Options de validation :
minLength— Nombre minimum de caractèresmaxLength— Nombre maximum de caractères
Options de widget :
rows— Nombre de lignes dans le textarea (par défaut : 3)
slug
Identifiant sécurisé pour 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 : minuscules, espaces remplacés par des tirets, caractères spéciaux supprimés.
Types Numériques
number
Nombre décimal. Utilisez-le pour les prix, les notes et les mesures.
{
slug: "price",
label: "Price",
type: "number",
required: true,
validation: {
min: 0,
max: 999999.99,
},
}
Options de validation :
min— Valeur minimalemax— Valeur maximale
Stocké en tant que SQLite REAL (virgule flottante 64 bits).
integer
Nombre entier. Utilisez-le pour les quantités, les comptages et les valeurs de commande.
{
slug: "quantity",
label: "Quantity",
type: "integer",
defaultValue: 1,
validation: {
min: 0,
max: 1000,
},
}
Options de validation :
min— Valeur minimalemax— Valeur maximale
Stocké en tant que SQLite INTEGER.
boolean
Vrai ou faux. Utilisez-le pour les interrupteurs et les drapeaux.
{
slug: "featured",
label: "Featured",
type: "boolean",
defaultValue: false,
}
Stocké en tant que SQLite INTEGER (0 ou 1).
Date et Heure
datetime
Valeur de date et 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
Types de Sélection
select
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 de valeurs autorisées (requis)
Stocké en tant que TEXT contenant la valeur sélectionnée.
multiSelect
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 de valeurs autorisées (requis)
Stocké en tant que tableau JSON : ["news", "tutorial"]
Contenu Enrichi
portableText
Contenu de texte enrichi utilisant le format Portable Text. Prend en charge les en-têtes, les listes, les liens, les images et les blocs personnalisés.
{
slug: "content",
label: "Content",
type: "portableText",
required: true,
}
La valeur est stockée sous forme de tableau JSON de blocs Portable Text, par exemple :
[
{
"_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 composants de rendu Portable Text.
Types de Médias
image
Référence à une image téléchargée. Inclut des métadonnées telles que 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)
La valeur est stockée sous forme d’objet avec la référence du média et ses métadonnées :
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/image.jpg",
"alt": "Description",
"width": 1920,
"height": 1080
}
file
Référence à un fichier téléchargé tel qu’un document ou un PDF.
{
slug: "document",
label: "Document",
type: "file",
}
La valeur est stockée sous forme d’objet avec la référence du fichier et ses métadonnées :
{
"id": "01HXK5MZSN...",
"url": "https://cdn.example.com/doc.pdf",
"filename": "report.pdf",
"mimeType": "application/pdf",
"size": 102400
}
Types Relationnels
reference
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 collection cible (requis)allowMultiple— Autoriser plusieurs références (par défaut : false)
Une référence unique est stockée en tant qu’ID d’entrée cible :
"01HXK5MZSN..."
Plusieurs références sont stockées sous forme de tableau d’IDs d’entrée :
["01HXK5MZSN...", "01HXK6NATS..."]
Types Flexibles
json
Données JSON arbitraires. Utilisez-le pour des structures imbriquées complexes, des intégrations tierces ou des données sans schéma fixe.
{
slug: "metadata",
label: "Metadata",
type: "json",
}
Stocké tel quel dans la colonne JSON SQLite.
Propriétés de Champ
Tous les champs prennent en charge ces propriétés communes :
| Propriété | Type | Description |
|---|---|---|
slug | string | Identifiant unique (requis) |
label | string | Nom d’affichage (requis) |
type | FieldType | Type de champ (requis) |
required | boolean | Exiger une valeur (par défaut : false) |
unique | boolean | Imposer l’unicité (par défaut : false) |
defaultValue | unknown | Valeur par défaut pour les nouvelles entrées |
validation | object | Règles de validation spécifiques au type |
widget | string | Remplacement de widget personnalisé |
options | object | Configuration du widget |
sortOrder | number | Ordre d’affichage dans l’admin |
Slugs de champ réservés
Ces slugs sont réservés et ne peuvent pas être utilisés :
idslugstatusauthor_idprimary_byline_idcreated_atupdated_atpublished_atscheduled_atdeleted_atversionlive_revision_iddraft_revision_idtermsbylinesbyline
Types TypeScript
Importez les définitions de type de champ pour une utilisation programmatique :
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",
];