Votre modèle de contenu est l’ensemble des collections et des champs que votre site stocke. Vous le définissez dans le panneau d’administration ou avec la CLI, vous le modifiez quand vous en avez besoin et générez éventuellement des types TypeScript à partir de celui-ci. Cette page explique comment l’utiliser.
Collections et champs
Une collection est un type de contenu (articles, produits, auteurs). Chaque collection possède des champs que vous définissez (un titre, un corps, un prix). Chaque entrée dispose également de champs système gérés par EmDash pour vous.
Vous créez et modifiez les collections et les champs visuellement dans le panneau d’administration sous Content Types, ou avec la CLI. Les modifications prennent effet immédiatement, et une personne non-développeuse peut le faire.
Champs système
En plus des champs que vous définissez, chaque entrée possède ceux-ci, toujours présents :
| Champ | Objectif |
|---|---|
id | Identifiant unique stable |
slug | Identifiant sûr pour URL, unique par locale |
status | draft, published ou scheduled |
author_id | L’utilisateur qui a créé l’entrée |
created_at / updated_at / published_at | Horodatages |
deleted_at | Défini lors de la suppression douce ; la ligne est conservée |
version | S’incrémente à chaque sauvegarde |
La suppression d’une entrée est une suppression douce : elle peut être restaurée.
Modifier le modèle à tout moment
Vous pouvez ajouter, renommer, supprimer ou modifier le type d’un champ sur une collection en production à tout moment, via le panneau d’administration ou la CLI. Le contenu existant est préservé.
Types TypeScript
La génération de types est facultative mais recommandée. Générez des types à partir de votre modèle actuel :
npx emdash types
Cela écrit .emdash/types.ts avec une interface par collection et des surcharges de requête typées, de sorte que getEmDashCollection("posts") renvoie des entrées entièrement typées :
export interface Post {
title: string;
content: PortableTextBlock[];
excerpt?: string;
}
declare module "emdash" {
export function getEmDashCollection(
type: "posts",
): Promise<{ entries: ContentEntry<Post>[]; error?: Error }>;
}
Relancez la commande après avoir modifié le modèle pour garder les types synchronisés.
Workflows
Les deux workflows modifient le même modèle.
Une personne non-développeuse utilise le panneau d’administration :
- Ouvrez Content Types dans le panneau d’administration.
- Cliquez sur Add Collection.
- Définissez les champs avec le constructeur visuel.
- Commencez à créer du contenu.
Un développeur peut utiliser la CLI pour générer des types et déplacer le modèle entre environnements :
npx emdash types # générer les types TypeScript
npx emdash export-seed > seed.json # exporter le modèle comme fichier seed
Fichiers seed
Un fichier seed est une description JSON des collections, taxonomies et menus. Les templates en fournissent un, et vous pouvez exporter le vôtre pour le contrôle de version ou pour configurer un autre environnement.
{
"version": "1",
"collections": [
{
"slug": "posts",
"label": "Blog Posts",
"labelSingular": "Post",
"supports": ["drafts", "revisions", "preview"],
"fields": [
{ "slug": "title", "type": "string", "required": true },
{ "slug": "content", "type": "portableText" }
]
}
],
"taxonomies": [{ "name": "category", "label": "Categories", "hierarchical": true }],
"menus": [{ "name": "primary", "label": "Primary Navigation" }]
}
L’application d’un seed est idempotente, il est donc sûr de le réexécuter :
import { applySeed, validateSeed } from "emdash/seed";
import seedData from "./.emdash/seed.json";
const { valid, errors } = validateSeed(seedData);
await applySeed(db, seedData, { includeContent: true, onConflict: "skip" });
Voir Format de fichier seed pour le schéma complet.
Prochaines étapes
Collections
Définissez les types de champs et la validation.
Admin Panel
Consultez le panneau d’administration.
Seeding
Configurez des sites avec des fichiers seed.