Um modelo de conteúdo descreve as informações que seu site armazena. No EmDash, o modelo é composto por coleções e campos. O banco de dados armazena esse modelo, e o painel de administração o usa para construir os formulários com os quais os editores trabalham.
Coleções, campos e entradas
Uma coleção é um tipo de conteúdo, como Publicações, Produtos ou Autores. Um campo é uma informação sobre esse conteúdo, como um título, corpo, preço ou referência de autor. Uma entrada é um item salvo em uma coleção.
Por exemplo, uma coleção de Publicações poderia ter estes campos:
Posts
├── Title texto curto, obrigatório
├── Excerpt texto longo, opcional
├── Content texto rico, opcional
└── Featured image imagem, opcional
O EmDash também gerencia informações que toda entrada precisa, incluindo seu ID, slug público, estado de publicação, autor, tempos de criação e atualização, localidade e referências de revisão. Os resultados de consulta expõem essas informações padrão junto com os campos definidos para a coleção.
Excluir uma entrada a move para a lixeira definindo seu horário de exclusão. Um administrador pode restaurá-la até que alguém a exclua permanentemente da lixeira. Esse fluxo de trabalho de entradas é diferente de excluir um campo ou coleção, que altera o esquema e remove dados armazenados.
Um modelo, duas formas de gerenciar
Os administradores podem criar e editar coleções em Tipos de conteúdo no painel de administração. O EmDash atualiza o esquema do banco de dados, e o editor de conteúdo usa a alteração na próxima vez que carrega a coleção.
Um arquivo seed descreve um modelo inicial em JSON. Os templates usam seeds para criar coleções e outros dados do site durante a configuração. As equipes também podem manter um seed no controle de versão e aplicá-lo ao criar outro ambiente. O painel de administração e um seed não criam modelos separados; ambos alteram o modelo armazenado no banco de dados de destino.
O seguinte fragmento de seed define os quatro campos personalizados no exemplo de Publicações:
{
"version": "1",
"collections": [
{
"slug": "posts",
"label": "Posts",
"labelSingular": "Post",
"fields": [
{
"slug": "title",
"label": "Title",
"type": "string",
"required": true
},
{ "slug": "excerpt", "label": "Excerpt", "type": "text" },
{ "slug": "content", "label": "Content", "type": "portableText" },
{ "slug": "featured_image", "label": "Featured Image", "type": "image" }
]
}
]
}
A referência de arquivos seed cobre o tratamento de conflitos e os outros objetos que um seed pode conter, incluindo configurações, taxonomias, menus, áreas de widgets, redirecionamentos e conteúdo de exemplo.
Alterando um modelo com conteúdo existente
Adicionar uma coleção cria um espaço vazio para novas entradas. Adicionar um campo opcional adiciona esse campo a cada entrada, mas entradas existentes não têm valor até que um editor ou migração forneça um. Um valor padrão pode fornecer o valor inicial quando o campo é adicionado.
Rótulos, descrições, regras de validação, configurações de busca e ordem dos campos podem ser atualizados sem substituir o campo. Slugs de coleção e campo são identificadores estáveis: o painel de administração os define na criação e não oferece renomeação posterior.
Leia Evoluir o esquema de um site implantado antes de alterar um modelo usado em produção.
Declarações TypeScript
O EmDash pode gerar declarações TypeScript a partir do modelo no banco de dados. As declarações adicionam os nomes das suas coleções e formas de campos às funções de consulta públicas, para que uma consulta por posts retorne entradas cujos data.title, data.content e outros campos são conhecidos pelo TypeScript.
Durante o desenvolvimento local, a integração Astro escreve emdash-env.d.ts e o atualiza após mudanças de esquema. O arquivo é saída gerada; edite o modelo de conteúdo em vez da declaração. Fluxos de trabalho remotos podem executar emdash types para escrever .emdash/types.ts a partir do site EmDash selecionado. Regenere esse arquivo após alterar o modelo que ele representa.
Tipos gerados ajudam o código a corresponder ao esquema atual, mas não migram conteúdo armazenado. Uma mudança de modelo e qualquer migração de conteúdo necessária permanecem operações separadas.
Conceitos relacionados
Leia Coleções e campos para recursos de coleção e escolhas de campos. Leia Painel de administração para o modelo de editor e permissões.