集合定义了一种内容类型以及编辑者用来创建它的表单。集合的字段定义了每个条目可以包含的值。例如,一个产品集合可以包含标题、价格、描述、产品图片和对品牌条目的引用。
管理员在内容类型中管理集合。种子文件可以在从配置设置站点或环境时定义相同的集合设置。
集合标识
每个集合都有一个复数标签、一个可选的单数标签和一个 slug。标签显示在管理面板中。slug 在查询、API 路由、种子文件和数据库中标识集合。
例如,标记为博客文章的集合可以使用博客文章作为单数标签,posts 作为 slug。然后 Astro 代码通过该 slug 进行查询:
import { getEmDashCollection } from "emdash";
const { entries: posts } = await getEmDashCollection("posts");
在创建集合之前选择 slug。管理面板不会在之后重命名集合 slug 或字段 slug,因为现有查询和存储列依赖于它们。slug 以小写字母开头,仅包含小写字母、数字和下划线,最长 63 个字符。EmDash 还会拒绝其自身路由和条目数据使用的保留名称。
集合行为
集合设置控制编辑者和公开页面如何使用条目:
- 可路由要求在条目发布之前有一个公开 slug。URL 模式可以将条目 slug 或 ID 与其发布日期组合以生成公开路径。
- 草稿允许编辑者在发布前保存工作。
- 修订保留内容历史的快照。
- 预览为未发布的内容提供签名预览 URL。
- 搜索为标记为可搜索的字段启用全文搜索。
- SEO 添加标题、描述和图片元数据字段,并将集合包含在站点地图中。
- 编辑锁定在编辑者工作时保留条目,并在锁定释放前拒绝其他作者。
- 评论可以按集合启用,带有审核和自动关闭设置。
- 分组将集合放入侧边栏的可折叠文件夹中。具有相同分组的集合共享一个文件夹,定位在第一个出现的位置。当分配给分类法的每个集合都显示在该文件夹中时,分类法也会加入该文件夹。
启用站点实际使用的行为。例如,开启预览会提供预览 URL,但 Astro 页面仍必须正确渲染条目及其预览状态。完整流程请参阅预览模式。
字段类型
根据编辑者输入的值和应用程序代码接收的方式选择字段类型。EmDash 支持 16 种字段类型:
| 内容需求 | 字段类型 | 编辑者使用的控件 |
|---|---|---|
| 短文本或长文本 | string、text、slug、url | 文本输入、文本区域和 URL 值 |
| 数字 | number、integer | 小数或整数输入 |
| 状态和时间 | boolean、datetime | 开关或日期时间选择器 |
| 固定选项 | select、multiSelect | 从配置选项中单选或多选 |
| 富文本或结构化数据 | portableText、json、repeater | 富文本、JSON 或子字段的重复组 |
| 媒体 | image、file | 从媒体库中选择的项目 |
| 关系 | reference | 从另一个集合中选择的条目 |
类型不仅仅是编辑器控件。它还决定了 EmDash 如何存储和验证值,以及生成的 TypeScript 声明如何描述它。字段类型参考列出了每种类型的值形状和选项。
字段规则
每个自定义字段都有一个标签和一个 slug。以下选项进一步描述其行为:
- 必填阻止在没有值的情况下保存条目。
- 唯一阻止集合中的两个条目使用相同的值。
- 默认值在适当时提供起始值。
- 验证可以根据字段类型限制文本长度、数字范围、模式、选项、文件类型或重复器长度。
- 可搜索将支持的文本字段包含在集合的全文搜索索引中。
- 已索引为支持的字段上的排序或过滤创建数据库索引。
- 可翻译控制每个区域设置是否有自己的值。不可翻译的值在同一条目的翻译之间共享。
当查询按该自定义字段排序或过滤时,开启已索引。索引帮助数据库找到匹配或排序的条目,但会使用额外存储,并在每次创建或更新内容时增加工作量。不要仅仅因为页面显示了某个字段就为其建立索引。
索引可用于 string、url、number、integer、boolean、datetime、select、reference 和 slug 字段。富文本、JSON、重复器和多选值包含更复杂的数据,无法使用这种索引。
引用存储目标条目的 ID。使用目标集合配置引用,仅当字段需要保存多个条目 ID 时才启用多值。引用允许代码加载或识别相关内容;它不会将目标条目复制到源条目中。
后续更改字段
标签、验证、搜索设置、索引、小部件选项和显示顺序可以在不替换字段的情况下更改。添加字段会保留每个现有条目,但如果站点期望某个值,这些条目将需要新字段的值。
迁移必须转换现有值、更新模型,并在部署期间保持旧应用程序代码和新应用程序代码的兼容性。在进行此类更改之前,请遵循部署站点的模式演进。