每个集合都是一个独特的内容结构。在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标志进行更改。
格式
定义了此集合中文档的文件扩展名。设置为"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',},],},],},});