您好,Discourse Meta 社区!
我们很高兴推出一项新的实验性功能:表单模板。通过它,您可以在主题创建流程中强制执行结构化表单并进行数据验证。

启用该功能
该功能隐藏在全站实验性标志后面。要启用它,只需在
管理员 ▸ 设置 下打开 experimental_form_templates 站点设置。
管理模板
可以在
管理员 ▸ 自定义 ▸ 模板 (/admin/customize/form-templates/) 创建、编辑和删除表单模板。
在那里,您将看到一个包含论坛上现有模板列表的表格。您可以编辑、删除和预览任何现有模板,也可以创建新模板。该表格还显示了每个模板当前激活的类别。
模板以 YAML 结构定义。您可以手动输入,也可以利用顶部的“添加”按钮,它会在末尾附加一段示例 YAML 代码,定义某种输入类型。
这是一个完整的 YAML 示例,包含所有字段类型:
- type: input
id: name
attributes:
label: "Full name"
placeholder: "eg. John Smith"
description: "What is your full name?"
validations:
required: true
minimum: 2
maximum: 100
- type: textarea
id: introduction
attributes:
label: "Introduction"
placeholder: "A short introduction"
description: "Write a short introdution about yourself"
validations:
required: true
minimum: 10
maximum: 500
- type: dropdown
id: fav-animal
attributes:
label: "Favorite animal"
description: "Select your favorite animal"
none_label: "Select an option"
choices:
- "Dog"
- "Cat"
- "Other"
validations:
required: true
- type: multi-select
id: comm-channel
attributes:
label: "Communication channels:"
description: "Select your preferred communication channels:"
none_label: "Select an option"
choices:
- "Email"
- "Phone"
- "Messenger"
- type: upload
id: cat-photo
attributes:
label: "Cat photo"
description: "Send a photo of your cat (or any cat)"
file_types: ".jpg, .png"
allow_multiple: false
- type: checkbox
id: accept-terms
attributes:
label: "I have read and I agree to the terms"
description: "You need to accept terms to continue"
validations:
required: true
验证
对于每个字段,您可以添加验证选项,在提交表单之前必须通过这些选项。有关可用验证的列表,请点击代码编辑器上方的“验证”按钮。这将向您显示每个验证选项的语法并描述其预期用途。
验证选项
| 键 | 类型 | 描述 |
|---|---|---|
| required | boolean | 要求在提交表单前填写该字段 |
| minimum | integer | 对于文本字段,指定允许的最小字符数 |
| maximum | integer | 对于文本字段,指定允许的最大字符数 |
| pattern | regex string | 对于文本字段,指定允许输入的正则表达式 |
| type | string | 对于输入字段,您可以指定预期的输入类型(text|email|date|number|url|tel|color) |
将模板应用于类别
创建表单模板后,您需要将其应用于类别。为此,请转到您想应用模板的类别的设置。
选择“模板”菜单,然后在右侧使用开关启用表单模板。启用后,您可以使用下拉菜单将一个或多个模板添加到类别中。
填写表单
将模板应用于类别后,当您创建主题并选择具有该模板的类别时,模板的表单将自动显示。如果类别分配了多个模板,您还将看到一个选择器来切换可用的模板。
填写表单时,它将遵守表单模板定义中指定的任何验证,并且只有在有效后,您才能点击
创建主题,它将根据所有输入字段生成主题内容。
最后,提交后,主题内容将由所有填写的字段组成:
预填表单值
您还可以通过调用 /new-topic 并使用与表单模板中定义的字段 ID 匹配的参数来预填表单值。例如,对于之前用作示例的模板:
/new-topic?name=John%20Smith&favorite-animal=Cat
路线图
- 在创建主题时将 JSON 输出存储在主题数据中
- 添加切换选项,以便在具有表单模板的类别上仍能选择和使用自由格式编辑器
您如何帮助我们
我们很想听听您对这项新功能的反馈。如果您是管理员并想在您的论坛上试用它,可以启用 experimental_form_templates 设置并立即开始使用!
请在标记为 form-templates 的新主题中分享您的体验、报告任何错误或提供任何建议。
感谢您帮助我们让 Discourse 变得更好!









