社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544

全站通知:

表单

阅读

    

2024-05-03更新

    

最新编辑:金色的赫雯勒莉特翡翠

阅读:

  

更新日期:2024-05-03

  

最新编辑:金色的赫雯勒莉特翡翠

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
金色的赫雯勒莉特翡翠

> 改写自原文:插件: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}}}