内容模型描述了站点存储的信息。在 EmDash 中,模型由集合和字段组成。数据库存储该模型,管理面板使用它来构建编辑者使用的表单。
集合、字段和条目
集合是一种内容类型,如文章、产品或作者。字段是该内容的一条信息,如标题、正文、价格或作者引用。条目是集合中保存的一个项目。
例如,一个文章集合可能有以下字段:
Posts
├── Title 短文本,必填
├── Excerpt 长文本,可选
├── Content 富文本,可选
└── Featured image 图片,可选
EmDash 还管理每个条目需要的信息,包括其 ID、公开 slug、发布状态、作者、创建和更新时间、语言环境和修订引用。查询结果将这些标准信息与集合定义的字段一起公开。
删除条目会通过设置其删除时间将其移到回收站。管理员可以在有人从回收站永久删除之前恢复它。此条目工作流程与删除字段或集合不同,后者会更改模式并删除存储的数据。
一个模型,两种管理方式
管理员可以在管理面板的内容类型中创建和编辑集合。EmDash 更新数据库模式,内容编辑器在下次加载集合时使用更改。
种子文件用 JSON 描述一个起始模型。模板使用种子在设置期间创建集合和其他站点数据。团队也可以在版本控制中保留种子,并在创建另一个环境时应用它。管理面板和种子不会创建单独的模型;两者都更改目标数据库中存储的模型。
以下种子片段定义了文章示例中的四个自定义字段:
{
"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" }
]
}
]
}
种子文件参考涵盖了冲突处理以及种子可以包含的其他对象,包括设置、分类法、菜单、小部件区域、重定向和示例内容。
更改具有现有内容的模型
添加集合会为新条目创建一个空位置。添加可选字段会将该字段添加到每个条目,但现有条目在编辑者或迁移提供值之前没有值。默认值可以在添加字段时提供初始值。
标签、描述、验证规则、搜索设置和字段顺序可以在不替换字段的情况下更新。集合和字段 slug 是稳定的标识符:管理面板在创建时设置它们,之后不提供重命名。
在更改生产中使用的模型之前,请阅读演进已部署站点的模式。
TypeScript 声明
EmDash 可以从数据库中的模型生成 TypeScript 声明。声明将集合名称和字段形状添加到公共查询函数中,使得对 posts 的查询返回 data.title、data.content 和其他字段已知于 TypeScript 的条目。
在本地开发期间,Astro 集成写入 emdash-env.d.ts 并在模式更改后刷新它。该文件是生成的输出;请编辑内容模型而不是声明。远程工作流可以运行 emdash types 从所选 EmDash 站点写入 .emdash/types.ts。在更改其表示的模型后重新生成该文件。
生成的类型帮助代码匹配当前模式,但不会迁移存储的内容。模型更改和任何所需的内容迁移仍然是独立的操作。