\n我们正在向主题设置支持的类型引入新的 type: objects,可用于替换我们即将弃用的现有 json_schema 类型。\n\n### 定义对象类型主题设置\n\n要创建对象类型主题设置,首先像任何主题设置一样定义一个顶层键,它将用作设置的名称。\n\nyaml\nlinks: ...\n\n\n接下来,为设置添加 type、default 和 schema 关键字。\n\nyaml\nlinks:\n type: objects\n default: []\n schema: ...\n\n\ntype: objects 表明这将是一个对象类型设置,而 default: [] 注释将设置的默认值设置为空数组。请注意,默认值也可以设置为对象数组,一旦定义了 schema,我们将进行演示。\n\n要定义 schema,首先像这样定义 schema 的 name:\n\nyaml\nlinks:\n type: objects\n default: []\n schema:\n name: link\n\n\n接下来,我们将为 schema 添加 properties 关键字,它允许我们定义和验证每个对象应该是什么样子。\n\nyaml\nlinks:\n type: objects\n default: []\n schema:\n name: link\n properties:\n name: ...\n\n\n在上面的示例中,我们声明 link 对象有一个 name 属性。要定义预期的数据类型,每个属性都需要定义 type 关键字。\n\nyaml\nlinks:\n type: objects\n default: []\n schema:\n name: link\n properties:\n name:\n type: string\n\n\n上面的 schema 定义声明 link 对象有一个类型为 string 的 name 属性,这意味着该属性只接受字符串值。目前支持以下类型:\n\n- string:属性值存储为字符串。\n- integer:属性值存储为整数。\n- float:属性值存储为浮点数。\n- boolean:属性值为 true 或 false。\n- enum:属性值必须是 choices 关键字中定义的值之一。\n yaml\n links:\n type: objects\n default: []\n schema:\n name: link\n properties:\n name:\n type: enum\n choices:\n - name 1\n - name 2\n - name 3\n \n- categories:属性值是有效类别 ID 的数组。\n- groups:属性值是有效组 ID 的数组。\n- tags:属性值是有效标签名称的数组。\n\n定义了 schema 后,现在可以通过像这样在 yaml 中定义一个数组来设置该设置的默认值:\n\nyaml\nlinks:\n type: objects\n default:\n - name: link 1\n title: link 1 title\n - name: link 2\n title: link 2 title\n schema:\n name: link\n properties:\n name:\n type: string\n title:\n type: string\n\n\n#### 必需属性\n\n默认情况下,所有定义的属性都是可选的。要将属性标记为必需,只需用 required: true 注释该属性。也可以通过用 required: false 注释属性来将属性标记为可选。\n\nyaml\nlinks:\n type: objects\n default: []\n schema:\n name: link\n properties:\n name:\n type: string\n required: true\n title:\n type: string\n required: false\n\n\n#### 自定义验证\n\n对于某些属性类型,内置支持自定义验证,可以通过用 validations 关键字注释属性来声明。\n\nyaml\nlinks:\n type: objects\n default: []\n schema:\n name: link\n properties:\n name:\n type: string\n required: true\n validations:\n min: 1\n max: 2048\n url: true\n\n\n#### string 类型的验证\n\n- min_length:属性的最小长度。关键字的值必须是整数。\n- max_length:属性的最大长度。关键字的值必须是整数。\n- url:验证属性是否是有效的 URL。关键字的值可以是 true/false。\n\n#### integer 和 float 类型的验证\n\n- min:属性的最小值。关键字的值必须是整数。\n- max:属性的最大值。关键字的值必须是整数。\n\n#### tags、groups 和 categories 类型的验证\n\n- min:属性的最小记录数。关键字的值必须是整数。\n- max:属性的最大记录数。关键字的值必须是整数。\n\n#### 嵌套对象结构\n\n对象也可以有一个包含对象数组的属性。为了创建嵌套对象结构,属性还可以用 type: objects 和关联的 schema 定义进行注释。\n\nyaml\nsections:\n type: objects\n default:\n - name: section 1\n links:\n - name: link 1\n url: /some/url\n - name: link 2\n url: /some/other/url\n schema:\n name: section\n properties:\n name:\n type: string\n required: true\n links:\n type: objects\n schema:\n name: link\n properties:\n name:\n type: string\n url:\n type: string\n\n\n### 设置描述和本地化\n\n要为 en 区域设置添加描述,请创建一个名为 locales/en.yml 的文件,并使用以下格式,给定以下对象类型主题设置。\n\nyaml\nsections:\n type: objects\n default:\n - name: section 1\n links:\n - name: link 1\n url: /some/url\n - name: link 2\n url: /some/other/url\n schema:\n name: section\n properties:\n name:\n type: string\n required: true\n links:\n type: objects\n schema:\n name: link\n properties:\n name:\n type: string\n url:\n type: string\n\n\nyaml\nen:\n theme_metadata:\n settings:\n sections:\n description: This is a description for the sections theme setting\n schema:\n properties:\n name:\n label: Name\n description: The description for the property\n links:\n name:\n label: Name\n description: The description for the property\n url:\n label: URL\n description: The description for the property\n\n\n\n—\n\n\u003csmall\u003eThis document is version controlled - suggest changes on github.\u003c/small\u003e
我仍然不相信弃用 json schema 风格是个好主意。
虽然这些可能变得相当复杂,而且不是最“开发者友好”的格式(所以在这方面这是一个巨大的改变),但有在线工具可以验证 json schema,这是一种非常有用的方式来验证 schema 本身以及针对任何默认数据。
例如 https://www.jsonschemavalidator.net/
在这个新世界里,那将如何运作?
上传主题时,我们将根据定义的模式验证默认数据。话虽如此,我们现在不验证模式定义是否有效,但要做到这一点并不难。即使是现在的 json 模式设置,我认为我们也没有根据定义的模式验证默认数据。
我们目前 json 模式类型设置的实现方式在很多方面都有些问题,最明显的是管理界面中的编辑器。我们内部讨论过,并决定我们维护一个由我们定义的有限模式格式比允许 json 模式带来的所有可能性要容易得多。
这里有一些很酷的功能:
-
您可以摆脱
JSON.parse并直接访问设置以获取对象,这真的很棒。 -
URL 验证器!
![]()
编辑器是否可以保留多行?
默认 可以:
- name: markdown
value: >
## Heading
* first bullet
* second bullet
但一旦你编辑了它,回车符就会丢失
此外,最好有一个“text”类型,可以存储更长格式的数据,并可能暴露一个更大的“textarea”编辑器。
我注意到了这一点,它已在以下位置修复:
我也想请求此功能!![]()
另外,首帖包含有关 identifier 属性的信息会很有帮助。
在查看上面 Nolo 的图片之前,我认为无法用属性值替换默认的子标签。查看代码后,我找到了 identifier 属性。
重新排序当然是我们内部也提出过的一个功能。我本周会尝试实现它。
知道了。我将更新首帖关于 identifier 属性的信息。
您好,有计划很快支持其他字段类型吗?
例如:
- 支持 markdown 格式的
long_string;也许带有可自定义的工具栏, date字段(带验证规则),color字段(带验证规则)?
目前还没有计划,尽管我同意这会很有用。我个人想要一个 icon 字段。
根据我的经验,这似乎就像保存的预设一样工作。在此示例中,前 2 个条目可以受益于这些预设,但之后的所有新条目最初都会显示为空白。
这意味着我们也无法为每个字段设置默认值。例如,如果我希望一个复选框一开始就处于选中状态,这是无法实现的。
links:
type: objects
default:
- name: link 1
title: link 1 title
- name: link 2
title: link 2 title
schema:
name: link
properties:
is_active:
type: boolean
default: true
default: true 在那里无法按预期工作。
是否有办法为每个创建的条目设置每个字段的默认值?
在 Sass 中有办法将对象属性导入变量吗?
你可以随时解析字符串,但这听起来不是一个好主意。![]()
谢谢分享示例!不过是的……它看起来并不那么诱人 ![]()
顺便问一下,不用花太多时间看,我们在这方面进展如何?
是的,这不太好,不要这样做。
这更多是尝试看看是否可行,而不是一个合理的方法。
我同意你;有一个直接的方法会很好! ![]()
我也想知道!
另外,如果我没记错的话,这将是与 json_schema 唯一缺失的功能奇偶校验。
我一直在寻找上传类型可用,但它不可用。
快速查看核心,发现主题、帖子和上传类型已在服务器端实现,但未在前台实现。有什么特别的原因吗?![]()



