
Modéliser son contenu avec les collections TinaCMS
Dans TinaCMS, le modèle de contenu est du code. Vous décrivez une seule fois la forme d'un type de contenu, dans le dossier tina/, et TinaCMS transforme cette description en trois choses à la fois : les formulaires d'édition que voient les rédacteurs, la validation qui garde le contenu propre, et une API GraphQL typée que vos pages interrogent.
À l'inverse, sur WordPress, la structure d'un contenu dépend souvent d'un empilement de plugins (champs personnalisés, builders de pages) sans schéma central ni garantie de cohérence.
Collections et champs
Une collection fait correspondre un type de contenu à un dossier de fichiers. La collection blog de cette démo est un bon exemple :
export const BlogCollection = {
name: "blog",
label: "Blogs",
path: "src/content/blog",
format: "mdx",
fields: [
{ type: "string", name: "title", label: "Title", isTitle: true, required: true },
{ type: "string", name: "description", label: "Description" },
{ type: "datetime", name: "pubDate", label: "Publication Date" },
{ type: "image", name: "heroImage", label: "Hero Image" },
{ type: "rich-text", name: "body", label: "Body", isBody: true },
],
};Chaque champ visible dans le panneau d'édition provient de cette liste. Marquer un champ required et TinaCMS l'impose. Marquer un champ isTitle en fait le nom d'affichage du document. Marquer un champ isBody transforme son contenu en corps Markdown du fichier plutôt qu'en frontmatter.
Les types de champs font le travail
TinaCMS propose un large éventail de types de champs pour que l'expérience d'édition corresponde toujours à la donnée :
stringetrich-textpour le texte, ce dernier offrant un éditeur WYSIWYG complet.datetime,booleanetnumberpour les valeurs structurées, chacune avec une saisie adaptée.imagepour les médias, connecté à votre stockage d'assets configuré.objectetreferencepour l'imbrication et pour lier un document à un autre.
Pourquoi modéliser de cette façon
Parce que le schéma est la source de vérité, le formulaire, le fichier stocké et le résultat de requête typé ne peuvent jamais diverger. Ajoutez un champ à la collection et il apparaît dans l'éditeur, dans le frontmatter du fichier et dans les types générés, en une seule et même modification. Vos rédacteurs obtiennent des garde-fous, et vous obtenez un contenu qu'il est sûr d'interroger sans vérification défensive partout — un luxe qu'aucun empilement de plugins WordPress ne peut garantir.
Une fois le contenu modélisé, la question naturelle devient : où vit-il réellement ? La réponse est votre dépôt Git.