Référence des Types de Champs

Sur cette page

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 :

TypeColonne SQLiteDescription
stringTEXTSaisie de texte court
textTEXTTexte multiligne
urlTEXTValeur URL
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 à une autre entrée
jsonJSONDonnées JSON arbitraires
slugTEXTIdentifiant sécurisé pour URL
repeaterJSONGroupe 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ères
  • maxLength — Nombre maximum de caractères
  • pattern — 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ères
  • maxLength — 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 minimale
  • max — 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 minimale
  • max — 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éTypeDescription
slugstringIdentifiant unique (requis)
labelstringNom d’affichage (requis)
typeFieldTypeType de champ (requis)
requiredbooleanExiger une valeur (par défaut : false)
uniquebooleanImposer l’unicité (par défaut : false)
defaultValueunknownValeur par défaut pour les nouvelles entrées
validationobjectRègles de validation spécifiques au type
widgetstringRemplacement de widget personnalisé
optionsobjectConfiguration du widget
sortOrdernumberOrdre d’affichage dans l’admin

Slugs de champ réservés

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

  • 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

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