内容模型

本页内容

内容模型描述了站点存储的信息。在 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.titledata.content 和其他字段已知于 TypeScript 的条目。

在本地开发期间,Astro 集成写入 emdash-env.d.ts 并在模式更改后刷新它。该文件是生成的输出;请编辑内容模型而不是声明。远程工作流可以运行 emdash types 从所选 EmDash 站点写入 .emdash/types.ts。在更改其表示的模型后重新生成该文件。

生成的类型帮助代码匹配当前模式,但不会迁移存储的内容。模型更改和任何所需的内容迁移仍然是独立的操作。

相关概念

阅读集合与字段了解集合功能和字段选择。阅读管理面板了解编辑器和权限模型。