集合
每个集合都是一个独特的内容结构。在TinaCMS中创建内容文档是基于每个集合进行的,以便:
- 内容结构与集合定义匹配。
- 文档存在于该集合下。

每个集合为TinaCMS编辑器定义其自己的表单字段。
这些可以在集合的fields或templates数组中指定。
可以设置format属性来控制在集合中创建的内容的文件类型。
对象定义
集合的内部名称。
确定此集合中文档的存储位置。
内容文件的扩展名和格式。
在编辑器中显示的集合名称。
字段的数组。
模板的数组。
定义新创建文档中的预填充数据。
用于解析前置数据的格式。
分隔符用于前置数据。
All properties marked as REQUIRED must be specified for the field to work properly.
必须仅提供字段或模板之一。
名称
name定义了在GraphQL模式中使用的集合名称。
对于每个集合应该是唯一的。
我们建议在集合中使用单数命名(post,而不是posts)。
此名称不能包含空格、破折号或特殊字符。
路径
path让Tina知道哪些目录包含集合的文档。
不同集合的文档可以共存,但如果有重叠的文档,CLI将打印警告。
默认情况下,路径是相对于CLI运行的位置,但可以通过使用--rootPath CLI标志来更改。
在本地模式下,当更改**
path**时,您需要运行tinacms dev。这确保生成的文件包含新路径。
文件格式
Format定义了此集合中文档的文件扩展名。设置为"md"、"markdown"、"mdx"、"json"、"toml"或"yaml"之一。
如果未指定,则使用markdown文件。
路径匹配
match.include
一个glob模式,用于匹配path目录中的文件子集,不包括文件扩展名。使用此字段来排除子目录或匹配特定文件集。
?匹配单个字符*匹配任意数量的任意字符(除/外)[abc]匹配给定集合中的任意一个字符[a-z]匹配一个范围。{foo,bar}匹配给定集合中的任意一个完整单词
最终包含的文件集由<path>/<match.include>.<format>定义。
要获取post目录中的所有markdown文件(即content/posts/*.md),但不包括子目录,请使用:
{path: 'content/posts',match: {include: '*',},format: 'md'}
要仅获取两个文件content/config/foo.json和content/config/bar.json,请使用:
{path: 'content/config',match: {include: '{foo,bar}',},format: 'json'}
match.exclude
这与match.include的工作方式相同,但会排除与模式匹配的任何文件。排除您不想编辑的文件,或属于不同集合的文件。
最终排除的文件集由!(<path>/<match.exclude>.<format>)定义。
要从集合中排除所有index.md文件,请使用:
{path: 'content/posts',match: {exclude: '**/index',},format: 'md'}
定义默认值
defaultItem属性定义了在文档创建时应该存在的数据。默认项是一个函数,接收collection并返回默认项。
默认项的所有属性应对应于集合中定义的字段。
defaultItem: () => {return {{{field name}}: {{value}}}}
对象的默认值
对象字段类型独立定义其默认值。更多信息请参见此处。
富文本的默认值
要为富文本字段设置默认值,您必须提供一个抽象语法树(AST)。更多信息请参见此处。
示例
简单的markdown集合
默认情况下,集合中的文件将采用markdown格式。
export default defineConfig({//...schema: {collections: [{name: 'posts',label: '博客文章',path: 'content/posts',fields: [// 字段数组],},],},});
具有受限文件管理权限的JSON集合
允许的操作属性控制用户是否可以从集合页面创建、删除和组织内容文件。
export default defineConfig({//...schema: {collections: [{label: '导航',name: 'navigation',path: 'content/navigation',ui: {// 不允许编辑者创建新的导航项allowedActions: {create: false,delete: false,createNestedFolder: false,},},format: 'json',fields: [// 字段数组],},],},});
具有默认标题的Markdown集合
export default defineConfig({// ...schema: {collections: [{label: '博客文章',name: 'post',path: 'content/posts',defaultItem: () => {return {// 当创建新文章时,标题字段将被设置为“新文章”title: '新文章',};},fields: [{type: 'string',label: '标题',name: 'title',},],},],},});