集合
为你的 CMS 设置不同的集合
集合是一组具有相同结构,并且通常保存在同一文件夹中的文件。你可以将集合用于博客文章、产品页面、作者数据文件等等。
要在 LumeCMS 中定义一个集合,你需要 3 样东西:
- 集合名称。例如:"Posts"。
- 用于读取和写入内容的存储。例如 "src:posts"。
- 用于修改内容的字段。
cms.collection()
函数允许你定义一个集合:
cms.collection("posts", "src:posts/*.md", [
"title: text",
"content: markdown",
]);
在上面的例子中,我们定义了 posts
集合,使用了 src
存储(选择 posts
文件夹下所有的 .md
文件)。第三个参数是此集合的字段列表。有关此值的更多信息,请参阅 字段文档。
集合可以创建、编辑和删除文档。
额外选项
对于额外的选项,可以使用如下对象形式:
cms.collection({
name: "posts",
store: "src:posts/*.md",
fields: [
"title: text",
"content: markdown",
],
});
除了 name
,store
和 fields
之外,集合还具有以下选项:
description
它允许在集合名称下方插入一段描述:
cms.collection({
name: "posts",
description: "用于创建、编辑或删除博客文章",
store: "src:posts/*.md",
fields: [
"title: text",
"content: markdown",
],
});
label
在菜单中此集合的可视化名称。如果未定义,则使用 name
值。
cms.collection({
name: "posts",
label: "你的文章!"
description: "用于创建、编辑或删除博客文章",
store: "src:posts/*.md",
fields: [
"title: text",
"content: markdown",
],
});
url
url
选项允许设置集合的预览 URL。它用于集合中的每个条目不生成页面,但所有条目生成一个唯一页面的情况。
例如,我们可以有一个事件集合,但在网站中所有事件都列在一个唯一的页面中。我们可以配置 CMS,以便每次我们编辑任何事件时都预览此 URL:
cms.collection({
name: "events",
store: "src:_data/events/*.yml",
fields: [
"title: text",
"date: datetime",
"content: markdown",
],
url: "/events/",
});
documentName
要在集合中创建一个新条目,我们必须指定文件路径(例如:/new-post.md
)。此选项允许使用任何字段的值自动生成名称。
在模式中使用 {varname}
语法来使用任何值生成文件名。例如,我们可以使用标题字段来生成新文章的文件名:
cms.collection({
name: "posts",
store: "src:posts/*.md",
fields: [
"title: text!",
"content: markdown",
],
documentName: "{title}.md",
});
为了生成文件名,空格会被转换为连字符,并且 /
字符会被移除。例如,标题 A/B testing
将生成文件 ab-testing.md
。
使用函数进行更高级的名称生成:
cms.collection({
name: "posts",
store: "src:posts/*.md",
fields: [
"title: text!",
"author: text!",
"content: markdown",
],
documentName(data) {
return `${data.title}-${data.author}.md`;
},
});
Note
建议将用于生成文件路径的字段配置为“必需”,以避免由空值引起的错误。
documentLabel
此函数自定义文档的标签。标签是每个文档在集合的文档列表中使用的可见名称。
这是一个删除 .md
扩展名的示例:
cms.collection({
name: "posts",
store: "src:posts/*.md",
fields: [
"title: text!",
"author: text!",
"content: markdown",
],
documentLabel(name) {
return name.replace(".md", "");
},
});
如果未指定,则使用默认函数来删除扩展名、将连字符转换为空格并应用其他小的调整。例如,文档名称 /this-is-a-page.md
将转换为标签 This is a page
。
create & delete
如果你不想在集合中创建和/或删除条目(因为它具有固定长度),则此选项很有用。
cms.collection({
name: "countries",
store: "src:countries/*.yml",
fields: [
"title: text",
"content: markdown",
],
create: false,
delete: false,
});