每个集合都是一个独特的内容结构。在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文件。
一个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.include的工作方式相同,但会排除与模式匹配的任何文件。排除您不想编辑的文件,或属于不同集合的文件。
最终排除的文件集由!(<path>/<match.exclude>.<format>)定义。
要从集合中排除所有index.md文件,请使用:
{path: 'content/posts',match: {exclude: '**/index',},format: 'md'}
defaultItem属性定义了在文档创建时应该存在的数据。默认项是一个函数,接收collection并返回默认项。
默认项的所有属性应对应于集合中定义的字段。
defaultItem: () => {return {{{field name}}: {{value}}}}
对象字段类型独立定义其默认值。更多信息请参见此处。
要为富文本字段设置默认值,您必须提供一个抽象语法树(AST)。更多信息请参见此处。
默认情况下,集合中的文件将采用markdown格式。
export default defineConfig({//...schema: {collections: [{name: 'posts',label: '博客文章',path: 'content/posts',fields: [// 字段数组],},],},});
允许的操作属性控制用户是否可以从集合页面创建、删除和组织内容文件。
export default defineConfig({//...schema: {collections: [{label: '导航',name: 'navigation',path: 'content/navigation',ui: {// 不允许编辑者创建新的导航项allowedActions: {create: false,delete: false,createNestedFolder: false,},},format: 'json',fields: [// 字段数组],},],},});
export default defineConfig({// ...schema: {collections: [{label: '博客文章',name: 'post',path: 'content/posts',defaultItem: () => {return {// 当创建新文章时,标题字段将被设置为“新文章”title: '新文章',};},fields: [{type: 'string',label: '标题',name: 'title',},],},],},});