Seu modelo de conteúdo é o conjunto de coleções e campos que seu site armazena. Você o define no painel de administração ou com a CLI, altera quando precisar e opcionalmente gera tipos TypeScript a partir dele. Esta página cobre como trabalhar com ele.
Coleções e campos
Uma coleção é um tipo de conteúdo (posts, produtos, autores). Cada coleção tem campos que você define (um título, um corpo, um preço). Cada entrada também tem campos do sistema que o EmDash gerencia para você.
Você cria e edita coleções e campos visualmente no painel de administração em Content Types, ou com a CLI. As alterações têm efeito imediato, e uma pessoa não-desenvolvedora pode fazer isso.
Campos do sistema
Além dos campos que você define, cada entrada tem estes, sempre presentes:
| Campo | Propósito |
|---|---|
id | Identificador único estável |
slug | Identificador seguro para URL, único por locale |
status | draft, published ou scheduled |
author_id | O usuário que criou a entrada |
created_at / updated_at / published_at | Timestamps |
deleted_at | Definido em exclusão suave; a linha é mantida |
version | Incrementa a cada salvamento |
Excluir uma entrada é uma exclusão suave: ela pode ser restaurada.
Alterar o modelo a qualquer momento
Você pode adicionar, renomear, remover ou alterar o tipo de um campo em uma coleção ativa a qualquer momento, através do painel de administração ou da CLI. O conteúdo existente é preservado.
Tipos TypeScript
A geração de tipos é opcional, mas recomendada. Gere tipos do seu modelo atual:
npx emdash types
Isso escreve .emdash/types.ts com uma interface por coleção e sobrecargas de consulta tipadas, então getEmDashCollection("posts") retorna entradas totalmente tipadas:
export interface Post {
title: string;
content: PortableTextBlock[];
excerpt?: string;
}
declare module "emdash" {
export function getEmDashCollection(
type: "posts",
): Promise<{ entries: ContentEntry<Post>[]; error?: Error }>;
}
Execute novamente o comando após alterar o modelo para manter os tipos sincronizados.
Fluxos de trabalho
Ambos os fluxos de trabalho alteram o mesmo modelo.
Uma pessoa não-desenvolvedora usa o painel de administração:
- Abra Content Types no painel de administração.
- Clique em Add Collection.
- Defina campos com o construtor visual.
- Comece a criar conteúdo.
Um desenvolvedor pode usar a CLI para gerar tipos e mover o modelo entre ambientes:
npx emdash types # gerar tipos TypeScript
npx emdash export-seed > seed.json # exportar o modelo como arquivo seed
Arquivos seed
Um arquivo seed é uma descrição JSON de coleções, taxonomias e menus. Templates vêm com um, e você pode exportar o seu próprio para controle de versão ou para configurar outro ambiente.
{
"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" }]
}
Aplicar um seed é idempotente, então é seguro executar novamente:
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" });
Veja Formato de arquivo seed para o esquema completo.
Próximos passos
Collections
Defina tipos de campo e validação.
Admin Panel
Veja o painel de administração.
Seeding
Configure sites com arquivos seed.