字段定义了内容结构,以及在编辑器中为特定集合显示的表单字段。
这些字段被分类为字段类型——它们决定了存储的数据以及在编辑器中显示的输入组件。
字段类型的选项包括:
rich-text
(markdown)基本类型定义如下所示。某些字段类型通过特定类型的选项扩展了以下类型定义。
字段的名称。
决定使用的数据类型和表单字段。
在编辑器中显示的集合名称。如果省略,则使用name
。
将显示给用户的关于字段的简短描述。
如果为true
,则在此字段没有值时禁用保存。
控制在内容文件中使用的字段名称。
定义字段标题。
仅限String字段。
定义哪个字段保存到Markdown正文中。
仅限Text(rich-text
和string
)字段。
限制允许的值为给定选项。
仅限Scalar字段。
All properties marked as REQUIRED must be specified for the field to work properly.
在GraphQL模式中使用的字段名称。
在同级字段中应是唯一的。
此名称不能包含空格、破折号或特殊字符。
nameOverride
属性可以设置为用于替换内容文件中的字段名称。在其他情况下仍将使用实际的名称属性。
fields: [{name: 'my_field',nameOverride: 'my-field',//...},];
isTitle
控制在集合页面中为文件显示哪个字段。如果从未设置,将使用文件名。
要使用此属性...
collections.fields
或collections.templates.fields
中定义)。required
为true。通常保存在markdown文件中的内容将存储在前置部分。
isBody
控制链接到正文部分的字段。
要使用此属性...
rich-text
或string
。"mdx"
或"md"
格式。指定list: true
会创建一个关联字段的数组。
fields: [{label: 'Hero Image',name: 'heroImage',type: 'image',list: true,},];
在对象字段类型的列表上设置ui.max
,当至少添加了给定数量的元素后,会在编辑器中禁用添加按钮。
这不支持使用模板的对象。
{type: "object",label: "对象列表",name: "objectList",list: true,ui: {max: 3,},// ...}
对于任何列表字段,如果设置了ui.min
,则在项目少于最小数量时,删除按钮将变灰(见下图)。
{type: "string",label: "羊驼",name: "llamas",list: true,ui: {min: 3,}}
任何标量字段都可以接受一个options
数组来限制允许的值。这会将编辑器组件更改为下拉菜单或复选框集。
您可以传入一个值数组,或一个结构为以下的对象数组:
选项属性 | 定义 |
---|---|
value | 与选项关联的实际值。 |
label | 在编辑器中显示的此选项的名称。 |
通过同时使用options
和list
属性创建一组复选框字段:
fields: [{name: 'categories',type: 'string',list: true,options: [{value: 'movies',label: 'Movies',},{value: 'music',label: 'Music',},//...],},];
通过使用options
而不使用list
属性创建一个下拉字段:
fields: [{name: 'categories',type: 'string',options: [{value: 'movies',label: 'Movies',},{value: 'music',label: 'Music',},//...],},];
format
和parse
定义了控制渲染和保存内容的函数。
在下面的示例中,当用户输入时,他们将看到所有小写字符。当保存时,将是所有大写字符。
// ...fields{name: "username",type: "string",label: "用户名",ui: {// 在每次表单更改时调用,但结果存储在数据中而不是表单值中(保存到文件但不显示给用户)parse: (val?: string)=>val && val.toUpperCase(),// 在每次表单更改时调用,结果放回表单的值中(显示给用户)format: (val?: string)=> (val ? val.toLowerCase() : ""),},},
Tina允许使用验证函数ui.validate
进行客户端验证。如果值无效,此函数返回一个string
错误消息;如果字段有效,则返回null
。
要在验证中包含表单的其他字段值,可以使用allValues
参数。
不兼容引用、对象和富文本字段类型——它们有更复杂的内部结构。
{label: "标题",name: "title",type: "string",ui: {validate: (value, allValues) => {const titleLength = value?.length || 0const descLength = allValues?.description?.length || 0if (titleLength >= descLength) {return '描述必须比标题长'}}}}