Il tuo modello di contenuto è l’insieme di collezioni e campi che il tuo sito memorizza. Lo definisci nel pannello di amministrazione o con la CLI, lo modifichi quando ne hai bisogno e opzionalmente generi tipi TypeScript da esso. Questa pagina spiega come lavorarci.
Collezioni e campi
Una collezione è un tipo di contenuto (post, prodotti, autori). Ogni collezione ha campi che definisci (un titolo, un corpo, un prezzo). Ogni voce ha anche campi di sistema che EmDash gestisce per te.
Crei e modifichi collezioni e campi visivamente nel pannello di amministrazione sotto Content Types, o con la CLI. Le modifiche hanno effetto immediatamente, e una persona non-sviluppatore può farlo.
Campi di sistema
Oltre ai campi che definisci, ogni voce ha questi, sempre presenti:
| Campo | Scopo |
|---|---|
id | Identificatore unico stabile |
slug | Identificatore sicuro per URL, unico per locale |
status | draft, published o scheduled |
author_id | L’utente che ha creato la voce |
created_at / updated_at / published_at | Timestamp |
deleted_at | Impostato su soft delete; la riga viene mantenuta |
version | Si incrementa ad ogni salvataggio |
Eliminare una voce è un soft delete: può essere ripristinata.
Modificare il modello in qualsiasi momento
Puoi aggiungere, rinominare, rimuovere o modificare il tipo di un campo su una collezione live in qualsiasi momento, tramite il pannello di amministrazione o la CLI. Il contenuto esistente viene preservato.
Tipi TypeScript
La generazione di tipi è opzionale ma consigliata. Genera tipi dal tuo modello attuale:
npx emdash types
Questo scrive .emdash/types.ts con un’interfaccia per collezione e sovraccarichi di query tipizzati, così getEmDashCollection("posts") restituisce voci completamente tipizzate:
export interface Post {
title: string;
content: PortableTextBlock[];
excerpt?: string;
}
declare module "emdash" {
export function getEmDashCollection(
type: "posts",
): Promise<{ entries: ContentEntry<Post>[]; error?: Error }>;
}
Riesegui il comando dopo aver modificato il modello per mantenere i tipi sincronizzati.
Flussi di lavoro
Entrambi i flussi di lavoro modificano lo stesso modello.
Una persona non-sviluppatore usa il pannello di amministrazione:
- Apri Content Types nel pannello di amministrazione.
- Clicca su Add Collection.
- Definisci i campi con il costruttore visuale.
- Inizia a creare contenuti.
Uno sviluppatore può usare la CLI per generare tipi e spostare il modello tra ambienti:
npx emdash types # genera tipi TypeScript
npx emdash export-seed > seed.json # esporta il modello come file seed
File seed
Un file seed è una descrizione JSON di collezioni, tassonomie e menu. I template ne forniscono uno, e puoi esportare il tuo per il controllo versione o per configurare un altro 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" }]
}
Applicare un seed è idempotente, quindi è sicuro rieseguirlo:
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" });
Vedi Formato file seed per lo schema completo.
Prossimi passi
Collections
Definisci tipi di campo e validazione.
Admin Panel
Vedi il pannello di amministrazione.
Seeding
Configura siti con file seed.