请登录
玩家共建非官方战双WIKI,做最还原游戏内UI体验的WIKI!
战双WIKI反馈留言板 · WIKI编辑教程 · BWIKI收藏到桌面的方法说明
帮助/解析器函数
阅读
2022-02-14更新
最新编辑:盐析SaltPackage・_・
阅读:
更新日期:2022-02-14
最新编辑:盐析SaltPackage・_・
基础函数
if
if 函数和很多其他平台的表达一样,是一个if-then-else结构。语法是:
{{#if: <判断字符串> | <then字符串> | <else字符串> }} {{#if: <判断字符串> | <then字符串> |}}
若判断字符串为非空字符串(忽略前导和后缀空格,可对比“有效数字”概念理解),则函数返回then字符串,否则函数返回else字符串。else字符可被省略而不会造成错误,但函数在判断字符串为空时便会返回空字符串。
ifeq
ifeq比较两个字符串,返回比较结果。语法为:
{{#ifeq: <字符串1> | <字符串2> | <相等时返回的字符串> | <不相等时返回的字符串> }}
示例:
假设模板 Ifeq示例 的内容是
{{#ifeq:{{{语言}}}|zh|我使用中文|I don't use Chinese}}
则 {{Ifeq示例|lang=zh}} 的结果是 我使用中文;而 {{Ifeq test|lang=en|I prefer English}} 的结果是 I don't use Chinese
ifexist
ifexist会判断指定的页面是否存在,然后返回对应的结果:
{{#ifexist: <待测页面标题> | <存在时返回的字符串> | <不存在时返回的字符串> }}
示例:
{{#ifexist:测试|有测试頁面|无测试頁面}} 得到 有测试頁面
{{#ifexist:用户:83534918|该用户页存在|该用户页不存在}} 得到 该用户页存在(猜猜这是谁?)
{{#ifexist:露西亚·α|√|×}} 得到 ×
{{#ifexist:文件:礼物 阿呆蛙周边.png|该文件存在|该文件不存在}} 得到 该文件存在
switch
switch将一个值与多个预设值比较,若有匹配时则返回指定字符串,即双射。语法是:(也可以横向书写)
{{#switch: <比较值> |<预设值1>=<结果1> | ... |<预设值n>=<结果n> |#default=<缺省结果> }}
或
{{#switch: <比较值> |<预设值1>=<结果1> | ... |<预设值n>=<结果n> |<缺省结果> }}
switch将从左往右逐一尝试,直到出现匹配。函数将返回第一个匹配值对应的结果,而忽略后面的匹配值。如果没有匹配,函数将返回缺省结果#default。如果缺省结果没有设置,函数将返回空串。
注意:
“缺省结果”是最后一个没有等号的预设值或“#default”预设值对应的结果;如果期望把一个包含等号“=”的字符串作为缺省结果,则必须采用“#default”预设值形式。例如:
#default=<span style="color:red;">red</span>
switch也可用作满射(多对一,避免重复设置结果)。即某预设值后未设置结果,这样如果该预设值与比较值匹配,则函数返回第一个有结果的预设值的结果。例如:
{{ #switch: <比较值> | <预设值1> | <预设值2> | <预设值3> = <结果3> | <缺省结果> }}
如果比较值与预设值1、预设值2或预设值3匹配,都将返回结果3。注意:“#default”后必须有“=”,但其他预设值可以使用“#default”的结果。
switch函数会将等号前的所有内容认定为“预设值”,若希望输出带等号的结果,请使用<nowiki>=</nowiki>方式表达。
css
使用CSS函数为当前页添加CSS样式。语法:(也可横向书写)
{{#css: <内容> }}
注意:此函数或在接下来的版本中被禁用,但当前可预见的时间段内是可用的。若不希望带来遗留问题,请到MediaWiki:Common.css页面添加CSS样式
replace
replace函数用来替换页面内容中特定的元素。格式为:
{{#replace:内容|需要替换的元素|用来替换的元素}}
例:
{{#replace:灰鸦小队·里|里|Lee}}
可以得到: 灰鸦小队·Lee
不常用的常用
expr
expr函数,计算数学表达式。语法为:
{{ #expr: 表达式 }}
表达式支持的运算符有:
运算符 | 名称 | 优先级 | 元数 | 结合性 | 样例 |
---|---|---|---|---|---|
+ | 正 | 9 | 1 | 右 | {{#expr: + 7}} = 7 |
- | 负 | 9 | 1 | 右 | {{#expr: - 7}} = -7 |
not | 逻辑非 | 9 | 1 | 右 | {{#expr: not 7}} = 0 |
* | 乘 | 8 | 2 | 左 | {{#expr: 30 * 7}} = 210 |
/ | 除 | 8 | 2 | 左 | {{#expr: 30 / 7}} = 4.2857142857143 |
div | 除 | 8 | 2 | 左 | {{#expr: 30 div 7}} = 4.2857142857143 |
mod | 模 | 8 | 2 | 左 | {{#expr: 30 mod 7}} = 2 |
+ | 加 | 6 | 2 | 左 | {{#expr: 30 + 7}} = 37 |
- | 减 | 6 | 2 | 左 | {{#expr: 30 - 7}} = 23 |
= | 等于 | 4 | 2 | 左 | {{#expr: 30 = 7}} = 0 |
< | 小于 | 4 | 2 | 左 | {{#expr: 30 < 7}} = 0 |
> | 大于 | 4 | 2 | 左 | {{#expr: 30 > 7}} = 1 |
<= | 小于等于 | 4 | 2 | 左 | {{#expr: 30 <= 7}} = 0 |
>= | 大于等于 | 4 | 2 | 左 | {{#expr: 30 >= 7}} = 1 |
<> | 不等于 | 4 | 2 | 左 | {{#expr: 30 <> 7}} = 1 |
!= | 不等于 | 4 | 2 | 左 | {{#expr: 30 != 7}} = 1 |
and | 逻辑与 | 3 | 2 | 左 | {{#expr: 30 and 7}} = 1 |
or | 逻辑或 | 2 | 2 | 左 | {{#expr: 30 or 7}} = 1 |
取舍数位
round | 舍入(最大9) | {{#expr: 30 / 7 round 7}} = 4.2857143 |
ceil | 向上取整 | {{#expr: ceil(1/3) }} = 1 |
floor | 向下取整 | {{#expr: floor(1/3) }} =0 |
round运算对运算数正负,位数正负都有不同的表现,参见下例。
逻辑运算符把假映射为0,把真映射为非0,且返回值只有0或1。
同一表达式中先计算高优先级运算。括号优先级高于一切。
ifexpr
ifexpr
计算数学表达式,并根据计算结果返回字符串。
{{ #ifexpr: <表达式> | <表达式不为0的结果> | <表达式为0的结果> }}
表达式语法与expr相同。
iferror
{{#iferror: 测试表达式 | 出错时显示结果 | 正确运算时显示结果 }}
{{#iferror: {{#expr: 1 + 2 }} | error | correct }}
→ correct{{#iferror: {{#expr: 1 + X }} | error | correct }}
→ error{{#iferror: {{#expr: 1 + 2 }} | error }}
→ 3{{#iferror: {{#expr: 1 + X }} | error }}
→ error{{#iferror: {{#expr: 1 + 2 }} }}
→ 3{{#iferror: {{#expr: 1 + X }} }}
→ {{#iferror: {{#expr: . }} | error | correct }}
→ correct{{#iferror: <strong class="error">a</strong> | error | correct }}
→ error
tag
tag
函数即标签函数,用来替代解析器函数实现标签(<>)功能,在某些因解析时机造成的标签无法生效的情况下,需要用tag函数来改写解析器标签。
{{#tag:"标签名"| 内容 | 参数= | ... }}
例如{{#tag:rec| 内容 | ... }}
等于<rec>内容</rec>
这一方法主要用以解决时机不同造成的模板内部无法使用“<>”标签的问题。
★SMW函数★
set
为当前页面赋值
{{#set:<属性名称>=<属性数值>}}
我们亦可以用set来同时为多个属性赋值
{{#set: |<属性名称1>=<属性数值1> |<属性名称2>=<属性数值2> …… }}
使用“|+sep=
”set多个值,
{{#set: |<属性名称1>=<属性字符串>|+sep=<分隔符(请使用英文符号)> …… }}
如果不通过|+sep=
来声明分隔符,则默认使用|
为分隔符。例如下例中的属性用|+sep=
声明了多个属性值之间的分隔符为,
;所属则直接使用了默认分隔符|
来分割多个属性值。
{{#set: |属性=物理,火|+sep=, |所属=灰鸦小队|工程部队 …… }}</nowiki>
被分隔符“,”隔开的“物理”、“火”都会作为该页面属性“属性”的值,查询的时候可以平等的被结果索引到。
ask
为页面设置属性后,我们希望集中展示这些内容就需要使用到ask函数
我们通常在页面上这样使用:
{{#ask:[[分类:构造体]] [[机体类型::进攻型]] |?角色名 |?机体名称 |?初始品质 |link=none |sort=初始品质,角色名,机体名称 |order=desc,asc,asc |format=template |template=机体图鉴BOXicon |headers=hide |limit=1000 }}
- 简单归纳下
{{#ask:[[<查询条件>]] |?<展示信息> |<输出结果式> }}
- 如何写查询条件
- 通过分类进行查询:
[[分类:构造体]]
- 通过属性进行查询:
[[机体类型::进攻型]]
- 组合查询:
[[分类:构造体]][[机体类型::进攻型]]
。这种写法其实是逻辑与 and 的写法。另外,逻辑或 or 的写法为[[分类:构造体]]or[[分类:授格者]]
,或者写成[[分类:构造体||授格者]]
逻辑与 and 和逻辑或 or 不能同时使用,若有需求,请使用or 的第二种表达方式
- 如何写展示信息
|?<展示的属性名>
- 如何写输出结果式
ask函数为我们提供了非常多的参数来控制输出结果,具体参数可以见下表:
参数 | 值类型 | 说明 |
---|---|---|
format | 详见format说明 | 本wiki统一使用template,以模板进行输出结果。选择结果展示出来的格式,可不填。常用的值为template,以模板进行输出结果。如果不配置,会默认以表格输出查询结果。 |
template | 模板名 | format为template时生效,输出的模板名称。 |
limit | 1~1000的整数 | 输出的结果的最大数量 (在table下是行数) |
offset | 数值 | offset=2|limit=10 表示从总查询的结果的第2个开始输出10个结果 |
sort | 属性名 | 指定一个查询页面中存在的属性(可以不展示),所有结果会按照这个属性值来排序 若需同时指定多个属性阶梯式排序,则用英文逗号“,”隔开 |
order | 升序asc 降序 desc 随机 random |
查询结果的输出排序规则,默认为升序。如果未指定sort,则不会生效。 |
headers | show , plain , hide |
本wiki中统一使用hide。控制输出结果表头第一行的样式,show是默认值。hide隐藏,plain是不带链接的纯文本 |
link | none , subject , all |
本wiki中统一使用none。控制结果中的值是否带链接, all 为全部带链接,subject只有第一列带链接,none则是全部不带链接。 |
mainlabel(不常用) | 纯文本 | 定义表格第一行第一个单元格的文字内容,如果配置为“-”,则会隐藏第一列标题 |
default(不常用) | 纯文本 | 当查询的返回结果为空值时所显示的文字 |
searchlabel(不常用) | 纯文本 | 当查询的结果超过了limit的限制后,会出现一个点击查看更多的链接,可以通过searchlabel来定义链接的文字。配置为空时,则不会显示点击查看更多的链接 |
show
展示一个属性的数值
{{#show:<页面名称>|?<属性名称>}}
- 可选参数:link=none
- 例如:
{{#show:<页面名称>|?<属性名称>|link=none}}
输出的结果不会带有链接
- 注意的是,当数值类型为text、string时,无需书写link=none,默认的结果就不带链接。SMW的数值默认属性为page,如果不加link=none,返回的是一个维基内链