社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544
表单
阅读
2024-05-03更新
最新编辑:金色的赫雯勒莉特翡翠
阅读:
更新日期:2024-05-03
最新编辑:金色的赫雯勒莉特翡翠
> 改写自原文:插件:Form - bilibili游戏中心 - WIKI
> 原始说明:Extension:Page Forms - MediaWiki
什么是 表单?
广义上,表单 是一种 特殊格式,让你可以 进一步 约束 所要处理的数据们。
比如,生活中,多数 电子调查问卷 就是 表单 的一种。
更具体一些,比如:
- 其中 姓名 一栏,人们可以输入 总长度≤7个字符 的 文字。
- 其中 生理性别 一栏,只能从 男、女 中选择其一。
- 其中 年龄 一栏,只允许输入 正整数。
- ...
这些,就是 对于 所要处理的数据们 的 约束,而 指定了这些 带有约束的数据 的东西,就是 表单(Form)。
狭义上,这篇文章 之后主要讨论 的 表单(Form),是 百科的一个插件,也称 页面表单(Page Form) 或 语义表单(Semantic Form),让你可以 在百科中,无需编程,而是使用 像问卷一样的表单 直接 创建、编辑、查询 数据们。
表单 用在哪?
表单 可以用于 便捷地 创建页面。
让我们再借着 上一节的示例,补充一些 小知识:
假设 我们要在百科中,使用问卷(表单),创建一些 人员 页面,大致格式如下:
- 人员信息问卷
- 姓名:____
- 生理性别:____
- 年龄:____
- 照片:...(需要上传图片)
- 爱好:____
这个时候,填好的每张表单 都代表 一个 “人员”,每个人员都有各自的 姓名、生理性别、年龄、照片、爱好 这些数据,我们把这些数据称为 属性(Property)。
但是,到了这步,这一堆属性 仅仅是数据 —— 它们 没被呈现出来,而我们最终想让 每个人员 都在百科中成为 页面,在页面中 呈现各自的这些属性数据。为此,我们需要 模板(Template),模板 将 数据 展示为 页面内容,最终成为 我们想要的 人员页面。
为了方便管理,我们还可以给这些 人员页面 创建一个 分类(Category) —— 分类:人员。
现在,让我们回头来看 表单 本身。
我们把其中:姓名、生理性别、年龄、照片、爱好 这些 需要填入内容或选择 的 数据项 统称为 字段(field)。
字段 可以支持 自动补全,这对于 避免 命名歧义、拼写错误 非常有用。
怎么用 表单?
表单 的 核心 是 表单定义页面,位于 命名空间 Form:(或 表单:) 中。
相关 特殊页面:
完整流程 示例
假设我们要将 一些书籍 创建为 百科。
确定 数据结构
简而言之:要表示什么东西,具有哪些属性。
对于 书籍,我们想建立 两类页面:
- 书籍 页面
- 作者 页面
每个 书籍页面 应该有:
- 标题
- 作者
- 书籍内容的分类
- 出版年份
- 页数
- 封面图
每个 作者页面 应该有:
- 姓名
- 出身地
- 作品列表
创建 属性
对于 书籍 来说,没必要把 标题 作为 属性,因为 书籍页面的标题 就是 书籍的标题。
那么,还剩 5个属性 需要考虑,使用 特殊:创建属性 页面 创建属性:
> 注:下文 保留部分 英文原文,目的是为了 区分 意思相近但不同的内容。
- 作者
- 属性名称:“Was written by”(由作者...)
- 类型:“页面型”(因为要链接到 每个作者对应的作者页面)
- 书籍内容的分类
- 属性名称:“Has genre”(具有题材类型...)
- 类型:“文本型”
- 特定值:如 “艺术,厨艺,小说,历史,诗歌,科学”(这样一来,这个字段就只能选择这些值,仅作为示例,实际上可以把这些 像 作者 一样,也单创建一个分类)
- 出版年份
- 属性名称:“Was published in year”(出版于年份...)
- 类型:“数值型”
- 页数
- 属性名称:“Has number of pages”(具有页数...)
- 类型:“数值型”
- 封面图
- 属性名称:“封面图”(笔者加的所以没有对应的英文)
- 类型:“”
对于 作者,只需要设置
- 出身地
- 属性名称:“Is from country”(出身于...)
- 类型:“文本型”
因为 姓名 是 作者页标题,作品列表 将 根据 书籍的作者属性 自动建立。
创建 模板
使用 特殊:创建模板 页面 分别为 书籍、作者 创建 模板:
对于 书籍:
- 模板名称:“Book”(书籍)
- 模板所定义的分类(可选):“Books”
- 模板字段:对于每个属性,分别设置:字段名称、显示标签、语义属性:
- 作者
- 字段名称:“Authors”(作用于 模板语法 的 变量名,更注重 简洁)
- 显示标签:“Author(s)”(显示在页面中,这个数据描述文字,更注重 正式)
- 语义属性:“Was written by”(之前设置的 属性名)
- 勾选 “处理值列表的字段”,因为 作者可能不止一位
然后点击 “添加字段”,继续设置字段:
- 书籍内容的分类
- 字段名称:“Genres”
- 显示标签:“Genre(s)”
- 语义属性:“Has genre”
- 出版年份
- 字段名称:“Year”
- 显示标签:“Year of publication”
- 语义属性:“Was published in year”
- 页数
- 字段名称:“Number of pages”(不知道原作者怎么想的,可能想不到更简短的了吧,其实可以 Pagecount的,或许是想展示一下,字段名称可以带空格?不理解)
- 显示标签:“Number of pages”
- 语义属性:“Has number of pages”
最后,点击 “保存页面”。
对于 作者:
- 模板名称:“Author”(作者)
- 模板所定义的分类(可选):“Authors”
- 模板字段:对于每个属性,分别设置:字段名称、显示标签、语义属性:
仅需设置一个字段:
- 出身地
- 字段名称:“Country”
- 显示标签:“Country of origin”
- 语义属性:“Is from country”
同时,填写下方的 “聚合”,这样可以把 这个作者所写的所有书 汇总到 作者页。
- 语义属性:选择 “Was written by”
- 列表标题:“Book by this author”(作者著有书籍)
最后,点击 “保存页面”。
创建 表单
使用 特殊:创建表单 页面 分别为 书籍、作者 创建 表单:
- 书籍:
- 表单名称:“Book”
- 添加模板:选择“Book”,并点击 “添加”按钮,之后可以进一步配置
- 添加章节:可以添加章节,之后可以进一步配置
- 作者:
- 表单名称:“Author”
- 添加模板:选择“Author”,并点击 “添加”按钮,之后可以进一步配置
最后,“保存页面”。
创建 分类
使用 特殊:创建分类 页面 分别为 书籍、作者 创建 分类:
- 书籍:
- 分类名称:“Books”
- 默认表单:选择“Book”
- 作者:
- 分类名称:“Authors”
- 默认表单:选择“Author”
最后,“保存页面”。
启用 到 表单 的 链接
打开 “Book”模板(位于 模板:Book),它的代码部分 有类似于:
{{#arraymap:{{{Authors|}}}|,|x|[[Was written by::x]]}}
的内容,将其替换为:
{{#arraymap:{{{Authors|}}}|,|x|{{#formredlink:target=x|form=Author}}{{#set:Was written by=x}}}}
这样一来,链接到 还没有被创建的作者页 的链接,就会被导航到 创建作者页的表单。
添加数据
然后就可以使用 表单 来 填写数据、创建页面 啦。
也可以进一步调整 模板 的代码,来 自定义内容样式。
添加 或 修改 后,记得检查一下 页面内容是否都符合预期 哟)
表单 代码
info
可选的,有关 表单 的 特殊信息。
如果使用,应处于 表单顶部。
参数:
- page name=公式 —— 设置一个 用于自动设置 要添加的页面的名称 的 公式。形式 二选一:
<模板名[字段名]>
—— 替换为 指定模板 中 指定字段 的值。当 for template 被设为 multiple 时,此形式无效。<unique number>
—— 唯一页面名称+最小数字,默认从 无 开始,然后是 2、3 等,可选参数:start=
—— 手动指定 起始数字,该数字需 ≥ 0,如,假设想 从1开始:<unique number;start=1>
random
—— 随机生成一个 6位数,如<unique number;random>
,可以进一步更改 随机数位数,如,随机 4位数:<unique number;random;4>
!页面名称 中,禁用 井号#
。
page name 公式 示例:View source for Form:Author - Discourse DB
- onlyinclude free text —— 令 表单生成的页面 中的 自由文本 被 “onlyinclude”标签 包裹,以便在 嵌入 其它页面 时,不影响其它页面的 语义属性。
对于 用 表单 创建 页面:
- create title=标题 —— 设置标题,可以用 “page name”标签 嵌入 页面名称。
对于 用 表单 编辑 页面:
- edit title=标题 —— 设置标题,可以用 “page name”标签 嵌入 页面名称。
对于 特殊:执行查询 页面:
- query title=标题 —— 设置标题。
- query form at top —— 表单 置顶(默认在底部)。
for template
指定 表单的模板名称,声明 所有字段,直到 end template。
for template|模板名|参数...
参数:
field
在 表单 中,指定一个 字段。对应 表单的模板 中的 字段。
参数较多:
end template
表示 表单的模板内容 截止。
无参数。
section
在 表单 中,指定一个 textarea(文本输入区域),对应一个 页面章节。
参数:
standard input
用于 每个表单 底部 的 输入框,共 10种。
其中,free text 用于 非模板、非章节 的 自由文本内容。
其余 9种 如 Save(保存)、Preview(预览) 用于 功能性交互。
以下内容 待整理
表单输入类型(input type)
- 表单基础值,决定输入的类型和表单页面创建的输入类型。
- 不同的输入类型,支持不同的额外选项。基本格式为{{{field|表单项|input type=输入类型|其他额外选项}}}
文本(text)
- 表单默认的输入类型,如果不选,就是这个。
text支持如下额外选项
- #mandatory:必须为该输入项录入取值
- #restricted:只有管理员才可以编辑该输入项
- #class:该输入项的HTML“class”属性
- #property:该字段所对应的语义属性。注意:如果引用的模板中已有该属性,不要填写。
- #default:该输入项的默认值。该额外册参数与placeholder有冲突,同时设定时,会只显示一个。
- #size:以字符数表示的文本字段大小。
- #maxlength:该字段所允许的最大文本长度。
- #placeholder:用户单击输入框之前一直显示在其中的帮助文本。该额外册参数与default有冲突,同时设定时,会只显示一个。
- #uploadable:在该字段边上添加一个“上传文件”按钮。
- #default filename:已上传文件的默认文件名称
写法示例
{{{field |星级 |mandatory |restricted |class=该输入项的HTML“class”属性 |property=星级 |default=该输入项的默认值 |size=100 |maxlength=1000 |placeholder=用户单击输入框之前一直显示在其中的帮助文本 |uploadable |default filename=已上传文件的默认文件名称}}}
文本框(textarea)
textarea支持如下额外选项
- rows:文本框的行数。数字越大,文本框高度越高,数字代表的是字符数。
- cols:文本框的列数。数字越大,文本框宽度越宽,数字代表的是字符数。如果不填充该项则,文本框默认宽度为100%。
- autogrow:文本框可自由扩大拉动。
写法示例
{{{field |角色介绍 |input type=textarea |rows=7 |cols=10 |autogrow }}}
日期(date)
日期时间(datetime)
可选择的日期(datepicker)
可选择的日期时间(datetimepicker)
年(year)
checkbox
checkboxs
单选按钮(radiobutton)
- 通过values参数来定义所选项,默认添加一个无的选项,若不想选项出现无可同时设置"default="即可
radiobutton支持额外参数
- mandatory:
- restricted:
- class:
- property:
- default:
- values:该输入项的逗号分隔型取值列表
- values from property: 为这个输入项提供值作为值列表的这个wiki中的属性
- values from category: 为这个输入项提供页面作为值列表的这个wiki中的分类
- values from namespace: 为这个输入项提供页面作为值列表的这个wiki中的名字空间
- values from concept: 为这个输入项提供页面作为值列表的这个wiki中的语义MediaWiki“概念”页面
- show on select: 如果只有特定值被选择时显示的页面元素(例如:“值1=>div1;值2=>div2”)
写法示例
listbox
combobox
tree
tokens
- 只允许填充已有的属性
tokens可以使用的额外参数
- mandatory
- restricted
- class
- property
- default
- size
- placeholder:
- existing values only:只允许已经在列表中的值
- max values:允许存储多个值的字段的值数最大值
- values:该输入项的逗号分隔型取值列表
- values from property: 为这个输入项提供值作为值列表的这个wiki中的属性
写法示例
{{{field|所属|input type=tokens|existing values only|max values=1}}}
下拉单选(dropdown)
{{{field|星级|input type=dropdown|values=33333333,33333,444444,5555555|default=}}}
地图(leaflet)
地图(openlayers)
谷歌地图(googlemap)
- height: 以像素数表示的这个输入项的高度
- width: 以像素数表示的这个输入项的宽度
打分(rating)
- star width: 每颗星的宽度(和高度)
- num stars: 要显示的星数
- allow half stars: 是否允许半颗星,例如评级3.5
额外参数
mandatory
- mandatory:必须为该输入项录入取值
restricted
- restricted:只有管理员才可以编辑该输入项
class
- class:该输入项的HTML“class”属性
property
- property:该字段所对应的语义属性。注意:如果引用的模板中已有该属性,不要填写。
default
- default:该输入项的默认值。该额外册参数与placeholder有冲突,同时设定时,会只显示一个。
size
- size:以字符数表示的文本字段大小。
maxlength
- maxlength:该字段所允许的最大文本长度。
placeholder
- placeholder:用户单击输入框之前一直显示在其中的帮助文本。该额外册参数与default有冲突,同时设定时,会只显示一个。
uploadable
- uploadable:在该字段边上添加一个“上传文件”按钮。
default filename
- default filename:已上传文件的默认文件名称
rows
- rows:文本框的行数。数字越大,文本框高度越高,数字代表的是字符数。
cols
- cols:文本框的列数。数字越大,文本框宽度越宽,数字代表的是字符数。如果不填充该项则,文本框默认宽度为100%。
autogrow
- autogrow:文本框可自由扩大拉动。
date format
- date format:日期格式字符串。详情请参见在线文档。
week start
- week start:一周的第一天(0-星期日,1-星期一 ……)。
first date
- first date:可选择的第一个日期(采用yyyy/mm/dd格式)。
last date
- last date:可选择的最后日期(采用yyyy/mm/dd格式)。
disable days of week
- disable days of week:不可选择的日子列表(比如,周末:6、 0)。
highlight days of week
- highlight days of week:应当高亮显示的逗号分隔型日期列表/日期范围(日期采用yyyy/mm/dd格式,日期范围采用yyyy/mm/dd-yyyy/mm/dd格式)。
disable dates
- disable dates:已禁用的逗号分隔型日期列表/日期范围(日期采用yyyy/mm/dd格式,日期范围采用yyyy/mm/dd-yyyy/mm/dd格式)。
include timezone
- include timezone:包含用于时区的输入项
values
- values:该输入项的逗号分隔型取值列表
values from property
- values from property:为这个输入项提供值作为值列表的这个wiki中的属性
values from category
- values from category:为这个输入项提供页面作为值列表的这个wiki中的分类
values from namespace
- values from namespace:为这个输入项提供页面作为值列表的这个wiki中的名字空间
values from concept
- values from concept:为这个输入项提供页面作为值列表的这个wiki中的语义MediaWiki“概念”页面
show on select
- show on select:如果只有特定值被选择时显示的页面元素(例如:“值1=>div1;值2=>div2”)
其它
!以下内容仅在 Form:(表单:)命名空间 才生效。
- 添加摘要:{{{standard input|summary}}}
- 标记为小编辑:{{{standard input|minor edit}}}
- 监视本页:{{{standard input|watch}}}
- 保存页面:{{{standard input|save}}}
- 显示预览:{{{standard input|preview}}}
- 显示更改:{{{standard input|changes}}}
- 取消:{{{standard input|cancel}}}