帮助:解析函数
本页旨在介绍BWIKI支持的解析函数,针对平台特性和中文环境提供简单易懂的说明和用例。
解析函数(Parser function)是一种魔术字(Magic word),它动态地处理数据和逻辑,能根据不同的输入和条件,输出不同内容。如条件判断、数学计算、字符串处理和时间处理等等。 用户能用它自由的实现各种功能,如编写能自动更新的内容、简化复杂结构的实现或设计灵活强大的模板。
BWIKI支持192个解析函数,它们来自Mediawiki和第三方扩展。特殊:版本页面列出了所有扩展及其版本,点击扩展名可以访问扩展主页和文档(部分BWIKI开发/魔改的扩展可能无法找到文档,请参考本页)。特殊:版本页面还列出了软件版本、支持的解析函数和扩展标签等等信息。
基本格式:
- {{函数名:参数1|参数2|...|参数n}}
其中:
- {{ 和 }} 表明这是一个模板或魔术字。
- 函数名是解析函数的名称,大部分函数以井号开头。
- 参数1、参数2、参数n是参数。多个参数由竖线 | 分割。参数也是wikitext,可以包含模板或解析函数等等。Wiki解析器会优先运算、展开参数中的代码(wikitext),这与数学公式中的括号相似,从内到外逐级展开。
注意事项:
- 参数1必定会自动被展开,传入解析函数的是展开结果。在参数1中使用nowiki标签很可能导致非预期行为。
- 所有参数都会被trim(移除头尾的空白字符,如空格和换行)后传入解析函数。因此如需传入空白字符需要用nowiki标签包裹参数。比如空格<nowiki> </nowiki>
- 在参数中使用某些字符需要“转义”。如空格就需要<nowiki> </nowiki>;竖线|,被用于分隔两个参数,此时需要用“{{!}}”。
- 第三方扩展提供了大量解析函数,它们的细节特性可能不同:
A
anchorencode
将文本编码为HTML 锚点格式。MediaWiki原生支持。
常用于在模板中处理锚点相关参数。在创建链接时,可确保锚点被正确编码,避免因特殊字符导致链接失效。
- 官方文档:帮助:魔术字 - URL数据
- 完整文档:帮助:解析函数/anchorencode - 更多示例、背景知识、底层代码和实战用例
语法
{{anchorencode:文本}}
- 返回值为“锚点安全格式”的字符串,适用于 HTML 元素 `id` 属性、Wiki 链接中的章节位置等。
示例
示例 | 效果 | |
---|---|---|
基本 |
|
|
部分符号被编码 |
|
|
编码锚点 | [http://mw.org/page#{{anchorencode:URL data}} 这个页面]
|
这个页面 |
需要但未编码锚点 | [http://mw.org/page#URL data 这个页面]
|
data 这个页面(解析错误) |
用于模板 | 创建锚点<span id="{{anchorencode:{{{1|}}}}}"></span>
|
<span id="URL_data"></span>
|
- 使用场景:
- 链接到页面内部或其他页面的特定章节
- 模板中处理未知或用户输入的章节名
- 避免手动编码特殊字符
- 注:
- 对一个确定的URL,手动编码锚点当然可行。因此本函数更多地用于模板中,比如处理参数中未知的锚点参数。
- 与urlencode不同:
{{anchorencode:a:b/c d}}
→ a:b/c_d(HTML 锚点编码){{urlencode:a:b/c d}}
→ a%3Ab%2Fc+d(整个 URL 或查询参数编码)
arraydefine
定义临时的数组变量,以便在同一页面后续使用。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
此函数根据指定的分隔符,将输入字符串切分成数组元素并存储到变量中,可选地进行去重、排序、直接输出等操作。
输入数据可以是固定文本,也可以来自模板参数、SMW 查询结果等。
基于 Arrays 扩展,可以快速构造表格、列表、图鉴等重复性结构(也可用 Loops 扩展或 Lua 模块实现)。
- 官方文档:Extension:Arrays - arraydefine
- 完整文档:帮助:解析函数/arraydefine - 更多背景知识、底层代码和实战用例。
语法
{{#arraydefine: 数组名 | 数据字符串 | 分隔符 | 选项 }}
参数:
- 数组名:必填,要定义的变量名(区分大小写)
- 数据字符串:要拆分的内容,留空则定义空数组
- 分隔符:默认是逗号 (
,
),可使用正则。如留空,则不拆分,整个字符串作为一个元素 - 选项:逗号分隔的键=值对或单独的标志,支持:
unique
去重sort
排序方式:none
(默认)不排序desc
降序(基于PHP函数,参见 https://php.net/function.sort )asce
/asc
升序(参见 https://php.net/function.rsort )random
随机(参见 https://php.net/function.array-rand )reverse
倒序(参见 https://php.net/function.array-reverse )
print
输出格式:list
:用默认分隔符(英文逗号)连接pretty
:人类可读的并列格式(a、b 和 c)
singleempty
:保留数组中唯一的空字符串元素
定义的数组在当前页面的解析生命周期内有效,可与 #arrayprint
等函数配合。
示例
{{#arraydefine:a|red}}
→ 定义数组a
,只有1个元素:red
{{#arraydefine:b|orange,red ,yellow, yellow}}
→ 定义数组b,有4个元素(分隔符没有指定,默认为逗号):orange、red、yellow、yellow
{{#arraydefine:c}}
→ 定义空数组c:{{#arraydefine:d|apple, pear; orange|/\s*[;,]\s*/}}
→ 定义数组d,分隔符是正则表达式。d有3个元素:apple、pear、orange
{{#arraydefine:e|orange,red ,yellow, yellow|,|unique,sort=desc, print=list}}
→ 去重、降序排列,输出列表:yellow、red、orange
{{#arraydefine:e|orange,red ,yellow, yellow|,|unique,sort=desc, print=pretty}}
→ 同上,但是输出格式为pretty:yellow、red和orange
arraydiff
计算数组的差集(从第一个数组中移除所有出现在其它数组中的元素),并将结果存入新数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
差集运算常用于过滤数据集,例如去除已处理元素、排除指定值等。
其数学意义可表示为:[math]\displaystyle{ A - B - C }[/math]
即依次从集合 [math]\displaystyle{ A }[/math] 中移除出现在 [math]\displaystyle{ B }[/math]、[math]\displaystyle{ C }[/math] 中的所有元素。
语法
{{#arraydiff: 结果数组名 | 数组1 | 数组2 | ... | 数组N }}
示例
先定义三个数组:
{{#arraydefine:a|2,1,1,3,blue,apple,apple}}
{{#arraydefine:b|2,2,blue}}
{{#arraydefine:c|3,blue}}
数组内容:
- 2、1、1、3、blue、apple、apple
- 2、2、blue
- 3、blue
差集运算 | 调用代码 | 输出结果 |
---|---|---|
[math]\displaystyle{ A - B }[/math]
移除 b 中的元素 |
{{#arraydiff:x | a | b }}{{#arrayprint:x}}
|
1、1、3、apple、apple |
[math]\displaystyle{ A - C }[/math]
移除 c 中的元素 |
{{#arraydiff:y | a | c }}{{#arrayprint:y}}
|
2、1、1、apple、apple |
[math]\displaystyle{ A - B - C }[/math]
移除 b 和 c 中的元素 |
{{#arraydiff:z | a | b | c }}{{#arrayprint:z}}
|
1、1、apple、apple |
[math]\displaystyle{ A - C - B }[/math]
移除 c 和 b 中的元素 |
{{#arraydiff:w | a | c | b }}{{#arrayprint:w}}
|
1、1、apple、apple |
底层代码和实战用例,请参阅帮助:解析函数/arraydiff。
arrayindex
输出一个数组指定位置的值。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
从已定义的数组中,根据指定序号返回对应的元素值。支持正数和负数索引,负数表示从数组末尾开始倒数。
使用前必须先通过 #arraydefine 定义数组,否则返回默认值或空字符串
语法
{{#arrayindex: 数组名 | 序号 | 默认值 }}
- 数组名:已定义的数组名称
- 序号:从 0 开始计数的整数。负数从末尾倒数,如 -1 表示最后一个元素
- 默认值:当数组名或序号无效时返回的值,默认为空字符串
- 数组名无效:不存在该数组。如在定义数组前就使用它的值
- 序号无效:找不到对应位置的值。这可能是序号非数字、越界(超过实际数据范围)导致
示例
{{#arrayindex:a |2 }}
→ 返回a数组的第3个元素{{#arrayindex:b |-1 }}
→ 返回b数组的最后一个元素{{#arrayindex:c |foo |bad value }}
→ 因序号无效,返回默认值(bad value)
完整示例:
{{#arraydefine:mylist|apple,banana,cherry}}
* {{#arrayindex:mylist|0}} <!-- apple -->
* {{#arrayindex:mylist|-1}} <!-- cherry -->
* {{#arrayindex:mylist|5|not found}} <!-- not found -->
- apple
- cherry
- not found
关于底层代码和实战用例,请参阅帮助:解析函数/arrayindex。
arrayintersect
计算多个数组的交集。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
从“第一个数组”中过滤,仅保留那些在所有后续数组中都至少出现一次的元素;结果的顺序与重复次数完全沿用第一个数组,与其他数组无关。
语法
{{#arrayintersect:新数组名 | 数组1 |数组2 |... |数组n }}
至少需要两个数组参数。函数不直接输出,结果会写入 新数组名
,需配合 #arrayprint
按需输出。
数组项比较时,行为基于 PHP 函数array_intersect
:按字符串值比较,区分大小写(例如 red
与 Red
不同)。
示例
- 有数组a:
{{#arraydefine:a|orange, orange, red, blue}}
- 有数组b:
{{#arraydefine:b|red, red, red, red, orange, yellow, yellow}}
- 有数组c:
{{#arraydefine:c|blue, red}}
- a ∩ b :
{{#arrayintersect:x|a|b}}{{#arrayprint:x}}
→orange、orange、red
- b ∩ a :
{{#arrayintersect:y|b|a}}{{#arrayprint:y}}
→red、red、red、red、orange
- a ∩ b ∩ c :
{{#arrayintersect:z|a|b|c}}{{#arrayprint:z}}
→red
关于底层代码和实战用例,请参阅帮助:解析函数/arrayintersect。
arraymap
将一个字符串按指定分隔符拆分,对每个子串按给定格式输出,并用分隔符或连接词拼接。出自扩展 Page Forms。
语法
{{#arraymap: 字符串 | 分隔符 | 占位符 | 输出格式 | 输出分隔符 | 输出连接词 }}
参数说明:
- 字符串:要处理的原始字符串,通常来自模板参数、SMW 查询或表达式结果。
- 分隔符(可选):拆分用的符号,默认为英文逗号
,
。留空时逐字符拆分(包括空格与换行)。 - 占位符:在“输出格式”中用作替换的标记。
- 输出格式:包含占位符的 wikitext,解析时会将占位符替换为当前子串。
- 输出分隔符(可选):拼接各结果时使用的分隔符,默认
,
(逗号+空格)。 - 输出连接词(可选):替代最后两个元素之间的分隔符,如“和”“或”。默认与输出分隔符相同。
示例
用法 | 代码 | 结果 |
---|---|---|
基本替换 | {{#arraymap:a_b_c | _ | @ | '''@''' | + }}
|
a+b+c |
自定义格式 | {{#arraymap:a_b_c | _ | @ | 有'''@'''的内容 | …… }}
|
有a的内容……有b的内容……有c的内容 |
添加连接词 | {{#arraymap:托奇_环理_小满_秘银_从云_辰纱 | _ | @ | [[首页|@]] | , |和 }}一起开会
|
托奇,环理,小满,秘银,从云 和 辰纱一起开会 |
配合模板 | {{#arraymap:apple, banana, cherry | , | @ | {{ucfirst:@}} }}
|
Apple, Banana, Cherry |
条件筛选 | {{#arraymap: 2, 7, 4, 9, 3 |,|@|{{#ifexpr: @ > 5 | @ }} }}
|
7, 9 |
关于底层代码和实战用例,请参阅帮助:解析函数/arraymap。
arraymaptemplate
分割字符串,用指定模板逐一输出。出自扩展 Page Forms。
具体来说,按分隔符切分字符串,并把每个片段作为参数{{{1}}}
传给指定模板,再用“输出分隔符”连接结果。行为类似 #arraymap
,但把“格式化逻辑”下放到模板中处理。
当每个元素需要较复杂的渲染(多行结构、带条件判断、包含链接/图标/样式等)时,优先使用本函数,以避免在 #arraymap
中堆叠复杂 wikitext,造成“嵌套地狱”。
语法
{{#arraymaptemplate: 字符串 | 模板名 | 分隔符 | 输出分隔符 }}
参数:
- 字符串:要拆分的原始文本。
- 模板名:用于渲染每个片段的模板。片段作为
{{{1}}}
(即参数1
)传入模板。 - 分隔符:用来切分字符串(非正则)。留空时改为“逐字符切分”。
- 输出分隔符(可选):连接各次模板输出的文本,默认为
,
(英文逗号+空格)。
示例
比如模板 "ListLine"内容如下:
* {{{1}}}
调用:
{{#arraymaptemplate:托奇、环理、辰纱|ListLine|、|\n}}
效果:
- 托奇
- 环理
- 辰纱
关于底层代码和实战用例,请参阅帮助:解析函数/arraymaptemplate。
arraymerge
合并数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
语法
{{#arraymerge: 新数组名 | 数组1 | 数组2 | ... | 数组n }}
- 新数组名:存放合并结果的目标数组名称
- 数组1..n:要合并的已定义数组,至少两个
将多个数组按顺序合并为一个新数组,合并时:
- 元素会按数组顺序依次追加;
- 不会去重;
- 数字键会按 PHP 规则重新编号,字符串键保留原名(后者会覆盖前者同名键)。
示例
先定义数组abc:
- a:
{{#arraydefine:a|orange}}
值为 orange - b:
{{#arraydefine:b|red, red}}
值为 red、red - c:
{{#arraydefine:c|blue, blue}}
值为 blue、blue
则:
{{#arraymerge: x | a | b }}
→ x = orange、red、red{{#arraymerge: x | a | c }}
→ x = orange、blue、blue{{#arraymerge: x | a | b | c }}
→ x = orange、red、red、blue、blue
关于底层代码和实战用例,请参阅帮助:解析函数/arraymerge。
arrayprint
按指定格式输出数组内容。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
支持占位符替换、自定义分隔符、嵌入 Wikitext(如模板、链接等)以及自然语言式列表输出。
语法
{{#arrayprint: 数组名 | 分隔符 | 占位符 | 输出格式 | 选项 }}
- 数组名: 要输出的数组名称。
- 分隔符:用于分隔多个数组元素的字符串。默认为
、
(Wiki界面语言的顿号,BWiki为中文)。支持 HTML 标签(如<br/>
)。 - 占位符:在“输出格式”中占位,标记数组元素输出位置。
- 输出格式:一段 wikitext,定义单个数组元素的输出方式。必须包含占位符。
- 选项: 额外的输出选项,支持:
print=pretty
,将最后一个分隔符
替换为和
(BWiki默认中文)。
示例
先定义数组:{{#arraydefine:b|red, orange, blue}}
示例 | 效果 | |
---|---|---|
基本 | {{#arrayprint:b}} |
red、orange、blue
|
无分隔符 | {{#arrayprint:b | }} |
redorangeblue
|
以换行分隔 | {{#arrayprint:b |<br/> }} |
red orange blue |
自定义格式(长度统计) | {{#arrayprint:b | <br/> | @ | @的长度:{{#len:@}} }} |
red的长度:3 orange的长度:6 blue的长度:4 |
自定义格式(模板调用) | {{#arrayprint:b | <br/> | @ | {{Color| @ | @ }} }} |
red orange blue |
关于底层代码和实战用例,请参阅帮助:解析函数/arrayprint。
arrayreset
删除数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
用于删除由Arrays扩展定义的数组。
- 官方文档:Extension:Arrays - arrayreset
- 完整文档:帮助:解析函数/arrayreset - 更多示例、背景知识、底层代码和实战用例
语法
{{#arrayreset: 数组名1 |数组名2 | ... | 数组名n }}
- 删除指定数组
{{#arrayreset:}}
- 删除所有数组
示例
先定义数组a, b, c:
{{#arraydefine:a|orange, red}}
{{#arraydefine:b|111, 22222}}
{{#arraydefine:c}}
他们的Size为:a:2
、b:2
、c:0
和不存在的d:
现在删除a:{{#arrayreset:a}}
再次查看Size:a:、b:
2
、c :0
和不存在的d:
可以看到:
- 空数组 c 的 size 为 0
- 被删除 a 与不存在数组 d 的 size 均为空
arraysearch
搜索数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
在数组中查找指定值首次出现的位置,并返回其索引或自定义值。
支持从指定索引开始搜索,以及正则表达式匹配。索引从0开始计数。
- 官方文档:Extension:Arrays - arraysearch
- 完整文档:帮助:解析函数/arraysearch - 更多示例、背景知识、底层代码和实战用例
语法
{{#arraysearch: 数组名 | 搜索值 | 开始位置 | 成功值 | 失败值 }}
- 数组名:已定义的数组名称。
- 搜索值:要查找的元素内容。
- 普通字符串会按“完全匹配”查找(前后空白忽略)。
- 若以
/pattern/
格式书写,则按正则表达式匹配。
- 开始位置:可选,搜索起点的索引(非负整数,默认 0)。超出范围会直接失败。
- 成功值:可选,找到时返回的值。省略时返回匹配元素的索引(数字)。
- 失败值:可选,未找到时返回的值。省略时返回空字符串。
示例
定义数组 b
:
{{#arraydefine:b|blue,white,red,white}}
- 基础用法:
{{#arraysearch:b|white}}
→ 1 - 开始位置:
{{#arraysearch:b|white|2}}
→ 3 - 正则匹配:
{{#arraysearch:b|/r.*/}}
→ 2 (匹配 red) - 未找到时:
{{#arraysearch:b|blu}}
→ - 自定义成功/失败值:
{{#arraysearch:b|white|0|yes|no}}
→ yes{{#arraysearch:b|yellow|0|yes|no}}
→ no
arraysearcharray
数组筛选。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
从一个数组中筛选出匹配项并写入新数组。
支持正则表达式或“整段等值匹配”。可指定起始位置、最大匹配数;当使用正则时,可按捕获组对结果做格式化替换。
- 官方文档:Extension:Arrays - arraysearcharray
- 完整文档:帮助:解析函数/arraysearcharray - 更多示例、背景知识、底层代码和实战用例
语法
{{#arraysearcharray: 新数组名 | 原数组名 | 搜索条件 | 起始索引 | 限制数量 | 转换规则 }}
参数:
- 新数组名:筛选结果将写入此数组
- 原数组名:要被筛选的数组
- 搜索条件:正则表达式或字符串,默认值
/^(\s*)$/
(匹配空白项) - 起始索引:默认
0
。从该位置起开始扫描 - 限制数量:默认不限制。空值或
-1
表示不限制 - 转换规则:可选,仅当搜索条件为正则时生效。写入结果前对匹配文本做替换,支持用
$1
、$2
… 引用捕获组(整段匹配可用$0
)
示例
定义数组:{{#arraydefine:a|apple, bule1, fly, add1,,,, wiki}}
,值为:apple、bule1、fly、add1、、、、wiki
说明 | 代码 | 结果 |
---|---|---|
筛选以 a 开头的值 | {{#arraysearcharray: x | a | /^a.+/ }}
|
apple、add1 |
以 a 开头,从第 2 项开始 | {{#arraysearcharray: x | a | /^a.+/ | 2 }}
|
add1 |
以 a 开头,仅取 1 个命中 | {{#arraysearcharray: x | a | /^a.+/ | 0 | 1 }}
|
apple |
匹配以数字结尾的元素 | {{#arraysearcharray: x | a | /^.*?(\d+)$/ }}
|
bule1、add1 |
匹配以数字结尾,重排格式 | {{#arraysearcharray: x | a | /^.*?(\d+)$/ | | | '''pre-$0''' }}
|
pre-bule1、pre-add1 |
删除空项(仅保留非空白) | {{#arraysearcharray: a | a | /\S+/ }}
|
apple、bule1、fly、add1、wiki |
arraysize
返回指定数组的元素数量。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
空数组返回0
。不存在的数组返回空字符串,可配合#if
判断数组是否存在。
- 官方文档:Extension:Arrays - arraysize
- 完整文档:帮助:解析函数/arraysize - 更多示例、背景知识、底层代码和实战用例
语法
{{#arraysize: 数组名 }}
- 数组名:要检查的目标数组名称。
示例
{{#arraysize:a}}
→ 数组a中的元素个数{{#if: {{#arraysize:b}} | ''array exists'' | ''array not defined'' }}
→ 检查一个数组是否存在
arrayslice
数组切片。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
从指定数组中提取一段连续的元素(切片),存入新数组。
支持正向和反向(负数)索引,可选指定提取长度。
- 官方文档:Extension:Arrays - arrayslice
- 完整文档:帮助:解析函数/arrayslice - 更多示例、背景知识、底层代码和实战用例
语法
{{#arrayslice: 新数组名 | 数组名 | 起始位置 | 长度 }}
参数:
- 新数组名:保存切片结果的数组。
- 数组名:要操作的目标数组。
- 起始位置:从此位置开始切片,首元素为0。负数为倒数定位(如 -1 指最后一个元素)。
- 长度(可选):要提取的元素数量,默认为后续全部元素。
若数组名不存在或起始位置无效,则创建空的新数组。
示例
创建数组:{{#arraydefine:x|a,b,c,d,e,f,g}}
→ a、b、c、d、e、f、g
{{#arrayslice: y | x | 0 | 2 }}
→ a、b{{#arrayslice: y | x | 1 | 3 }}
→ b、c、d{{#arrayslice: y | x | -3 | 2 }}
→ e、f{{#arrayslice: y | x | 2 }}
→ c、d、e、f、g
arraysort
数组排序。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
可按多种方式排序数组,包括升序、降序、自然排序、随机和反转等。
注意,排序是基于字符串,而不是数值顺序的。
- 官方文档:Extension:Arrays - arraysort
- 完整文档:帮助:解析函数/arraysort - 更多示例、背景知识、底层代码和实战用例
语法
{{#arraysort: 数组名 | 排序方式 }}
- 排序方式:
- none 不排序
- desc 降序
- asc 升序
- random 随机
- reverse 反序
- natural 自然排序
示例
对于数组:{{#arraydefine:x|-10,-1,0,1,3,2,7,6,5,11}}
→ -10、-1、0、1、3、2、7、6、5、11
{{#arraysort:x}}
→ -10、-1、0、1、3、2、7、6、5、11{{#arraysort:x|reverse}}
→ 11、5、6、7、2、3、1、0、-1、-10{{#arraysort:x|random}}
→ 3、0、2、-10、11、5、-1、7、1、6{{#arraysort:x|desc}}
→ 7、6、5、3、2、11、-10、-1、1、0{{#arraysort:x|asc}}
→ 0、1、-1、-10、11、2、3、5、6、7{{#arraysort:x|natural}}
→ -1、-10、0、1、2、3、5、6、7、11
- 注意:数组元素类型是字符串。
arrayunion
合并数组并去重。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
将多个数组的元素合并到新数组中,并删除重复值(仅保留每个值第一次出现的位置;整体顺序按给定数组的先后)。
相关函数:#arraymerge 只合并不去重。
- 官方文档:Extension:Arrays - arrayunion
- 完整文档:帮助:解析函数/arrayunion - 更多示例、背景知识、底层代码和实战用例
语法
{{#arrayunion: 新数组名 | 数组1 | 数组2 | ... | 数组n }}
- 新数组名:存放结果的数组名称;若已存在将被覆盖。
- 数组1-n:待合并的数组名称;不存在的数组将被忽略。
示例
准备数据:
- x : a、b、c、c
- y : b、c、d
- z : 1、2、3
合并数组:
- 基本合并:
{{#arrayunion: r | x | y }}
→ a、b、c、d - 顺序影响:
{{#arrayunion: r | y | x | z }}
→ b、c、d、a、1、2、3 - 顺序影响:
{{#arrayunion: r | x | z | y }}
→ a、b、c、1、2、3、d
arrayunique
数组去重。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
修改指定数组,去重、移除空值,不修改元素顺序。
- 官方文档:Extension:Arrays - arrayunique
- 完整文档:帮助:解析函数/arrayunique - 更多示例、背景知识、底层代码和实战用例
语法
{{#arrayunique:数组名}}
- 数组名:要去重的数组。若数组不存在,函数无输出。
示例
定义数组:
去重前:1、1、01、red、blue、、、、red
执行:{{#arrayunique:a}}
去重后:1、01、red、blue
ask
查询数据。出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
扩展Semantic Mediawiki(双马尾 SMW)提供了强大的数据存储与查询能力(也可用Lua模块,它对于完整、良格式的数据效率更高)。
数据的一处存储到处使用,能极大提升Wiki维护效率。比如一些频繁更新的游戏,少量编辑者就能维护Wiki的基础数据。
但也需注意,SMW很容易造成性能瓶颈,导致页面渲染缓慢、服务器压力增大,极端情况下可能导致服务器暂时瘫痪。
文档
推荐通读灰机wiki的SMW帮助文档,这是最好的中文SMW文档。 需要注意各平台特性不同,如BWIKI不支持MongoDB、SemanticScribunto等特性,灰机与BWIKI平台的SMW限制细节也有不同。配置细节可能随平台负载调整,需以实际表现为准。
- 官方文档:Help:Inline queries
- 实战用例:帮助:解析函数/ask 1000+ 使用#ask的模板,SMW 代码库链接
- 灰机wiki:帮助:Semantic MediaWiki
- 灰机wiki:帮助:Semantic MediaWiki/嵌入式查询
autoedit
创建一个链接,点击自动编辑提交表单。出自扩展 Page Forms。
尚未发现使用此解析函数的BWiki。
B
BASEPAGENAME
获取上级页面名(不含命名空间)。MediaWiki原生支持。
在启用子页面特性的命名空间中,将页面标题去掉最后一个“/”及其后续部分,保留余下部分(且不含命名空间)。
- 官方文档:Help:Magic words - Page names
- 完整文档:帮助:解析函数/basepagename - 更多示例、背景知识、底层代码和实战用例
语法
{{BASEPAGENAME}}
作用于当前页面{{BASEPAGENAME: 页面名}}
指定页面名进行计算
仅对启用子页面特性的命名空间生效(如:主、用户、Project、MediaWiki、模板、帮助、模块)。未启用的命名空间(如:文件、分类、Widget)中,其结果等同于整页名(不视为子页面)。
若标题中不包含“/”,结果为整页名(不含命名空间)。
示例
{{BASEPAGENAME}}
→ 解析函数{{BASEPAGENAME:帮助:解析函数/basepagename}}
→解析函数
{{BASEPAGENAME:模板:大模板/中模板/小模板}}
→大模板/中模板
{{BASEPAGENAME:分类:超大分类/大分类/中分类}}
→超大分类/大分类/中分类
(分类空间不支持子页面特性,因此这一页面是独立页面,不被视为“超大分类”的子页面)
BASEPAGENAMEE
获取上级页面名(URL编码),不含命名空间。MediaWiki原生支持。
仅对启用子页面特性的命名空间生效(主、用户、项目、Mediawiki、模板、帮助、模块空间均支持。注意,文件、分类、Widget等空间不支持)。
- 官方文档:Help:Magic words - Page names
- 其他细节与
{{BASEPAGENAME}}
相同,请参考:帮助:解析函数/basepagename - 更多示例、背景知识、底层代码和实战用例
语法
{{BASEPAGENAMEE}}
针对当前页面{{BASEPAGENAMEE: 页面名}}
可指定页面
示例
{{BASEPAGENAMEE}}
→ %E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0{{BASEPAGENAMEE:帮助:解析函数/basepagename}}
→%E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0
{{BASEPAGENAMEE:模板:大模板/中模板/小模板}}
→%E5%A4%A7%E6%A8%A1%E6%9D%BF/%E4%B8%AD%E6%A8%A1%E6%9D%BF
{{BASEPAGENAMEE:分类:超大分类/大分类/中分类}}
→%E8%B6%85%E5%A4%A7%E5%88%86%E7%B1%BB/%E5%A4%A7%E5%88%86%E7%B1%BB/%E4%B8%AD%E5%88%86%E7%B1%BB
(分类空间不支持子页面特性,因此这一页面是独立页面,不被视为“超大分类”的子页面)
bidi
涉及从右到左书写的文字时可使用,正确显示多种书写方向的文本。MediaWiki原生支持。
根据内容自动增加方向性控制字符(从左到右U+202A,从右到左U+202B)。
- 官方文档:Help:Magic_words - Formatting
- 完整文档:帮助:解析函数/bidi - 底层代码
语法
{{bidi:文本}}
示例
{{bidi:text transform}}
→text transform
{{bidi:كتابة عربية}}
→كتابة عربية
{{bidi:كتابة عربيةabc def}}
→كتابة عربيةabc def
C
calendarstartdate
日历起始日期。出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
在SMW查询中处理日历格式(calendar format)时使用,用于指定当月日历开始日期。
语法
{{#calendarstartdate:}}
-> 2025-08-31
- 注意其末尾需要冒号。
示例
查询当前月份的活动,以日历格式显示。
{{#ask:
[[Category:Events]]
[[Has date::>{{#calendarstartdate:}}]]
[[Has date::<{{#calendarenddate:}}]]
|?Has date
|format=calendar
|limit=300
}}
calendarenddate
日历届满日期。出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
在SMW查询中处理日历格式(calendar format)时使用,用于指定当月日历结束日期。
语法
{{#calendarenddate:}}
-> 2025-10-05
注意
- 其末尾需要冒号。
- 日历结束日期不一定是当月最后一天。因为日历格式以周为单位显示。
示例
查询当前月份的活动,以日历格式显示。
{{#ask:
[[Category:Events]]
[[Has date::>{{#calendarstartdate:}}]]
[[Has date::<{{#calendarenddate:}}]]
|?Has date
|format=calendar
|limit=300
}}
canonicalurl
生成页面的完整URL,支持附加参数。MediaWiki原生支持。
此URL为完整绝对路径(包含协议、域名和规范化页面路径),不会验证页面或参数是否有效。
- 官方文档:Help:Magic_words - URL_data
- 完整文档:帮助:解析函数/canonicalurl - 更多示例、背景知识、底层代码和实战用例
语法
{{canonicalurl: 页面名 | 参数 }}
- 页面名:目标页面的标题。不存在的页面也可生成URL。
- 参数:可选,附加到URL的查询字符串(不自动添加`&`,需完整书写,如
action=edit
、a=111&b=233
)。- 多参数需要用`&`连接(如`action=edit§ion=new`)。
- 相关函数是
canonicalurle
,它会将< > " &
等符号编码为HTML实体 →<>"&
示例
- 指定页面链接:
{{canonicalurl: 帮助 }}
→https://wiki.biligame.com/tools/%E5%B8%AE%E5%8A%A9
- 带一个参数:
{{canonicalurl: Help | action=edit }}
→https://wiki.biligame.com/tools/index.php?title=Help&action=edit
- 带多个参数:
{{canonicalurl: Help | action=edit&arg=233 }}
→https://wiki.biligame.com/tools/index.php?title=Help&action=edit&arg=233
canonicalurle
获取页面完整URL,支持附加请求参数。MediaWiki原生支持。
会编码这些HTML实体:<>"&
→ <>"&
语法
{{canonicalurle: 页面名 | 参数 }}
- 不会校验页面和参数是否存在。
- 多个参数需要手动处理,如示例所示。
- 它会编码这些HTML实体:
<>"&
→<>"&
示例
- 指定页面链接:
{{canonicalurle: 帮助 }}
→https://wiki.biligame.com/tools/%E5%B8%AE%E5%8A%A9
- 带一个参数:
{{canonicalurle: Help | action=edit }}
→https://wiki.biligame.com/tools/index.php?title=Help&action=edit
- 带多个参数:
{{canonicalurle: Help | action=edit&arg=2&33 }}
→https://wiki.biligame.com/tools/index.php?title=Help&action=edit&arg=2&33
CASCADINGSOURCES
返回特定页面连锁保护的来源页面。
特殊情况:如果保护页面自己嵌入自己,会返回自身。
语法
{{CASCADINGSOURCES}}
{{CASCADINGSOURCES: 页面名 }}
支持指定页面
示例
本Wiki有几个页面被保护了:
- 保护页面示例 被设置了级联保护,让子页面保护页面示例/子页面被级联保护
- 保护页面示例2 被设置了级联保护,且嵌入了保护页面示例/子页面,让这个子页面被级联保护
例子:
{{CASCADINGSOURCES: 帮助:Cascadingsources }}
→(没有被保护)
{{CASCADINGSOURCES: 保护页面示例 }}
→(没有被级联保护)
{{CASCADINGSOURCES: 保护页面示例2 }}
→(没有被级联保护)
{{CASCADINGSOURCES: 保护页面示例/子页面 }}
→保护页面示例|保护页面示例2
(受到两个页面的连锁保护,页面名由竖线隔开)
categorytree
显示分类树,与分类页面相似。出自扩展 CategoryTree。
语法
{{#categorytree:分类|参数1|参数2|...|参数n}}
- 其参数与<categorytree>标签相同,详见文档The Ccategorytree tag
- 参考官方文档和其他文档完善内容
- 增加实际用例和技巧
示例
{{#categorytree:解析函数}}
concept
定义概念。出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
概念(Concept,一个SMW术语),是通过指定条件创建的“动态类别”。可以将概念看作一组预先存储的SMW查询条件,可供SMW查询调用。
- 官方文档:Help:Concepts
- 完整文档:帮助:解析函数/concept
当概念修改后,使用此概念的SMW查询也会更新(类似于更新页面属性后,SMW查询结果会更新)。
比如,有16处SMW查询包含对同一概念的筛选(如“好武器”,指攻击≥70的特品武器),就可以为其定义一个概念。当查询条件需要修改时(比如改为攻击≥75),仅需修改概念就可以完成对这16处查询的更新。
概念需要在概念命名空间定义(比如概念:好武器
),这与模板、Widget等相似。概念定义后,其页面会像分类页面一样展示符合条件的页面列表。
语法
{{#concept:条件|说明}}
- 条件:SMW查询条件,可以包含其他概念。
- 说明:描述概念的文本
示例
比如将攻击≥70的特品武器称为“好武器”。
在 概念:好武器
页面填入以下内容:
{{#concept: [[类型::武器]][[品级::特品]][[攻击::>70]]
| 特品高攻击武器
}}
基于此,可进行查询:
此后,如果对于“好武器”的评判标准改变了,那么只需要修改 概念:好武器 页面,不必逐个寻找、更新SMW查询条件。
contributors
列出指定页面的贡献者。出自扩展 Contributors。
- 官方文档:Extension:Contributors - Parser function
- 完整文档:帮助:解析函数/contributors - 更多示例、背景知识、底层代码和实战用例
每个贡献者用户名都链接到他的用户页面。
对于BWiki,列出的实际上是用户的B站用户ID(bid)。此外,BWiki会在内容页面头部展示贡献者列表,因此 #contributors 的实际价值不高。
这个解析函数没有被标记为高开销,因此有模板使用它来间接判断页面是否存在,这能绕开页面高开销解析函数的数量限制(BWiki目前是100)。不过仍需注意,此解析函数需要进行数据库查询,本质上对服务器的开销并不低。
语法
{{#contributors:页面名}}
{{#contributors:页面名|filteranon}} 过滤匿名用户,但BWiki不存在匿名编辑。
- 该扩展的特殊页面也可嵌入,如
{{Special:Contributors/页面名}}
示例
{{#contributors:首页}}
→ (39886146)、(123855714)、(9388102)、(141211391)、(16083703)、(5205017)、(25679249)、(509732352)、(29136181)、(111160720)和(3546653302721147)
- 注意,一些小组件会改变用户名的外观
count
统计指定字符串在文本中出现的次数。出自扩展 ParserFunctions 的String functions大规模使用时性能低下,推荐使用Lua模块。请参考扩展置顶警告和MediaWiki代码库 r51497中的暴论“parsers in the ugliest, most inefficient programming language known to man: MediaWiki wikitext with ParserFunctions.”、“WARNING: enabling this may have an adverse impact on the sanity of your users.”。
对于复杂字符串处理,建议使用Lua模块以获得更高性能和可维护性。
- 官方文档:String functions - count
- 完整文档:帮助:解析函数/count - 更多示例、背景知识、底层代码和实战用例
语法
{{#count: 文本 | 目标 }}
- 文本:要搜索的字符串。
- 目标:要统计的子字符串。如果留空,则默认为单个空格。
返回值是一个整数,表示目标字符串在文本中的出现次数。
示例
{{#count:aa bb cc dd aa cc dd|aa}}
→ 2{{#count:aa bb cc dd dd}}
→ 4 (默认统计空格数量)
cscore
获取用户贡献,如贡献分数、编辑数、编辑页面数。出自扩展 Contribution Scores。
语法
- 贡献分数:
{{#cscore:用户名|score}}
- 编辑次数:
{{#cscore:用户名|changes}}
- 编辑页面:
{{#cscore:用户名|pages}}
- 注意,此处的用户名是B站用户的bid。
示例
以Lu(bid 39886146)为例
- 贡献分数:
{{#cscore:39886146|score}}
→ 1,652 - 编辑次数:
{{#cscore:39886146|changes}}
→ 6,742 - 编辑页面数量:
{{#cscore:39886146|pages}}
→ 1,507
css
向页面添加CSS。出自扩展 CSS。
把CSS放进页面的<head>
;而<bstyle>
在写入位置插入。
- 官方文档:Extension:CSS - Usage
- 平台文档:帮助:引用CSS类样式
- 完整文档:帮助:解析函数/css - 底层代码和实战用例
语法
{{#css: CSS代码}}
{{#css: CSS页面名}}
行为与限制
函数返回空字符串,但会在<head>
插入一个<link rel="stylesheet">
。
参数处理过程:
- 如果是页面标题,加载该CSS页面,URL 参数为
action=raw&ctype=text/css&css-extension=1
。 - 否则若以
/
开头,作为服务器路径加载CSS。 - 其它情况视为内联CSS
加载的 CSS 先经过Sanitizer::checkCss清洗,再Base64为data:text/css
加入head。
清洗和安全检测要点:
- 规范化CSS:解码字符引用与转义、清除注释、去除无效控制字符等。
- 禁止的关键字/函数(命中任一规则,整段CSS都会被替换为
/* insecure input */
):url
var
attr(… url …)
filter
accelerator
expression
image
、image-set
-o-link
、-o-link-source
、-o-replace
要用这些属性,可以使用不带检测的<bstyle>
标签。
示例
{{#css:
.a_css_demo{
color:red;
}
}}<span class="a_css_demo">文字</span>
效果:文字
<bstyle>/*<pre>*/
.b_css_demo{
color:red;
}
/*</pre>*/</bstyle><span class="b_css_demo">文字</span>
效果:文字
最佳实践
由于 #css 与 bstyle 都不会自动去重。若页面内多次使用的模板重复注入相同样式时,会造成代码冗余,甚至渲染异常,也会对搜索引擎收录不利。
因此推荐用 #var 系列函数(#vardefine / #varexist)实现“同一页面仅加载一次”(当然,被大量页面多次使用的样式应当优先放在Common.css中)。
这需要为每段样式分配一个页内唯一名称,如:CSS:Infobox:base
、模板导航盒CSS
。写法示例:
{{#if:{{#varexists:模板破损的木棒CSS}} | |{{#vardefine:模板破损的木棒CSS|1}} {{#css:
/* css代码 */
}}}}
- 首次调用:变量未定义 → 定义并插入CSS;之后再次调用将直接跳过。
- 变量作用域为“页面级”,同一页面的多次经由模板/子模板转入都会生效;跨页面不会共享。
bstyle的等价写法:
{{#if:{{#varexists:模板小龙虾CSS}} || {{#vardefine:模板小龙虾CSS | 1 }}<bstyle>/*<pre>*/
/* css代码 */
/*</pre>*/</bstyle>}}
- 由于bstyle中的内容会先作为wikitext展开后再作为css插入页面,因此需要用带注释的pre标签包裹,防止缩进和换行被解析器当作wiki语法处理。
D
declare
将指定模板参数的值存储为SMW数据。出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
相当于用#set保存指定模板参数。但#set更灵活,还可指定默认值。
语法
{{#declare: 属性名=参数名
| 属性名=参数名
| ...
| 属性名=参数名
}}
在模板中使用,如果调用模板时给出了declare中指定的参数名,其参数值会被保存到属性名。
等价的写法是:
{{#set: 属性名={{{参数名|}}}
| 属性名={{{参数名|}}}
| ...
| 属性名={{{参数名|}}}
}}
不过#declare无法像#set一样,用{{{1|默认值}}}
指定默认值。
示例
假设模板A中有如下declare:
{{#declare: name=1
| type=类型
| image=图
}}
调用模板A时,如:{{A|柳木棍|类型=武器|image=balabala.png}}
相当于#set了以下属性:
- name=柳木棍
- type=武器
- image=balabala.png
default_form
指定一个表单,用于编辑页面。出自扩展 Page Forms。
- 官方文档:Extension:Page_Forms - The "edit with form" tab
- 完整文档:帮助:解析函数/default_form - 更多实际用例
语法
{{#default_form:表单名称}}
示例
{{#default_form:角色}}
在页面中指定表单后,Wiki功能菜单中会多出“采用表单编辑”按钮。
DEFAULTSORT
指定页面排序关键字。MediaWiki原生支持。
当页面被索引时,用于在分类和搜索结果中的排序。
设置分类时指定排序关键字可以覆盖它:[[分类:分类名称|排序关键字]]
- 官方文档:Help:Magic_words - Technical metadata
- 完整文档:帮助:解析函数/defaultsort - 更多示例、背景知识、底层代码和实战用例
语法
{{DEFAULTSORT:文本|选项}}
- 文本:要作为排序依据的字符串。分类与搜索结果会按此值排序。
- 选项(可选):
- noreplace:若页面已有默认排序键,则不替换。
- noerror:禁止在多次设置不同排序键时显示错误提示。
示例
比如在页面史密斯专员
中设置其排序位置为Smith
:
- 设置默认排序键:
{{DEFAULTSORT:Smith}}
- 使用 noreplace 选项:
{{DEFAULTSORT:Smith|noreplace}}
- 使用 noerror 选项:
{{DEFAULTSORT:Smith|noerror}}
DISPLAYTITLE
设置页面显示的标题。MediaWiki原生支持。
允许你在页面中设置自定义的显示标题,而不是默认的页面标题。
比如一些情况下无法用预期的标题创建页面,需要额外的前后缀,或使用ID、英文作为页面名。此时可以通过DISPLAYTITLE使页面显示预期的标题。 此外,页面名有限制,一些符号无法使用。DISPLAYTITLE可用于显示正确的页面名。
- 官方文档:Help:Magic_words - Technical metadata
- 完整文档:帮助:解析函数/displaytitle - 更多示例、背景知识、底层代码和实战用例
语法
{{DISPLAYTITLE:文本|选项}}
- 文本:你希望在页面上显示的标题内容。
- 选项:
noerror
:多次使用时,不显示错误信息。noreplace
:如果已经设置过DISPLAYTITLE,不会替换。
示例
{{DISPLAYTITLE:自定义标题}}
这将使页面的显示标题为“自定义标题”,而不是实际页面标题。{{DISPLAYTITLE:自定义标题|noerror}}
如果是多次使用,不显示错误信息{{DISPLAYTITLE:新标题|noreplace}}
如果之前已经设置DISPLAYTITLE,不替换它(防止覆盖)
dowhile
循环。只要条件wikitext的结果非空白,就会持续循环。出自扩展 Loops。
与#while不同的是,循环体的内容会至少执行一次。
- 官方文档:Extension:Loops - Usage
- 完整文档:帮助:解析函数/dowhile - 更多示例、背景知识、底层代码和实战用例
语法
{{#dowhile: 条件 | 代码 }}
- 条件:表示循环继续执行的条件。只要条件wikitext的结果非空,就会持续循环
- 代码:表示每次循环要执行的代码块,即每次都会重复解析的wikitext。
示例
以列表的格式输出0-4
{{#vardefine: i | 0 }}{{#dowhile:
| {{#ifexpr: {{#var: i }} < 5 | true }}
| <nowiki/>
* {{#var: i }}{{#vardefine: i | {{#expr: {{#var: i }} + 1 }} }}
}}
- 0
- 1
- 2
- 3
- 4
至少会执行一次(如果换成while则没有输出,因为首次运行时条件就不满足):
{{#vardefine: i | 9999 }}{{#dowhile:
| {{#ifexpr: {{#var: i }} < 1 | true }}
| <nowiki/>
* {{#var: i }}{{#vardefine: i | {{#expr: {{#var: i }} + 1 }} }}
}}
- 9999
dpl
展示指定页面的信息,包括页面长度、生成时间甚至模板参数。出自扩展 DynamicPageList3。
多数情况下,其功能可以由SMW和LST扩展配合模板实现。此外,DPL官方文档阅读难度不低,Bwiki使用较早版本与新版本特性略有不同,因此不推荐优先使用DPL。
主要特性:
- 支持多样的页面筛选方式,如类别(支持正则)、命名空间、链接、模板使用、标题、内容、修订日期、重定向等等。
- 支持输出页面元数据(如:类别、大小、缓存日期和页面ID等等)、页面内容(章节、解析函数/标签的调用、模板参数等等)
- 支持灵活的的输出格式和排序
文档:
- 官方文档:Extension:DPL3 Manual
- 完整文档:帮助:解析函数/dpl - 更多示例
语法
{{#dpl: 筛选页面 | 输出格式和控制 | 其他选项}}
- 如:
{{#dpl:namespace=帮助|titlematch=解析%|mode=ordered|count=2}}
主要参数:
- 筛选页面
- 按类别:category、categorymatch、categoryregexp、notcategory、notcategorymatch、notcategoryregexp、categoriesminmax
- 按空间:namespace、notnamespace
- 按链接:linksfrom、notlinksfrom、linksto、notlinksto、linkstoexternal、imageused、imagecontainer
- 按模板:uses、notuses、usedby
- 按标题:title、titlematch、titleregexp、titlelt、titlegt、nottitlematch、nottitleregexp
- 按内容:includematch、includematchparsed、includenotmatch、includenotmatchparsed
- 按版本:lastrevisionbefore、firstrevisionsince、allrevisionsbefore、allrevisionssince、maxrevisions、minrevisions
- 按用户:(在bwiki无效)
- ……
- 其中,带match的指使用%匹配,如%wi%。带regexp指使用正则表达式。
- 输出
- count 限制输出数量
- offset 从中间指定位置开始输出
- ordermethod 指定排序方式,如:size、pagetouched、pagesel、title、titlewithoutnamespace、sortkey......可以组合使用,以逗号隔开
- order 排序方向 descending或ascending
- mode 指定输出模式,如:unordered、ordered、none、inline、category和userformat。其中userformat是完全自定义,更灵活但是很复杂
- format 完全自定义输出格式(隐式定义mode=userformat),格式:format=Startall,Start,End,Endall (见示例)。可指定占位符输出数据如页面名、大小、各类日期等,详情见示例和官方文档
- include 为输出增加指定数据,如页面章节(如#章节名,##.*regexp.*)、模板参数({模板名}:参数)等等,多个值用逗号隔开。由于篇幅过大,详见官方文档的输出内容部分
- secseparators 为include的数据指定前后附加内容。格式:Start1,End1,Start2,End2,...... (见示例)
- ……
dpl支持数十个参数,请参阅官方文档了解所有细节
- 页面选择: Criteria for page selection
- 输出格式: Controlling output format
- 输出顺序: Controlling output order
- 输出内容: Controlling output volume
- 其他参数: Other parameters
示例
帮助空间的两个页面
{{#dpl:
|namespace = 帮助
|ordermethod=title
|count=2
}}
帮助空间的两个标题匹配解析函数/a%
模式页面,手动指定以列表形式显示
Startall
- Start 解析函数/anchorencode End
- Start 解析函数/arraydefine End
Endall
{{#dpl:
|namespace = 帮助
|titlematch = 解析函数/a%
|format= Startall\n,* Start [[%PAGE%|%TITLE%]], End\n, \nEndall
|ordermethod=title
|count=2
}}
其中:
- format的参数是
format=Startall,Start,End,Endall
- titlematch支持用%匹配页面(类似SQL中的like)
- %PAGE% 和 %TITLE% 分别代表完整页面名,和页面标题(不带命名空间)
更多例子参见完整文档帮助:解析函数/dpl。
dplchapter
从文本中提取章节内容出自扩展 DynamicPageList3。
从指定文本中提取包含特定章节标题的内容,支持字数限制和链接跳转详情。出自扩展 DynamicPageList3。
语法
{{#dplchapter: text | heading | limit | page | linktext }}
- text:包含章节的文本内容。
- heading:目标章节的标题。
- limit(可选):输出内容的最大字符数。如果文本超出限制,会显示一个链接。
- page(可选):当文本超出限制时,指向的页面链接。
- linktext(可选):超出限制时显示的链接文本。
dplchapter会提取与指定标题匹配的章节正文内容(不包含标题本身)。当内容长度超过设定的限制时,会在输出中添加一个指向指定页面的链接,链接文本可自定义。
示例
{{#dplchapter:
Some text.
==== My Headline ====
the body of the desired chapter.
==== Another Chapter ====
Its text.
|My Headline}}
the body of the desired chapter.
{{#dplchapter:
Some text.
==== My Headline ====
the body of the desired chapter.
==== Another Chapter ====
Its text.
|My Headline|15|首页|.. read more}}
the body of .. read more
dplmatrix
将缩进列表转换为矩阵视图。出自扩展 DynamicPageList3。
按照缩进列表标注的两个集合中元素的映射关系,生成矩阵视图。也可用于将DPL查询结果转换为表格。
- 官方文档:Extension:DPL3 - Dplmatrix
- 完整文档:帮助:解析函数/dplmatrix
语法
{{#dplmatrix: 矩阵名称 | yes | no | 模式 | '''缩进列表''' }}
- 矩阵名称:矩阵的名称,显示在左上角单元格中。支持任意 wiki 格式(包括图片)。
- yes(可选):有关系的显示内容,默认为 "x"。
- no(可选):没有关系的显示内容,默认为空。
- 模式(可选): 'normal'(默认值) 或 'flip'(行列交换)。
- 缩进列表:定义矩阵内容的缩进列表。
通过自定义CSS,可以控制矩阵的布局(使用class=dplmatrix)。
示例
- 生成一个简单的矩阵:
{{#dplmatrix:demo|<big>✓</big>|.||
one
oho
aha
three
aha
uhui ~~ UHU
two ~~ Two
uhui ~~ UHU
}}
该示例将生成如下矩阵,其中 "demo" 显示在左上角,集合1包括"one"、"two"、"three ,集合2包括"oho"、"aha"、"uhui" 等。在one下边缩进编写oho和aha代表他们之间有映射关系,表格中对应位置将显示“✓”。其中,two的标签为Two(two ~~ Two),uhui的标签是UHU(uhui ~~ UHU)
demo | aha | oho | UHU |
---|---|---|---|
one | ✓ | ✓ | . |
three | ✓ | . | ✓ |
Two | . | . | ✓ |
dplnum
靠猜测从文本中提取数字。出自扩展 DynamicPageList3。
- 官方文档:Extension:DPL3 - Dplnum
- 完整文档:帮助:解析函数/dplnum
语法
{{#dplnum:text}}
- text:待提取数字的文本
- 使用启发式算法(
拍脑袋算法根据直觉、经验编写)从文本中识别并提取数字,支持英文数字格式和单位。
dplreplace
文本替换。出自扩展 DynamicPageList3。
实际使用中更常用#replace。
语法
{{#dplreplace:text|pattern|replacement}}
- text:要进行替换操作的原始文本。
- pattern:用于匹配的正则表达式,遵循 PHP
preg_replace()
的语法。 - replacement:用于替换匹配部分的字符串,可包含对匹配组的引用。
将给定的pattern在text中替换为replacement。
示例
- 基本替换:
{{#dplreplace:abrakadabra|ab|AB}}
→ ABrakadABra- 将所有 "ab" 替换为 "AB"。
- 正则和捕获组:
{{#dplreplace:abrakadabra|/a(.*?)r/|A\1_r_}}
→ Ab_r_Akadab_r_a- 仅在 "a" 后面有 "r" 的情况下,将 "a" 替换为 "A" 并插入 "_r_"。
- 无匹配:
{{#dplreplace:hello world|xyz|123}}
→ hello world- "xyz" 不存在于文本中,返回原始文本不变。
dplvar
用于设置和获取变量的值。出自扩展 DynamicPageList3。
支持设置多个变量的值,额外赋予默认值,以及检索这些变量的当前值。
实际使用中,更广泛的使用#var,因为扩展 Variables 提供了更多更强大的功能。
- 官方文档:Extension:DPL3 - Dplvar
- 完整文档:帮助:解析函数/dplvar
语法
{{#dplvar:set |name1|value1|name2|value2|..|..}}:设置一个或多个变量名及其对应的值。
{{#dplvar:default|name|value}}:设置默认值。
{{#dplvar: name}}:获取指定变量的值。
示例
{{#dplvar:set|a|x|b|y|c|z}} {{#dplvar:default|a|aaaa}} {{#dplvar:default|d|dddd}}
a = {{#dplvar:a}}
b = {{#dplvar:b}}
c = {{#dplvar:c}}
d = {{#dplvar:d}}
a = x
b = y
c = z
d = dddd
```
E
explode
分割字符串。出自扩展 ParserFunctions 的String functions大规模使用时性能低下,推荐使用Lua模块。请参考扩展置顶警告和MediaWiki代码库 r51497中的暴论“parsers in the ugliest, most inefficient programming language known to man: MediaWiki wikitext with ParserFunctions.”、“WARNING: enabling this may have an adverse impact on the sanity of your users.”。
使用指定分隔符将字符串分割成多段,并返回指定位置的分割结果。如果指定位置超过分割后的数量,返回空字符串。
- 官方文档:Extension:ParserFunctions - String functions - explode
- 完整文档:帮助:解析函数/explode - 更多示例、背景知识、底层代码和实战用例
语法
{{#explode:文本 | 分隔符 | 位置索引 | 限制 }}
- 文本:要分割的字符串。
- 分隔符:用于分割字符串的分隔符。
- 位置索引:要返回的分割结果的位置索引。从0开始,可以是正数或负数,负数表示从末尾开始计数。
- 限制(可选):分割的最大数量。
示例
{{#explode:apple,banana,cherry | , | 1}}
→banana
{{#explode:one two three four | | -1}}
→four
- 空格分隔,位置索引 -1,得到最后一个分割 'four'。
{{#explode:alpha-beta-gamma | - | 2}}
→gamma
{{#explode:aaa bbb ccc ddd eee| |2|3}}
→ccc ddd eee
expr
计算数学表达式。出自扩展 ParserFunctions。
此函数在Scribunto扩展中也可用,函数名为mw.ext.ParserFunctions.expr
。
- 官方文档:帮助:扩展:解析器函数 #expr
- 完整文档:帮助:解析函数/expr - 更多示例、背景知识、底层代码和实战用例
语法
{{#expr: 表达式 }}
类型 | 运算符 |
---|---|
括号 | ( )
|
数字 | 1234.5 、 e (2.718) 、 pi (3.142)
|
e (科学计数法) + - (正负号)
| |
一元 运算符 |
not ceil trunc floor abs exp ln sin cos tan acos asin atan
|
二元 运算符 |
^
|
* / div mod
| |
+ -
| |
round
| |
逻辑运算符 | = != <> > < >= <=
|
and
| |
or
|
说明:
- 详细功能见Manual:Expr parser function syntax。
- 结果精度、格式取决于服务器系统和语言的数字格式。
- 逻辑运算中非零即真,就是说只有0为false,其他数为true。字符串比较可以用#ifeq
- 部分魔术字可指定参数 R 避免结果包含逗号,如
{{NUMBEROFUSERS:R}}
→9805836
- 溢出可能导致未预期报错:
{{#expr:123 mod 2^64}}
→零除。
- 支持使用 #iferror 处理错误
示例
{{#expr: 1 + 2 * 3 }}
→7
{{#expr: 1.1 or 0}}
→1
逻辑运算中非零即真{{#expr: 1+ }}
→表达式错误:缺少+的操作数。
F
filepath
返回文件的URL路径。MediaWiki原生支持。
常用于获取图片的完整URL,支持指定大小。
相比于利用重定向页面(特殊:重定向/file),filepath可以一次解析多次使用。大量图片重定向时,很容易触发BWiki访问频率限制(资源加载请求失败,HTTP状态码514)
- 官方文档:Help:Magic_words - URL_data
- 完整文档:帮助:解析函数/filepath - 更多示例、背景知识、底层代码和实战用例
语法
{{filepath:文件名|[选项]|[大小]}}
- 文件名:文件名称,无需包含命名空间
- 选项(可选):指定 nowiki,以纯文本非链接显示
- 大小(可选):指定图片尺寸,如 300 、 200x300px
示例
获取图片文件URL
{{filepath: Toolswikilogo.png }}
→https://patchwiki.biligame.com/images/tools/4/41/fr3pnybxu6c0xtdypvwbfc5z1i1gcgy.png
{{filepath: Toolswikilogo.png | 60 }}
→https://patchwiki.biligame.com/images/tools/thumb/4/41/fr3pnybxu6c0xtdypvwbfc5z1i1gcgy.png/60px-Toolswikilogo.png
配合CSS用作背景图:
<div class="demo-wiki-logo-type-a"></div>
{{#tag:bstyle|/*{{#tag:pre|*/
.demo-wiki-logo-type-a{
width:120px;
height:25px;
color:red;
background:url('{{filepath:Toolswikilogo.png | 120}}');
}
/*}}*/}}
(其中bstyle标签用于向页面插入CSS,pre标签用于避免css传入bstyle时被当做wikitext解析。)
在页面中显示URL,但不带链接
{{filepath: Toolswikilogo.png | nowiki | 60 }}
→https://patchwiki.biligame.com/images/tools/thumb/4/41/fr3pnybxu6c0xtdypvwbfc5z1i1gcgy.png/60px-Toolswikilogo.png
{{filepath: Toolswikilogo.png | nowiki }}
→https://patchwiki.biligame.com/images/tools/4/41/fr3pnybxu6c0xtdypvwbfc5z1i1gcgy.png
follow
获取重定向页面的目标页面。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower - Basic functions and tags
- 完整文档:帮助:解析函数/follow - 底层代码
语法
{{#follow: 页面名}}
需要注意缓存问题,结果可能不会实时更新。
示例
{{#follow: 帮助:Expr}}
→ 帮助:解析函数/expr(帮助:Expr是一个重定向页面){{#follow: 首页}}
→ 首页{{#follow: 不存在的页面}}
→ 不存在的页面
forargs
在模板中遍历参数并对每个参数执行指定代码的解析函数。出自扩展 Loops。
forargs解析函数允许用户通过指定过滤器、键变量名和值变量名,遍历模板传入的参数,并在每次迭代中执行提供的代码块。
- 官方文档:Extension:Loops - #forargs
- 完整文档:帮助:解析函数/forargs - 更多示例、背景知识、底层代码和实战用例
语法
{{#forargs: prefix | key | value | code}}
- prefix:参数名的前缀。
- key:变量名,存储参数名,不包括前缀。
- value:变量名,存储参数值。
- code:每次循环时被解析的wikitext,支持使用
、文档
输出参数名和值。
如果前缀非数字,仅处理匹配前缀的命名参数。前缀是数字时,处理所有参数(编号参数和命名参数)中匹配前缀的参数。
前缀为空时,遍历处理所有参数。
示例
在模板:Test中编写如下代码,遍历前缀为a的参数:
<includeonly>{{#forargs:a
| key
| value
| {{#var:key}} = {{#var:value}}<br>
}}
</includeonly><noinclude>
{{Test|a1=1|a2=2|b1=4|b2=5|c1=6|c2=7|8|9}}
</noinclude>
输出为:
1 = 1
2 = 2
在模板:Test中编写如下代码,遍历所有参数:
<includeonly>{{#forargs:| key | value | {{#var:key}} = {{#var:value}}; }}</includeonly><noinclude>
{{Test|a1=1|a2=2|a3=3|b1=4|b2=5|c1=6|c2=7|8|9}}
</noinclude>
输出为:
1 = 8; 2 = 9; a1 = 1; a2 = 2; a3 = 3; b1 = 4; b2 = 5; c1 = 6; c2 = 7;
使用switch跳过或单独处理指定参数:
<includeonly>{{#forargs:| key | value |{{#switch: {{#var:key}}
| a1 = <!-- 跳过a1 -->
| b2 = 单独处理b2;
| #default = {{#var:key}} = {{#var:value}};
}}}}</includeonly><noinclude>
{{Test|a1=1|a2=2|a3=3|b1=4|b2=5|c1=6|c2=7|8|9}}
</noinclude>
输出为:
1 = 8;2 = 9;a2 = 2;a3 = 3;b1 = 4;单独处理b2;c1 = 6;c2 = 7;
注意,forargs的参数key、value会在展开wikitext后才按指定格式输出,这可能会导致非预期行为。
假设模板B的内容是
{{#vardefine:active|233}}
模板A的内容是
{{#vardefine:active|0}}
{{#forargs:| k | v | {{#var:active}} }}
那么,{{A| {{B}} }}
的结果会是233
formatdate
日期格式用户化。MediaWiki原生支持。
将ISO 8601日期转换为 月日年 等格式,如10月 1, 2025
。由于支持的格式均不符合中文表述习惯,因此对中文wiki几乎无用。
- 官方文档:Help:Magic_words - Formatting
- 完整文档:帮助:解析函数/formatdate - 更多示例、底层代码和实战用例
语法
{{#formatdate: YYYY-MM-DD | 格式 }}
- 日期:必须为YYYY-MM-DD格式(ISO 8601),1月写为01,公元221年写为0221,公元前551写为-0551
- 格式(可选):指定输出格式,支持ISO 8601、dmy、mdy和ymd,默认为用户偏好设置。(dmy,指day month year)
- 输出是HTML,如:
<span class="mw-formatted-date" title="1949-10-01">10月 01, 1949</span>
如果输入日期格式无效或格式化失败,将原样返回输入日期。
用户可以在特殊:参数设置中指定日期格式(默认,或ISO 8601格式)。
示例
- ISO 8601标准格式
{{#formatdate:2025-10-01|ISO 8601}}
→<span class="mw-formatted-date" title="2025-10-01">2025-10-01</span>
→ 2025-10-01 - 支持
- 年/月/日格式
{{#formatdate:2025-10-01|ymd}}
→<span class="mw-formatted-date" title="2025-10-01">2025 10月 1</span>
→ 2025 10月 1 - 月/日/年格式
{{#formatdate:2025-08-01|mdy}}
→<span class="mw-formatted-date" title="2025-08-01">8月 1, 2025</span>
→ 8月 1, 2025 - 日/月/年格式
{{#formatdate:2025-06-01|dmy}}
→<span class="mw-formatted-date" title="2025-06-01">1 6月 2025</span>
→ 1 6月 2025
- 年/月/日格式
- 错误输入示例:
- 输入格式错误时,不会执行格式化,日期将按原样返回。
- 缺少前导零
{{#formatdate:2025-1-1|ISO 8601}}
→2025-1-1
- 错误格式
{{#formatdate:25/12/2025|ISO 8601}}
→25/12/2025
formatnum
数字格式本地化。MediaWiki原生支持。
根据Wiki语言配置,将数字格式本地化。比如对于孟加拉语Wiki {{formatnum:3}}
→ ৩
- 官方文档:Help:Magic_words - Formatting
- 完整文档:帮助:解析函数/formatnum - 更多示例、背景知识、底层代码和实战用例
语法
{{formatnum: 数字 | 选项 }}
参数
数字
:需要本地化的数字,支持小数选项
:(可选)- R - 还原为原始数字,移除分隔符。
- NOSEP - 数字本地化时,不包含分隔符(对于中英语言无用)。
数字的格式需要符合Wiki平台所设置语言的标准才能获得正确结果。因此对于站点语言为中文的BWiki,此解析函数的作用仅剩下增加/移除逗号分隔符(千分撇)。
示例
- 基本
{{formatnum: 0012345.67890 }}
→ 0,012,345.67890 - 还原
{{formatnum: 12,345.678 | R }}
→ 12345.678 - 小数
{{formatnum: .678 }}
→ .678 - 无作用
{{formatnum: 12,345.678 | NOSEP }}
→ 12,345.678
对于设为孟加拉语的Wiki:
{{formatnum:987654321.654321}}
→৯৮,৭৬,৫৪,৩২১.৬৫৪৩২১
{{formatnum:৯৮,৭৬,৫৪,৩২১.৬৫৪৩২১ |R}}
→987654321.654321
{{formatnum:987654321.654321 |NOSEP}}
→৯৮৭৬৫৪৩২১.৬৫৪৩২১
(没有逗号分隔符)
forminput
表单入口。提供一个输入框供用户输入页面名称,提供一个跳转到指定表单创建该页面。出自扩展 Page Forms。
请参阅官方文档:Extension:Page Forms/Linking to forms
formlink
表单入口。提供一个到指定表单的链接。出自扩展 Page Forms。
请参阅官方文档:Extension:Page Forms/Linking to forms
formredlink
表单入口。提供一个红色的,到指定表单的链接。红色链接在wiki中表示为不存在的页面,点击红色链接通常意味着创建页面。出自扩展 Page Forms。
请参阅官方文档:Extension:Page Forms/Linking to forms
fornumargs
遍历模板编号参数,以指定格式输出。出自扩展 Loops。
仅在模板中使用。遍历模板调用时传入的编号参数(显式或隐式编号),按照指定的格式输出。
- 官方文档:Extension:Loops - fornumargs
- 完整文档:帮助:解析函数/fornumargs - 更多示例、背景知识、底层代码和实战用例
语法
{{#fornumargs: 键变量名 | 值变量名 | 代码块}}
- 键变量名(可选):存储参数位置的变量名(如"1"、"2"等)
- 值变量名:存储参数值的变量名
- 代码块:每次循环执行的wikitext代码
- 参数处理特性:
- 自动过滤非数字参数(如"key=value"中key不是纯数字时会被忽略)
- 支持显式编号参数(如
1=值
)和隐式参数(如{{模板|值1|2=值2|a=不包括a}}
) - 参数键会按数字升序排列处理
示例
- 基础用法
{{#fornumargs: pos | val |<nowiki/>
* {{#var:pos}}={{#var:val}}
}}
调用:{{模板|苹果|B=香蕉|梨|5=芒果}}
输出:
* 1=苹果
* 2=梨
* 5=芒果
FULLPAGENAME
带命名空间的完整页面名MediaWiki原生支持。
根据输入返回包含命名空间前缀的完整页面名称,保留原始格式和大小写。
- 官方文档:Magic words - Page names
- 完整文档:帮助:解析函数/FULLPAGENAME - 更多示例、背景知识、底层代码和实战用例
语法
{{FULLPAGENAME}}
{{FULLPAGENAME: 页面名 }}
- 页面名(可选):任意文本(支持伪页面名和特殊字符)
无效输入(无法创建有效标题)时返回空字符串
示例
- 当前页面
{{FULLPAGENAME}}
→ 帮助:解析函数 - 带命名空间
{{FULLPAGENAME: 帮助:Fullpagename }}
→ 帮助:Fullpagename - 保留空格
{{FULLPAGENAME: a b c }}
→ A b c - 特殊字符
{{FULLPAGENAME: /a_b/c }}
→ /a b/c - 无效输入
{{FULLPAGENAME: 特殊:所有页面 }}
→
FULLPAGENAMEE
带命名空间的完整页面名,使用URL编码。MediaWiki原生支持。
根据输入页面名,返回包含命名空间前缀的完整页面名称,并进行URL编码,保留原始格式和大小写。
- 官方文档:Magic words - Page names
- 完整文档:帮助:解析函数/FULLPAGENAMEE - 更多示例、背景知识、底层代码和实战用例
语法
{{FULLPAGENAMEE}}
{{FULLPAGENAMEE: 页面名 }}
- 页面名(可选):任意文本(支持伪页面名和特殊字符)
无效输入(无法创建有效标题)时返回空字符串
示例
- 当前页面
{{FULLPAGENAMEE}}
→ %E5%B8%AE%E5%8A%A9:%E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0 - 带命名空间
{{FULLPAGENAMEE: 帮助:Fullpagename }}
→ %E5%B8%AE%E5%8A%A9:Fullpagename - 保留空格
{{FULLPAGENAMEE: a b c }}
→ A_b_c - 特殊字符
{{FULLPAGENAMEE: /a_b/c }}
→ /a_b/c - 无效输入
{{FULLPAGENAMEE: 特殊:所有页面 }}
→
fullurl
获取指定页面的完整URL。MediaWiki原生支持。
可附加查询参数。支持本地和跨wiki页面,自动处理URL编码。
- 官方文档:[1]
- 完整文档:帮助:解析函数/fullurl - 更多示例、背景知识、底层代码和实战用例
语法
{{fullurl: 页面名称 | 查询参数 }}
- 页面名称:支持命名空间、跨wiki链接
- 查询参数(可选):以key=value形式添加,多个参数用&连接
示例
- 基本
{{fullurl:帮助:解析函数}}
→ https://wiki.biligame.com/tools/%E5%B8%AE%E5%8A%A9:%E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0 - 带参数
{{fullurl:Test|action=edit}}
→ https://wiki.biligame.com/tools/index.php?title=Test&action=edit - 带参数
{{fullurl:Test|a=1&b=2&c=3}}
→ https://wiki.biligame.com/tools/index.php?title=Test&a=1&b=2&c=3 - 分类页
{{fullurl:分类:模板}}
→ https://wiki.biligame.com/tools/%E5%88%86%E7%B1%BB:%E6%A8%A1%E6%9D%BF - 跨wiki
{{fullurl:arxiv:2501.12948}}
→ https://www.arxiv.org/abs/2501.12948
fullurle
获取指定页面的完整URL。MediaWiki原生支持。
可附加查询参数,与fullurl一致。但url中的部分特殊字符会被转换为 HTML 实体。
- 官方文档:Magic words - URL data
- 完整文档:帮助:解析函数/fullurle - 更多示例、背景知识、底层代码和实战用例
语法
{{fullurle: 页面名称 | 查询参数 }}
- 页面名称:支持命名空间、跨wiki链接
- 查询参数(可选):以key=value形式添加,多个参数用&连接
会被转换为HTML实体的符号:&
→ &
、"
→ "
、<
→ <
和>
→ >
(见PHP函数htmlspecialchars 文档)
示例
- 基本
{{fullurle:帮助:解析函数}}
→https://wiki.biligame.com/tools/%E5%B8%AE%E5%8A%A9:%E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0
- 带参数
{{fullurle:Test|action=edit}}
→https://wiki.biligame.com/tools/index.php?title=Test&action=edit
- 带参数
{{fullurle:Test|a=1<2>1&b=2"2&c=3'3}}
→https://wiki.biligame.com/tools/index.php?title=Test&a=1<2>1&b=2"2&c=3'3
- 分类页
{{fullurle:分类:模板}}
→https://wiki.biligame.com/tools/%E5%88%86%E7%B1%BB:%E6%A8%A1%E6%9D%BF
- 跨wiki
{{fullurle:arxiv:2501.12948}}
→https://www.arxiv.org/abs/2501.12948
G
gender
根据用户设置的性别输出不同文字。MediaWiki原生支持。
BWiki中,用户默认称呼是中性,且每一个wiki均独立设置。因此gender函数在多数情况下没用。
- 官方文档:Magic words - Localization functions
- 完整文档:帮助:解析函数/解析函数名称(不带井号) - 更多示例、背景知识、底层代码和实战用例
语法
{{gender:用户名|男性文字|女性文字|中性文字}}
- 用户名:在BWiki指用户的b站uid
- 性别文字:可填写1-3个,分别对应男性、女性和中性。
性别文字参数只有一个时,默认使用中性。参数有两个时,如果用户没有指定性别则默认使用男性。
示例
{{gender:39886146|male text|female text|unspecified}}
→ male text (Lu在参数设置中指定了性别){{gender:39886146|unspecified}}
→ unspecified (仅有一个文字参数时直接输出){{gender:|male text|female text|unspecified}}
→ unspecified (bwiki默认使用中性){{gender:|male|female}}
→ male 如果不给出中性文字,默认是男性
- 官方文档:Magic words - Localization functions
- 官方文档:Grammar
- 完整文档:帮助:解析函数/grammar - 更多示例、背景知识、底层代码和实战用例
GRAMMAR
词形变化。MediaWiki原生支持。
根据词形变化代码输出给定的词的正确的词形变化(与语言相关)。语法变形被用于波兰语这样的屈折语。需要在服务器language.php中手动逐一添加。
对于BWiki这样的中文Wiki几乎无用。
语法
{{GRAMMAR:N|word}}
- N: 词形变化代码
- word: 要转换的词
示例
{{GRAMMAR:elative|wiki}}
→ wikistä (对于芬兰语wiki)
I
if
条件分支函数。出自扩展 ParserFunctions。
根据条件字符串是否为空(含空白)返回不同值。
- 官方文档:官方文档
- 完整文档:帮助:解析函数/if - 更多示例、背景知识、底层代码和实战用例
语法
{{#if: 条件 | 非空输出值 | 空输出值 }}
- 条件:要检查的wikitext(自动去除首尾空白)
- 非空输出值:当测试字串非空时输出的内容
- 空输出值(可选):当测试字串为空时输出的内容,默认为空字符串
示例
- 基本用法
{{#if: 文本 | 有内容 | 无内容}}
→ 有内容 - 空白处理
{{#if: | 有内容 | 无内容}}
→ 无内容 - 省略第三个参数
{{#if: | 有内容}}
→ (无输出) - 模板变量检测
{{#if:{{{参数|}}} | 参数已填写 | 参数为空}}
ifeq
条件分支函数。出自扩展 ParserFunctions。
比较两个输入值是否相等,根据比较结果返回对应字符串。
- 官方文档:Help:Extension:ParserFunctions#ifeq
- 完整文档:帮助:解析函数/ifeq - 更多示例、背景知识、底层代码和实战用例
语法
{{#ifeq: 值1 | 值2 | 相等返回值 | 不等返回值 }}
- 值1:第一个比较值
- 值2:第二个比较值
- 相等返回值:当两值相等时返回的内容
- 不等返回值(可选):当两值不等时返回的内容(可选,默认空字符串)
当两个参数都可转换为有效数值时进行数值比较(忽略前导零和科学计数法差异),否则进行严格文本比较(区分大小写)。
示例
- 数值比较
{{#ifeq: 01 | 1 | equal | not equal}}
→ equal - 数值比较
{{#ifeq: 1e3 | 1000 | equal | not equal}}
→ equal - 文本比较
{{#ifeq: "01" | "1" | equal | not equal}}
→ not equal - 大小写敏感
{{#ifeq: Foo | foo | equal | not equal}}
→ not equal - 标签比较 → not equal(在解析函数内部的标签和解析函数(如nowiki、pre、includeonly)会被暂时替换为一个唯一的Strip marker。这会影响到比较结果)
{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | equal | not equal}}
iferror
条件分支函数,基于错误检测。出自扩展 ParserFunctions。
检测输入wikitext解析结果中是否存在错误标记(由class="error"的HTML元素表示),并根据检测结果返回不同值。
- 官方文档:Extension:ParserFunctions - #iferror
- 完整文档:帮助:解析函数/iferror - 更多示例、背景知识、底层代码和实战用例
语法
{{#iferror: 测试wikitext | 错误时返回值 | 正确时返回值 }}
- 测试wikitext:需要检测的wikitext,如#expr表达式
- 错误时返回值(可选):当检测到错误时返回的内容。如果留空且检测到错误,将返回空字符串
- 正确时返回值(可选):当未检测到错误时返回的内容。如果留空且未检测到错误,将返回测试字符串本身
错误检测基于HTML元素中是否包含class="error"属性,仅限strong/span/p/div标签。这类错误可能来自expr、time、rel2abs产生,模板(Templates)错误,如循环、递归和其他解析器错误也能产生。
示例
- 基本用法
{{#iferror: {{#expr: 1 + 2 }} | error | correct }}
→ correct - 检测错误
{{#iferror: {{#expr: 1 + X }} | error | correct }}
→ error - 省略正确返回值
{{#iferror: {{#expr: 10/2 }} | error }}
→ 5 - 同时省略返回值
{{#iferror: <span class="error">Err</span> }}
→ - 显式错误元素
{{#iferror: <div class="warning error">警示</div> | 发生错误 }}
→ 发生错误
ifexist
【高开销】条件分支函数,条件是指定页面/文件是否存在。出自扩展 ParserFunctions。
检查目标页面标题是否存在并返回对应结果值,支持检测文件是否存在。不支持跨wiki链接。
- 官方文档:Extension:ParserFunctions - #ifexist
- 完整文档:帮助:解析函数/ifexist - 更多示例、背景知识、底层代码和实战用例
语法
{{#ifexist: 页面标题 | 存在时的值 | 不存在时的值 }}
- 页面标题:要检查的页面标题
- 存在时的值:当页面存在时输出的内容
- 不存在时的值:当页面不存在时输出的内容
使用此函数的页面被视为链接到了要检查的页面,计入对应页面的链入页面。
此函数被标记为“高开销”。在bwiki,每个页面最多能使用100次高开销函数,超出后始终返回“不存在时的值”,并添加页面到分类:有过多高开销解析器函数调用的页面。
不过,如果检查目标是特殊页面、跨wiki链接或命中查询缓存,则不增加高开销计数(即,检查特殊页面存在性不是高开销的,检查一百次同一页面被视为使用一次高开销函数)。
要了解页面中高开销函数的使用情况,可以在编辑预览时,查看底部“解析器分析数据”表格。
超限制时的替代方式:部分情况可用CSS选择器如a.new
或a:not(.new)
模拟部分效果。
如果一定需要同时判断大量页面是否存在,文件可以通过函数filepath结果判断。页面可以通过判断#contributors替代,它们虽然实际开销不低,但没有被标记为“高开销”,没有单页使用次数限制。
示例
- 普通页面:
{{#ifexist: Help:解析函数 | exists | doesn't exist }}
→ exists - 不存在页面:
{{#ifexist: 帮助:如何PUA辰纱 | exists | doesn't exist }}
→ doesn't exist - 特殊页面:
{{#ifexist: 特殊:监视列表 | exists | doesn't exist }}
→ exists - 检查文件:
{{#ifexist: 文件:Test.png | exists | doesn't exist }}
→ exists - 系统消息:
{{#ifexist: MediaWiki:Copyright | exists | doesn't exist }}
→ doesn't exist
ifexpr
条件分支函数。条件是一个表达式。出自扩展 ParserFunctions。
计算表达式后,根据结果的真假返回指定的两个值之一。空/零值为假,出错为假,否则为真。
- 官方文档:Extension:ParserFunctions - #ifexpr
- 完整文档:帮助:解析函数/ifexpr - 更多示例、背景知识、底层代码和实战用例
语法
{{#ifexpr: 表达式 | 真值 | 假值 }}
- 表达式:数学表达式(支持运算符与expr相同)
- 真值(可选):表达式为真时的返回值
- 假值(可选):表达式为假时的返回值
当表达式为空或包含错误时,会被视为假值。零值视为假,非零值视为真。
示例
- 空表达式
{{#ifexpr: | yes | no }}
→ no - 逻辑运算
{{#ifexpr: 0 = 0 or 1 = 0 | yes }}
→ yes - 参数省略
{{#ifexpr: 1 < 0 | yes }}
→ - 错误处理
{{#ifexpr: = | yes | no }}
→ Expression error: Unexpected = operator. - 数值精度
{{#ifexpr: 12345678901234567 = 12345678901234568 | equal | not equal}}
→ equal- 说明:大整数比较会转换为浮点数导致精度丢失,建议使用#ifeq进行精确比较
imgh
获取指定图片高度。出自扩展 ImageSizeInfoFunctions。
- 官方文档:Extension:ImageSizeInfoFunctions - Usage
- 完整文档:帮助:解析函数/imgh - 更多示例、背景知识、底层代码和实战用例
语法
{{#imgh: 图片名称 }}
- 图片名称:需包含文件扩展名,可不带"文件:"前缀
不存在的文件返回0。
由于需要查询并读取文件,此函数的开销较高。在新版此扩展中,imgh被标记为高开销函数(BWiki目前使用的版本没有)。
示例
- 获取存在图片的高度
{{#imgh: 文件:Wikilogo.png }}
→ 101 - 省略命名空间前缀
{{#imgh: Wikilogo.png }}
→ 101 - 不存在的文件
{{#imgh: aaaaaaaaaaa.png }}
→ 0
imgw
获取指定图片宽度。出自扩展 ImageSizeInfoFunctions。
- 官方文档:Extension:ImageSizeInfoFunctions - Usage
- 完整文档:帮助:解析函数/imgh - 更多示例、背景知识、底层代码和实战用例
语法
{{#imgw: 图片名称 }}
- 图片名称:需包含文件扩展名,可不带"文件:"前缀
不存在的文件返回0。
由于需要查询并读取文件,此函数的开销较高。在新版此扩展中,imgw被标记为高开销函数(BWiki目前使用的版本没有)。
示例
- 获取存在图片的宽度
{{#imgw: 文件:Wikilogo.png }}
→ 440 - 省略命名空间前缀
{{#imgw: Wikilogo.png }}
→ 440 - 不存在的文件
{{#imgw: aaaaaaaaaaa.png }}
→ 0
info
一个小图标,点击显示悬浮框。出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
移动端不易精确点击,使用需谨慎。
- 官方文档:Semantic MediaWiki - Help:Adding tooltips
- 完整文档:帮助:解析函数/info - 更多示例、背景知识、底层代码和实战用例
语法
{{#info: <text>|<icon>|max-width=<width>|theme=<theme>}}
- 悬浮框文本
- icon (可选):infoicon可选项info、noteicon可选项note、warningicon可选项warning、erroricon可选项error
- max-width (可选): 最大宽度,正整数。
- theme (可选):悬浮框样式:square-bordertheme可选项square-border、square-border-lighttheme可选项square-border-light
示例
文本文本 {{#info: 悬浮框文本 }}
→文本文本 悬浮框文本
- 指定图标
{{#info: 请按格式输入,例如:+86-12345678901|note}}
→ 请按格式输入,例如:+86-12345678901 - 指定宽度:
{{#info: 悬浮提示中要显示大量文字。……|note|max-width=600}}
→ 悬浮提示中要显示大量文字。还有更多的文字。还有更多的文字。还有更多的文字。还有更多的文字。悬浮提示中要显示大量文字。还有更多的文字。还有更多的文字。还有更多的文字。还有更多的文字。 - 指定主题:
{{#info: 使用不同主题样式的悬浮提示。|note|theme=square-border-light}}
→ 使用不同主题样式的悬浮提示。
int
获取指定系统文本。MediaWiki原生支持。
根据消息名称(Message key)获取系统文本,支持填充文本中的参数。
特殊:所有信息页面展示所有系统消息名称,在MediaWiki命名空间创建对应页面可以覆盖默认文本。
- 官方文档:Help:Magic_words - Localization
- 完整文档:帮助:解析函数/int - 更多示例、背景知识、底层代码和实战用例
语法
{{int: 消息名称 | 参数1 | 参数2 | ... }}
- 消息名称(必需):如"编辑"对应edit。
- 参数1...N(可选):将按顺序替换消息内容中的$1、$2等占位符
消息内容中的HTML标签会被解析,若消息键不存在将返回空值:⧼消息名称⧽
示例
- 基础用法:
{{int: edit}}
→ 编辑 - 带参数:
{{int: movepage-page-moved | 页面A | 页面B }}
→ 页面页面A已经移动到页面B。 - 编辑器上传文件的默认说明:
{{int: msu-comment}}
→ 基于MsUpload的文件上传 - 不存在:
{{int: m123456789}}
→ ⧼m123456789⧽
invoke
调用Lua模块。出自扩展 Scribunto。
执行通过Lua编写的模块函数,提供高性能的复杂逻辑处理能力。
Lua模块,用于替代需要编写复杂嵌套解析函数的需求,提升性能和可读性。也用于充当“数据库”,如读取、检索以json格式存储的数据,便于统一的数据存储更新。
- 官方文档:Extension:Scribunto - Usage
- 完整文档:帮助:解析函数/invoke - 更多示例、背景知识、底层代码和实战用例
请参阅:
语法
{{#invoke: 模块名 | 函数名 | 参数1 | 参数2 | ... }}
- 模块名:位于模块命名空间的页面名
- 函数名:模块中定义的Lua函数名
- 参数(可选):传递给Lua函数的参数,可指定参数名
当模块或函数不存在,或发生运行时错误时,会生成错误信息。
示例
- 基础调用
{{#invoke:Math|add|5|3}}
→ 执行Math模块的add函数 - 带复杂参数
{{#invoke:DataProcessor|format_table|header=Yes|data={{FULLPAGENAME}}}}
→ 动态处理页面数据
L
language
根据语言代码获取语言名称。MediaWiki原生支持。
- 官方文档:Help:Magic words - Localization functions
- 完整文档:帮助:解析函数/language - 更多示例、背景知识、底层代码和实战用例
语法
{{#language: 语言代码 | 目标语言代码 }}
- 语言代码:ISO 639/ISO 15924语言代码(如zh、en、ja)
- 目标语言代码(可选):不支持(需要额外的CLDR扩展)。指定返回名称所用的语言代码
在MW1.43及以上,支持无参数调用,请参阅官方文档(BWiki目前的MW版本是1.37)。
示例
{{#language: zh }}
→ 中文{{#language: zh-hans }}
→ 中文(简体){{#language: en }}
→ English{{#language: xxx }}
→xxx (不存在的代码)
lc
将字符串转换为小写形式MediaWiki原生支持。
该函数可将输入字符串转换为全小写形式,或仅首字母小写,支持多语言字符处理。
语法
{{lc: 文本 }}
- 文本:需要转换小写的原始文本
示例
{{lc: ABCDefg}}
→ abcdefg{{lc: QWER脸滚键盘 }}
→ qwer脸滚键盘{{lc: 一二三壹贰叁 }}
→ 一二三壹贰叁
lcfirst
将字符串的首字母转换为小写。MediaWiki原生支持。
- 官方文档:Help:Magic_words - Formatting
- 完整文档:帮助:解析函数/lcfirst - 更多示例、背景知识、底层代码和实战用例
语法
{{lcfirst: 文本 }}
- 文本:需要转换的字符串。
示例
{{lcfirst: QEWR脸滚键盘 }}
→ qEWR脸滚键盘{{lcfirst: 你们说的QEWR是什么意思啊? }}
→ 你们说的QEWR是什么意思啊? (无效案例)
len
计算字符串长度。出自扩展 ParserFunctions 的String functions大规模使用时性能低下,推荐使用Lua模块。请参考扩展置顶警告和MediaWiki代码库 r51497中的暴论“parsers in the ugliest, most inefficient programming language known to man: MediaWiki wikitext with ParserFunctions.”、“WARNING: enabling this may have an adverse impact on the sanity of your users.”。
获取wikitext解析后的字符数量,支持多字节字符计算。
- 官方文档:Extension:ParserFunctions/String_functions
- 完整文档:帮助:解析函数/len - 更多示例、背景知识、底层代码和实战用例
语法
{{#len: 字符串 }}
- 字符串(可选):需要计算长度的文本内容,留空时返回0
函数计算时会自动忽略文本首尾空格,但保留中间空格和换行符。HTML实体按源码形式计算长度。
示例
- 基础计算
{{#len: Žmržlina九 }}
→ 9 - 基础计算
{{#len: 张王李赵1234 }}
→ 8 - HTML实体
{{#len:   }}
→ 5 - 会被替换为解析标记(Strip marker)的标签
{{#len: <a>Hello</a>tt }}
→ 2{{#len: <gallery>Hello</gallery>tt }}
→ 2{{#len: <ref>Hello</ref>tt }}
→ 2
- 直接渲染的标签
{{#len: <div>Hello</div>tt }}
→ 18{{#len: <span>Hello</span>tt }}
→ 20
listfilter
列表过滤。出自扩展 ParserPower。
支持保留/排除项、模板条件等多种过滤方式,输出格式化后的新列表。
- 官方文档:ParserPower扩展文档
- wiki.gg文档:wiki.gg support wiki - ParserPower
- 完整文档:帮助:解析函数/listfilter - 更多示例、背景知识、底层代码和实战用例
语法
{{#listfilter:
|list=
|insep=
|outsep=
|keep=
|keepsep=
|keepcs=
|remove=
|removesep=
|removecs=
|token=
|tokensep=
|fieldsep=
|indextoken=
|pattern=
|template=
|counttoken=
|intro=
|outro=
|default=
}}
核心参数:
- list: 列表。如
item 1,item 2,item 3
- insep: 可选,输入分隔符,默认逗号
,
。用于分割参数list
,构建列表
输出格式控制,可选:
- outsep: 输出分隔符,默认逗号。用作输出时列表项的分隔符。
- intro, outro: 输出时指定前置和后置内容,列表为空时不输出。用于避免在列表前后使用if来控制前后内容。
- counttoken: 占位符,用于在intro, outro参数中填充过滤后的列表项数量
- default: 过滤后列表如果为空时的输出。
过滤参数,可选:
- keep: 指定保留值,默认不区分大小写。指定此参数将无视
remove
、template
、pattern
参数。- keepsep: 指定保留值分隔符,默认为逗号
- keepcs: 设为
yes
时,保留值keep
将区分大小写
- remove: 指定移除值,默认不区分大小写。指定此参数将无视
template
、pattern
参数。- removesep: 指定多个移除值的分隔符,默认为逗号
- removecs: 设为
yes
时,移除值remove
将区分大小写
- token, pattern: token作为占位符,pattern是条件wikitext,每个列表项都将被代入pattern中占位符的位置计算结果,如果是
remove
,对应项将被移出- indextoken: pattern中的token将被替换为(列表项的)序号而不是值
- tokensep, fieldsep: fieldsep是用于列表项的分隔符,此时token可指定多个占位符(默认分隔符是逗号,也可通过tokensep指定),pattern能单独针对列表项的一部分做筛选
- template: 通过模板处理列表项,每个列表项被作为参数1传入模板。如果模板返回值是
remove
,此项会被移除。使用参数会忽略token、tokensep和pattern- fieldsep: 列表项分隔符,将每个列表项分割为多个参数传入模板
过滤参数优先级:keep > remove > template > pattern
示例
{{#listfilter:list=Apple,Orange,Banana|keep=apple,banana}}
→ Apple, Banana{{#listfilter:list=1,10,100,1000|token=@|pattern=\{\{#ifexpr:@\g99\!remove\!keep\}\} }}
→ 1, 10- 其中,pattern是手动转义的条件,
{{#ifexpr:@>123|remove|keep}}
- 获得方式:
<esc>{{#ifexpr:@>123|remove|keep}}</esc>
→ \{\{#ifexpr:@\g123\!remove\!keep\}\} - 对于其他平台,可以直接用esc标签包裹条件作为参数,bwiki需要手动转义(这是一个
bug特性)
- 其中,pattern是手动转义的条件,
尚需进一步测试来了解平台bug对参数造成的限制。
listmap
列表排序、格式化输出。出自扩展 ParserPower。
按照指定的格式和排序方式输出列表元素。只能按字母、数字顺序排序、支持区分大小写和升降序。
- 官方文档:Extension:ParserPower/List_handling_functions
- wiki.gg文档:wiki.gg support wiki - ParserPower (注意wiki.gg大幅修改了ParserPower实现,未来此文档可能与bwiki特性不同)
- 完整文档:帮助:解析函数/listmap - 更多示例、背景知识、底层代码和实战用例
语法
{{#listmap:
|list=
|insep=
|outsep=
|token=
|tokensep=
|fieldsep=
|indextoken=
|pattern=
|template=
|sortmode=
|sortoptions=
|duplicates=
|counttoken=
|intro=
|outro=
|default=
}}
核心参数:
- list: 列表。如
item 1,item 2,item 3
- insep: 可选,输入分隔符,默认逗号
,
。用于分割参数list
,构建列表
输出格式控制,可选:
- outsep: 输出分隔符,默认逗号。用作输出时列表项的分隔符。
- intro, outro: 输出时指定前置和后置内容,列表为空时不输出。用于避免在列表前后使用if来控制前后内容。
- counttoken: 占位符,用于在intro, outro参数中填充列表项数量
- default: 过滤后列表如果为空时的输出。
列表项格式参数,可选:
- token, pattern: token作为占位符,pattern是格式wikitext,每个列表项都将被代入pattern中占位符的位置输出
- indextoken: pattern中的token将被替换为(列表项的)序号而不是值
- tokensep, fieldsep: fieldsep是用于列表项的分隔符,此时token可指定多个占位符(默认分隔符是逗号,也可通过tokensep指定),pattern能单独针对列表项的一部分做格式控制
- template: 通过模板处理列表项,每个列表项被作为参数1传入模板。使用参数会忽略token、tokensep和pattern
- fieldsep: 列表项分隔符,将每个列表项分割为多个参数传入模板
排序参数,可选:
- sortmode: 排序时机。值为以下选项之一:
- nosort 不排序
- presort 先排序,再格式化列表项。如果格式化不影响排序,使用此选项效率更高。
- sort 或 postsort 先按格式化列表项,后排序
- sortoptions: 排序方式,值为以下的一个或多个选项:
- alpha 或 numeric: 按字母或数字排序,默认字母
- asc 或 desc: 升序和降序排序
- ncs 或 cs: 不区分大小写(ncs),或区分(cs),仅对alpha排序生效,默认不区分大小写
- duplicates: 重复值处理,值为以下选项之一:
- keep 保留重复值
- prestrip 在格式化前移除重复值
- strip 或 poststrip 在格式化后移除重复值。注意,此时wikitext尚未被解析,因此即使指定此选项,获得的结果仍然可能有重复项。
- pre/poststrip 在格式化前、后均移除一次重复值(目前由于扩展本身的bug,此选项仅能在格式化前执行一次)
示例
{{#listmap:list=Apple,Orange,Banana|token=@|pattern=[[首页|@]]}}
→ Apple, Orange, Banana{{#listmap:list=1,10,100,1000|token=@|pattern=\{\{#ifexpr:@\g99\!aa@\!bb\}\} }}
→ bb, bb, aa100, aa1000- 其中,pattern是手动转义的条件,
{{#ifexpr:@>123|aa@|bb}}
- 获得方式:
<esc>{{#ifexpr:@>123|aa@|bb}}</esc>
→ \{\{#ifexpr:@\g123\!aa@\!bb\}\} - bwiki需要手动转义(这是一个
bug特性)。对于其他平台,应当能直接用esc标签包裹wikitext作为参数。
- 其中,pattern是手动转义的条件,
{{#listmap:list=1,1,10,100,1000,1000|token=@|pattern=\{\{#ifexpr:@>99\!aa@\!bb\}\}|duplicates=poststrip}}
→ bb, bb, aa100, aa1000- 结果有两个bb是正常的,因为去重是针对pattern表达式去重,list中1和10的pattern是不同的,最终pattern的展开结果相同
listmerge
【疑存BUG】以指定规则合并列表元素。出自扩展 ParserPower。
列表中的所有元素将依次两两匹配,符合规则的元素将按照指定格式合并。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/listmerge - 更多示例、背景知识、底层代码和实战用例
语法
示例
- 疑似bug,暂无
{{#listmerge:list=Apple,Orange,Banana|token1=a|token2=b|matchpattern=yes|mergepattern=a+b}}
→+
(应为Apple+Orange+Banana
)
listsort
列表排序。出自扩展 ParserPower。
按字母、数字顺序排序、支持区分大小写和升降序。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/listsort - 更多示例、背景知识、底层代码和实战用例
语法
{{#listsort:
|list=
|insep=
|outsep=
|sortoptions=
|duplicates=
|token=
|tokensep=
|fieldsep=
|indextoken=
|pattern=
|template=
|subsort=
|subsortoptions=
|counttoken=
|intro=
|outro=
|default=
}}
核心参数:
- list: 列表。如
item 1,item 2,item 3
- insep: 可选,输入分隔符,默认逗号
,
。用于分割参数list
,构建列表
输出格式控制,可选:
- outsep: 输出分隔符,默认逗号。用作输出时列表项的分隔符。
- intro, outro: 输出时指定前置和后置内容,列表为空时不输出。用于避免在列表前后使用if来控制前后内容。
- counttoken: 占位符,用于在intro, outro参数中填充过滤后的列表项数量
- default: 过滤后列表如果为空时的输出。
列表项格式参数,可选:
- token, pattern: token作为占位符,pattern是带有占位符的wikitext,其解析结果将作为排序键
- indextoken: pattern中的token将被替换为(列表项的)序号而不是值
- tokensep, fieldsep: fieldsep是用于列表项的分隔符,此时token可指定多个占位符(默认分隔符是逗号,也可通过tokensep指定),pattern能单独针对列表项的一部分做格式控制
- template: 通过模板处理列表项,每个列表项被作为参数1传入模板。使用参数会忽略token、tokensep和pattern
- fieldsep: 列表项分隔符,将每个列表项分割为多个参数传入模板
排序参数,可选:
- sortoptions: 排序方式,值为以下的一个或多个选项:
- alpha 或 numeric: 按字母或数字排序,默认字母
- asc 或 desc: 升序和降序排序
- ncs 或 cs: 不区分大小写(ncs),或区分(cs),仅对alpha排序生效,默认不区分大小写
- duplicates: 重复值处理,值为以下选项之一:
- keep 保留重复值,默认
- strip 移除重复值
- subsort和subsortoptions: 对相同元素,当subsort设为yes时,按照subsortoptions选项排序(可用选项与sortoptions相同)
示例
{{#listsort:list=Apple,Orange,Banana,Banana|sortoptions=@|duplicates=strip}}
→ Apple, Banana, Orange
listunique
列表去重。出自扩展 ParserPower。
支持按照指定wikitext操作列表项作为对比键。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/listunique - 更多示例、背景知识、底层代码和实战用例
语法
{{#listunique:
|list=
|insep=
|outsep=
|uniquecs=
|token=
|tokensep=
|fieldsep=
|indextoken=
|pattern=
|template=
|counttoken=
|intro=
|outro=
|default=
}}
核心参数:
- list: 列表。如
item 1,item 2,item 3
- insep: 可选,输入分隔符,默认逗号
,
。用于分割参数list
,构建列表
输出格式控制,可选:
- outsep: 输出分隔符,默认逗号。用作输出时列表项的分隔符。
- intro, outro: 输出时指定前置和后置内容,列表为空时不输出。用于避免在列表前后使用if来控制前后内容。
- counttoken: 占位符,用于在intro, outro参数中填充过滤后的列表项数量
- default: 过滤后列表如果为空时的输出。
去重参数,可选:
- uniquecs: 设为yes时,区分大小写
- token, pattern: token作为占位符,pattern是格式wikitext,每个列表项都将被代入pattern中占位符的位置,展开后作为去重键
- indextoken: pattern中的token将被替换为(列表项的)序号而不是值
- tokensep, fieldsep: fieldsep是用于列表项的分隔符,此时token可指定多个占位符(默认分隔符是逗号,也可通过tokensep指定),pattern能单独针对列表项的一部分处理
- template: 通过模板处理列表项,每个列表项被作为参数1传入模板。使用参数会忽略token、tokensep和pattern
- fieldsep: 列表项分隔符,将每个列表项分割为多个参数传入模板
示例
{{#listunique:list=Apple,Apple,Orange,Banana,Orange,Banana}}
→ Apple, Orange, Banana
localurl
获取相对URL。MediaWiki原生支持。
指定页面获取其相对URL(不带域名),支持附加查询参数,自动进行URL编码。
- 官方文档:MediaWiki魔法字说明
- 完整文档:帮助:解析函数/localurl - 更多示例、背景知识、底层代码和实战用例
语法
{{localurl: 页面 | 参数 }}
- 页面:要生成URL的目标页面标题
- 参数(可选):以key=value格式附加的查询字符串参数,多个参数用&分隔
生成的URL始终采用与当前wiki配置匹配的短URL格式(如/wiki/页面名)或index.php路径。
示例
- 基础用法
{{localurl: 帮助:解析函数 }}
→/tools/%E5%B8%AE%E5%8A%A9:%E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0
- 基础用法
{{localurl: Test }}
→/tools/Test
- 单个参数
{{localurl: Test | printable=yes }}
→/tools/index.php?title=Test&printable=yes
- 多个参数
{{localurl: Test | action=raw&feed=atom }}
→/tools/index.php?title=Test&action=raw&feed=atom
localurle
获取相对URL,在localurl基础上将&等符号转换为HTML实体。MediaWiki原生支持。
指定页面获取其相对URL(不带域名),支持附加查询参数,自动进行URL编码,还会将这些字符转换为HTML实体:<>"&
→ <>"&
- 官方文档:MediaWiki魔法字说明
- 完整文档:帮助:解析函数/localurle - 更多示例、背景知识、底层代码和实战用例
语法
{{localurle: 页面 | 参数 }}
- 页面:要生成URL的目标页面标题
- 参数(可选):以key=value格式附加的查询字符串参数,多个参数用&分隔
生成的URL始终采用与当前wiki配置匹配的短URL格式(如/wiki/页面名)或index.php路径。
示例
- 基础用法
{{localurle: 帮助:解析函数 }}
→/tools/%E5%B8%AE%E5%8A%A9:%E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0
- 基础用法
{{localurle: Test }}
→/tools/Test
- 单个参数
{{localurle: Test | printable=yes }}
→/tools/index.php?title=Test&printable=yes
- 多个参数
{{localurle: Test | action=raw&feed=atom }}
→/tools/index.php?title=Test&action=raw&feed=atom
loop
循环函数。出自扩展 Loops。
重复解析一段wikitext。需要指定循环次数和循环变量。循环变量每次加一,如果循环次数为负数,则变量每次减一。
- 官方文档:Extension:Loops
- 完整文档:帮助:解析函数/loop - 更多示例、背景知识、底层代码和实战用例
语法
{{#loop: 变量名 | 起始值 | 循环次数 | 循环内容 }}
- 变量名(必填):存储当前循环次数的变量名称,可通过访问
- 起始值(必填):循环计数器初始值,接受整数值
- 循环次数(必填):绝对值决定循环次数,正负决定递增/递减方向
- 循环内容(必填):每次循环解析的wikitext内容
循环次数为0时不执行任何操作,负数时执行反向计数。实际循环次数取绝对值,例如"-4"同样执行4次循环。
示例
{{#loop: a | 1 | 4 | {{#var:a}} }}
→ 1234
{{#loop: j | 7 | -4 | {{#var:j}} }}
→ 7654
{{#loop: i | 2 | 4 |<nowiki/>
*{{#var:i}}
}}
- 2
- 3
- 4
- 5
lst
嵌入指定页面中被section标签标记的部分。出自扩展 Labeled Section Transclusion。
注意,只有直接写在wikitext中的section标签才是有效的,通过模板或#tag引入的section标签无效。
- 官方文档:Extension:Labeled Section Transclusion - Functions
- 完整文档:帮助:解析函数/lst - 更多示例、背景知识、底层代码和实战用例
语法
{{#lst: 页面 | section名称 }}
- 页面:来源页面
- section名称:指定要嵌入的section
示例
首先标记一段wikitext:
我以前和你一样是个冒险家,直到我的膝盖中了一箭……
其wikitext是:
<section begin="lst示例" />
<code>我以前和你一样是个冒险家,直到我的膝盖中了一箭……</code>
<section end="lst示例" />
一个section需要标记开始和结束位置,一个页面内可以有多个section。这些标记不是HTML/XML,不会干扰其他HTML或标签。
即可在任何页面使用#lst嵌入:{{#lst:帮助:解析函数/lst|lst示例}}
检查到模板循环:帮助:解析函数/lst
lsth
以标题为单位,嵌入指定页面中的wikitext。出自扩展 Labeled Section Transclusion。
- 官方文档:Extension:Labeled Section Transclusion - Functions
- 完整文档:帮助:解析函数/lsth - 更多示例、背景知识、底层代码和实战用例
语法
{{#lsth: 页面 | 标题}}
- 页面:来源页面
- 标题:要嵌入内容的标题
嵌入来源页面中指定标题下的内容,即从指定标题开始(不包含标题) ,直到下一个同级标题前。
{{#lsth: 页面 | 标题1 | 标题2 }}
- 页面:来源页面
- 标题1:要嵌入内容的标题,开始位置
- 标题2:要嵌入内容的标题,结束位置
嵌入来源页面中从标题1开始到标题2之间的内容,不包含标题12。
{{#lsth: 页面}}
- 页面:来源页面
嵌入页面中首个标题之前的内容
示例
{{#lsth:Wiki简介|获取帮助}}
开始编辑后,你一定会遇到很多问题。这大多可以通过搜索、查阅文档解决。
如果你嫌弃百度的搜索体验差,可以尝试必应国际版或Google搜索。如果中文搜不到,可以尝试使用英文。
当你不知道如何搜索,或者超过15分钟无法解决问题,请大胆去提问吧!BWiki社区有大量小伙伴,永远不用担心问不到人。
在wiki社区中,为了节省大家的时间精力,推荐阅读 提问的智慧(如无法访问,请参阅另一版本)
lstx
嵌入整个页面,除了指定排除的section。出自扩展 Labeled Section Transclusion。
与#lst相反,lstx会嵌入全部指定页面内容,除了指定的section。
- 官方文档:Extension:Labeled Section Transclusion - Functions
- 完整文档:帮助:解析函数/lstx - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstx: 页面 | 排除section | 替代文字 }}
- 页面:来源页面
- 排除section:要排除的section名称,这是通过标签section指定的,与lst的要求一致
- 替代文字:在排除section的位置展示的内容
示例
{{#lstx:帮助:解析函数/lst|lst示例}}
lstapp
向列表追加项。出自扩展 ParserPower。
也会移除列表中每个元素的前后空格,移除空值
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstapp - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstapp:list|separator|new item}}
核心参数:
- list: 列表。如
item 1,item 2,item 3
- separator: 列表分隔符
- new item: 新元素
示例
{{#lstapp:Apple,Orange|,|Banana}}
→ Apple,Orange,Banana{{#lstapp: Apple , , , Orange |,|Banana}}
→ Apple,Orange,Banana
lstcnt
计算列表元素数量。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstcnt - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstcnt:list|separator}}
核心参数:
- list: 列表。如
item 1,item 2,item 3
- separator: 列表分隔符
示例
{{#lstcnt:Apple,Orange,Banana|,}}
→ 3{{#lstcnt:Apple,Orange,Banana,Banana|a}}
→ 7
lstcntuniq
计算列表中不重复的元素数量。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstcntuniq - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstcntuniq:list|separator|case sensitivity option}}
核心参数:
- list: 列表。如
item 1,item 2,item 3
- separator: 列表分隔符
- case sensitivity option: ncs(不区分大小写,默认)或 cs(区分大小写)
示例
{{#lstcntuniq:Apple,Banana,Banana|,}}
→ 2{{#lstcntuniq:Apple,Banana,Banana,Banana|a}}
→ 3
lstelem
按位置获取列表元素。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstelem - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstelem:list|separator|index}}
核心参数:
- list: 列表。如
item 1,item 2,item 3
- separator: 列表分隔符
- index: 元素位置,支持负数(从后向前的位置)
示例
{{#lstelem:Apple,Orange|,|1}}
→ Apple{{#lstelem:Apple,Orange|,|-1}}
→ Orange{{#lstelem:Apple,Orange|,|-2}}
→ Apple
lstfltr
列表过滤,返回包含指定元素的列表。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstfltr - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstfltr:items to keep|items separator|list|input separator|output separator|case sensitivity option}}
核心参数:
- items to keep:要保留的元素
- items separator:保留元素的分隔符
- list: 列表。如
item 1,item 2,item 3
- input separator: 列表分隔符
- output separator: 输出分隔符
- case sensitivity option: ncs(不区分大小写,默认)或 cs(区分大小写)
示例
{{#lstfltr:Apple,Banana|,|Apple,Apple,Banana,Orange,Banana|,}}
→ Apple, Apple, Banana, Banana
lstfnd
寻找列表中第一个匹配的元素。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstfnd - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstfnd:item to find|list|separator|case sensitivity option}}
核心参数:
- item to find:要匹配的元素
- list: 列表。如
item 1,item 2,item 3
- separator: 列表分隔符
- case sensitivity option: ncs(不区分大小写,默认)或 cs(区分大小写)
示例
{{#lstfnd:banana|Apple,Apple,Banana,Orange,Banana|,}}
→ Banana{{#lstfnd:{{#ifeq:arg-a|arg-b|apple|banana}}|Apple,Apple,Banana,Orange,Banana|,}}
→ Banana
lstind
获取列表中第一个匹配的元素的位置。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstind - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstind:item to find|list|separator|options}}
核心参数:
- item to find:要匹配的元素
- list: 列表。如
item 1,item 2,item 3
- separator: 列表分隔符
- options: 以下值中的一个或多个:
- asc / desc:asc(默认,从前向后搜索),desc(从后向前搜索)
- pos / neg :pos(默认,获取正向位置),neg(获取负向位置,即负数的从后向前的位置)
示例
{{#lstind:Banana|Apple,Banana,Orange,Banana|,}}
→ 2{{#lstind:Banana|Apple,Banana,Orange,Banana|,|neg}}
→ -3{{#lstind:Banana|Apple,Banana,Orange,Banana|,|desc}}
→ 4
lstjoin
合并两个列表,支持指定分隔符。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstjoin - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstjoin:first list|first input separator|second list|second input separator|output separator}}
核心参数:
- first list: 列表1。如
item 1,item 2,item 3
- first list separator: 列表1分隔符
- second list: 列表2。如
item 1,item 2,item 3
- second list separator: 列表2分隔符
- output separator: 输出分隔符,默认没有
示例
{{#lstjoin:Apple,Banana|,|Orange+Banana|+}}
→ AppleBananaOrangeBanana{{#lstjoin:Apple,Banana|,|Orange+Banana|+|、}}
→ Apple、Banana、Orange、Banana
lstmap
列表排序、格式化输出,是listmap的简化。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/listmap - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstmap:list|input separator|token|pattern|output separator|sort mode|sort options}}
参数:
- list: 列表。如
item 1,item 2,item 3
- input separator: 输入分隔符,默认逗号
,
。用于分割参数list
,构建列表 - token, pattern: token作为占位符,pattern是格式wikitext,每个列表项都将被代入pattern中占位符的位置输出
- output separator: 输出分隔符,默认逗号。用作输出时列表项的分隔符。
- sortmode: 排序时机。值为以下选项之一:
- nosort 不排序
- presort 先排序,再格式化列表项。如果格式化不影响排序,使用此选项效率更高。
- sort 或 postsort 先按格式化列表项,后排序
- sortoptions: 排序方式,值为以下的一个或多个选项:
- alpha 或 numeric: 按字母或数字排序,默认字母
- asc 或 desc: 升序和降序排序
- ncs 或 cs: 不区分大小写(ncs),或区分(cs),仅对alpha排序生效,默认不区分大小写
示例
lstmaptemp
【疑存Bug】列表排序、格式化输出,是#listmap的简化,仅支持通过模板格式化输出。出自扩展 ParserPower。
无法复现示例
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstmaptemp - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstmaptemp:list|template|input separator|output separator|sort mode|sort options}}
参数:
- list: 列表。如
item 1,item 2,item 3
- template: 模板名,与 #listmap 的 template 参数一致,其输入是一个列表元素。
- input separator: 输入分隔符,默认逗号
,
。用于分割参数list
,构建列表 - output separator: 输出分隔符,默认逗号。用作输出时列表项的分隔符。
示例
- 无法成功复现示例
{{#lstmaptemp:Apple,Orange,Banana|模板名|,|,}}
lstprep
向列表前添加元素。出自扩展 ParserPower。
也会移除列表中每个元素的前后空格,移除空值。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstprep - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstprep:new item|separator|list}}
核心参数:
- new item: 新元素
- separator: 列表分隔符
- list: 列表。如
item 1,item 2,item 3
示例
{{#lstprep:Banana|,|Apple,Orange}}
→ Banana,Apple,Orange{{#lstprep:Banana|,|Apple , , , Orange}}
→ Banana,Apple,Orange
lstrm
从列表移除某一指定元素。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstrm - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstrm:item to remove|list|input separator|output separator|case sensitivity option}}
核心参数:
- item to remove: 要移除的一个元素
- list: 列表。如
item 1,item 2,item 3
- input separator: 输入分隔符
- output separator: 输出分隔符
- case sensitivity option: ncs(不区分大小写,默认)或 cs(区分大小写)
示例
{{#lstrm:Banana|Apple,Banana,Orange,Banana|,}}
→ Apple, Orange
lstsep
列表更换分隔符。出自扩展 ParserPower。
同时会移除空白元素,移除元素前后的空格。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstsep - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstsep:list|input separator|output separator}}
- list: 列表。如
item 1,item 2,item 3
- input separator: 输入分隔符
- output separator: 输出分隔符
示例
{{#lstsep:Apple,Banana,Orange,Banana|,|/}}
→ Apple/Banana/Orange/Banana{{#lstsep:Apple , , , Banana ,|,|+}}
→ Apple+Banana{{#lstsep:baaabaabab|a|+}}
→ b+b+b+b
lstsrt
列表排序,是#listsort的简版。出自扩展 ParserPower。
按字母、数字顺序排序、支持区分大小写和升降序。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/listsort - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstsrt:list|input separator|output separator|sort options}}
- list: 列表。如
item 1,item 2,item 3
- input separator: 输入分隔符
- output separator: 输出分隔符
- sortoptions: 排序方式,值为以下的一个或多个选项:
- alpha 或 numeric: 按字母或数字排序,默认字母
- asc 或 desc: 升序和降序排序
- ncs 或 cs: 不区分大小写(ncs),或区分(cs),仅对alpha排序生效,默认不区分大小写
示例
{{#lstsrt:Apple,Orange,Banana,Banana|,|,}}
→ Apple,Banana,Banana,Orange
lstsub
获取列表的一部分。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstsub - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstsub:list|input separator|output separator|start index|length}}
- list: 列表。如
item 1,item 2,item 3
- input separator: 输入分隔符
- output separator: 输出分隔符
- start index: 起始位置
- length: 截取长度
示例
{{#lstsub:Apple,Orange,Banana,Banana|,|,|2|1}}
→ Orange{{#lstsub:Apple,Orange,Banana,Banana|,|+|2|2}}
→ Orange+Banana
lstuniq
列表去重。出自扩展 ParserPower。
- 官方文档:Extension:ParserPower/List_handling_functions
- 完整文档:帮助:解析函数/lstuniq - 更多示例、背景知识、底层代码和实战用例
语法
{{#lstuniq:list|input separator|output separator|case sensitivity option}}
- list: 列表。如
item 1,item 2,item 3
- input separator: 输入分隔符
- output separator: 输出分隔符
- case sensitivity option: 是否区分大小写。ncs(默认,不区分),cs(区分大小写)
示例
{{#lstuniq:Apple,Orange,Banana,banana|,|,}}
→ Apple,Orange,Banana{{#lstuniq:Apple,Orange,banana,Banana|,|,}}
→ Apple,Orange,banana{{#lstuniq:Apple,Orange,Banana,banana|,|+|cs}}
→ Apple+Orange+Banana+banana
N
NAMESPACE
获取命名空间名称。MediaWiki原生支持。
获取当前页面,或者指定页面的命名空间名称。
- 官方文档:Help:Magic_words - Namespaces
- 完整文档:帮助:解析函数/namespace - 更多示例、背景知识、底层代码和实战用例
语法
{{NAMESPACE}}
获取当前命名空间。
{{NAMESPACE:页面名称}}
- 页面名称: 要获取命名空间名称的页面
示例
{{NAMESPACE}}
→ 帮助{{NAMESPACE:模板:2333}}
→ 模板{{NAMESPACE:{{FULLPAGENAME}}}}
→ 帮助
NAMESPACEE
获取命名空间名称,以URL编码。MediaWiki原生支持。
获取URL编码的当前页面,或者指定页面的命名空间名称,名称以URL编码。
- 官方文档:Help:Magic_words - Namespaces
- 完整文档:帮助:解析函数/namespacee - 更多示例、背景知识、底层代码和实战用例
语法
{{NAMESPACEE}}
获取当前命名空间。
{{NAMESPACEE:页面名称}}
- 页面名称: 要获取命名空间名称的页面
示例
{{NAMESPACEE}}
→ %E5%B8%AE%E5%8A%A9 (「帮助」的URL编码){{NAMESPACEE:模板:2333}}
→ %E6%A8%A1%E6%9D%BF (「模板」的URL编码){{NAMESPACEE:{{FULLPAGENAME}}}}
→ %E5%B8%AE%E5%8A%A9 (「帮助」的URL编码)
NAMESPACENUMBER
获取命名空间名称ID。MediaWiki原生支持。
获取当前页面或指定页面的命名空间ID,如主空间为0,模板为10等等。
- 官方文档:Help:Magic_words - Namespaces
- 完整文档:帮助:解析函数/namespacee - 更多示例、背景知识、底层代码和实战用例
语法
{{NAMESPACENUMBER}}
获取当前命名空间ID。
{{NAMESPACENUMBER:页面名称}}
- 页面名称: 要获取命名空间ID的页面
示例
{{NAMESPACENUMBER}}
→ 12(帮助){{NAMESPACENUMBER:首页}}
→ 0(主命名空间ID为0){{NAMESPACENUMBER:模板:2333}}
→ 10(模板){{NAMESPACENUMBER:{{FULLPAGENAME}}}}
→ 12(帮助)
ns
获取命名空间名称,根据ID或英文名。MediaWiki原生支持。
- 官方文档:Help:Magic_words - Namespaces
- 完整文档:帮助:解析函数/ns - 更多示例、背景知识、底层代码和实战用例
语法
{{ns:参数1}}
- 参数1:命名空间ID、英文名或中文名
示例
{{ns:-2}} / {{ns:Media}}
→媒体文件
{{ns:-1}} / {{ns:Special}}
→特殊
{{ns:0}} / {{ns:}}
→{{ns:2}} / {{ns:User}}
→用户
{{ns:4}} / {{ns:Project}}
→WIKI实验室
(取决于Wiki名称){{ns:6}} / {{ns:File}} / {{ns:Image}}
→文件
{{ns:8}} / {{ns:MediaWiki}}
→MediaWiki
{{ns:10}} / {{ns:Template}}
→模板
{{ns:12}} / {{ns:Help}}
→帮助
{{ns:14}} / {{ns:Category}}
→分类
{{ns:274}}
→Widget
{{ns:828}}
→模块
此外,中文名也可:
{{ns:模板}}
→ 模板
支持讨论命名空间:
{{ns:1}} / {{ns:Talk}}
→ 讨论{{ns:3}} / {{ns:User talk}}
→ 用户讨论{{ns:5}} / {{ns:Project talk}}
→ WIKI实验室讨论(取决于Wiki名称){{ns:7}} / {{ns:File talk}} / {{ns:Image talk}}
→ 文件讨论{{ns:9}} / {{ns:MediaWiki talk}}
→ MediaWiki讨论{{ns:11}} / {{ns:Template talk}}
→ 模板讨论{{ns:13}} / {{ns:Help talk}}
→ 帮助讨论{{ns:15}} / {{ns:Category talk}}
→ 分类讨论
nse
获取URL编码的命名空间名称,根据ID或英文名。MediaWiki原生支持。
与ns一致,但结果以URL编码。
- 官方文档:Help:Magic_words - Namespaces
- 完整文档:帮助:解析函数/nse - 更多示例、背景知识、底层代码和实战用例
语法
{{nse:参数1}}
- 参数1:命名空间ID、英文名或中文名
示例
{{nse:-2}} / {{nse:Media}}
→%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6
{{nse:-1}} / {{nse:Special}}
→%E7%89%B9%E6%AE%8A
{{nse:0}} / {{nse:}}
→{{nse:6}} / {{nse:File}} / {{nse:Image}}
→%E6%96%87%E4%BB%B6
{{nse:8}} / {{nse:MediaWiki}}
→MediaWiki
此外,中文名也可:
{{nse:模板}}
→ %E6%A8%A1%E6%9D%BF
支持讨论命名空间:
{{nse:1}} / {{nse:Talk}}
→ %E8%AE%A8%E8%AE%BA{{nse:3}} / {{nse:User talk}}
→ %E7%94%A8%E6%88%B7%E8%AE%A8%E8%AE%BA
NUMBERINGROUP
获取指定用户组的用户数量。MediaWiki原生支持。
- 官方文档:Help:Magic_words - Statistics
- 完整文档:帮助:解析函数/numberingroup - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBERINGROUP:用户组ID}}
- 用户组ID: 以下值中的一个,参见特殊:用户组权限
- autoconfirmed : 自动确认用户
- automoderated : 自动版主化用户
- bilibili : bilibili用户
- bot : 机器人
- bureaucrat : 行政员
- checkuser : checkuser
- interface-admin : 界面管理员
- moderator : 版主
- push-subscription-manager : 推送订阅管理器
- smwadministrator : 管理员(语义MediaWiki)
- smwcurator : 监护人(语义MediaWiki)
- smweditor : 编辑(语义MediaWiki)
- suppress : 监督员
- sysop : 管理员
- user : 用户
- widgeteditor : 小部件编辑者
- 注意,此函数中使用参数bilibili可能会导致性能问题,可以使用
{{NUMBEROFUSERS}}
替代。 - 不过,bilibili用户组的成员数量不等于wiki用户数量。因为只有≥2级的B站用户登录wiki时才自动授予bilibili用户组。因此拥有bilibili用户组的用户数量通常略低于wiki用户数量。
示例
{{NUMBERINGROUP:automoderated}}
→ 15{{NUMBERINGROUP:bot}}
→ 1{{NUMBERINGROUP:bureaucrat}}
→ 8{{NUMBERINGROUP:interface-admin}}
→ 22{{NUMBERINGROUP:sysop}}
→ 19
NUMBEROFACTIVEUSERS
活跃用户数量。MediaWiki原生支持。
过去30天内执行过操作(如编辑页面)的用户被视为活跃用户。此变量与特殊:统计信息中的活跃用户数量统计保持一致。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofactiveusers - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFACTIVEUSERS}}
示例
{{NUMBEROFACTIVEUSERS}}
→ 16
NUMBEROFADMINS
管理员数量。MediaWiki原生支持。
拥有管理员用户组的用户数量。此信息也在特殊:统计信息 - 用户统计中显示。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofadmins - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFADMINS}}
示例
{{NUMBEROFADMINS}}
→ 19
NUMBEROFARTICLES
有效内容页面的数量。MediaWiki原生支持。
有效内容页面:主命名空间中带有链接的非重定向页面。
此信息也在特殊:统计信息 - 页面统计中显示。
在MW 1.17 及更早版本中,还需要带有至少一个逗号。
- 官方文档:Help:Magic words - Statistics
- 相关文档
- 完整文档:帮助:解析函数/numberofarticles - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFARTICLES}}
示例
{{NUMBEROFARTICLES}}
→ 173
NUMBEROFEDITS
总编辑次数。MediaWiki原生支持。
此信息也在特殊:统计信息 - 编辑统计中显示。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofedits - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFEDITS}}
示例
{{NUMBEROFEDITS}}
→ 18,543
NUMBEROFFILES
文件数量。MediaWiki原生支持。
此信息也在特殊:统计信息 - 页面统计中显示。
在BWiki,此统计约等于图片数量。目前上传文件仅限图片,较老的wiki可能会存在非图片文件。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberoffiles - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFFILES}}
示例
{{NUMBEROFFILES}}
→ 200
NUMBEROFPAGES
页面数量。MediaWiki原生支持。
Wiki中所有命名空间的总页面数量,包括讨论、重定向、图片页面等等。此信息也在特殊:统计信息 - 页面统计中显示。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofpages - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFPAGES}}
示例
{{NUMBEROFPAGES}}
→ 2,177
NUMBEROFPAGEVIEWS
【已弃用MediaWiki版本: 1.14 - 1.24 可用】。MediaWiki原生支持。
原用于显示页面浏览次数。但由于BWiki额外的CDN和缓存层,大部分访问不会纳入此统计,所以此变量通常低于实际浏览量,没有参考价值。
相应的,特殊:统计信息中的「最多查看页面」数据也不准确。
- 完整文档:帮助:解析函数/numberofpageviews - 底层代码
语法
{{NUMBEROFPAGEVIEWS}}
示例
{{NUMBEROFPAGEVIEWS}}
→ 1,221
NUMBEROFUSERS
注册用户数量。MediaWiki原生支持。
此信息也在特殊:统计信息 - 用户统计中显示。
登录B站的用户首次访问某一个BWiki站点时,会自动创建账号和登录(每个BWiki站点的用户和权限都是独立控制的)。所以此变量等价于访问过某一Wiki的B站用户数。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofusers - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFUSERS}}
示例
{{NUMBEROFUSERS}}
→ 9,805,836{{NUMBEROFUSERS:R}}
→ 9805836
NUMBEROFVIEWS
【已弃用MediaWiki Version: 1.14 – 1.24】。MediaWiki原生支持。
原用于获取站点浏览量。但由于BWiki额外的CDN和缓存层,大部分访问不会纳入此统计,所以此变量通常低于实际浏览量,没有参考价值。
此信息也在特殊:统计信息 - 查看统计中显示,同样会低于实际浏览量。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofviews - 底层代码
语法
{{NUMBEROFVIEWS}}
示例
{{NUMBEROFVIEWS}}
→ 3,419,495
O
or
返回两个参数中首个非空值。出自扩展 ParserPower。
在2020年5月10日后的版本中,支持任意多个参数(目前BWiki部署的版本仅支持两个参数)
- 官方文档:Extension:ParserPower Basic functions and tags
- 完整文档:帮助:解析函数/or - 更多示例、背景知识、底层代码和实战用例
语法
{{#or: 参数1 | 参数2}}
示例
{{#or: a | b }}
→a
{{#or: | b }}
→b
{{#or: {{{1|}}}| {{{2|默认值}}} }}
→默认值
(等价于{{{1|{{{2|默认}}}}}}
){{#vardefine:a}}{{#vardefine:b|2333}}{{#or: {{#var:a}} | {{#var:b}} }}
→2333
P
padleft
从左侧填充字符串。MediaWiki原生支持。
将指定字符串填充到原字符串的左侧,直到达到要求的长度。支持多字节字符(如中文)并确保安全处理Unicode。
也可用于从左侧截取字符串,或重复指定文本
- 官方文档:MediaWiki文档
- 完整文档:帮助:解析函数/padleft - 更多示例、背景知识、底层代码和实战用例
语法
{{padleft: 原字符串 | 目标长度 | 填充字符串 }}
- 原字符串:需要被填充的字符串
- 目标长度:填充后的总字符数(最大500)
- 填充字符串(可选):用于填充的字符串,默认为"0"
填充时会循环使用填充字符串直到达到目标长度。如果原字符串已长于目标长度,则不做任何处理。
示例
- 默认填0
{{padleft: xyz | 5 }}
→ 00xyz - 中文填充
{{padleft: 啊哈 | 5 | 填充 }}
→ 填充填啊哈 - 超长原文
{{padleft: 这个字符串太长了 | 5 | 填 }}
→ 这个字符串太长了 - 截断填充
{{padleft: | 3 | abcde }}
→ abc - 重复输出
{{padleft: | {{#expr:{{#len: abc }} * 3 }} | abc }}
→ abcabcabc
padright
从右侧填充字符串。MediaWiki原生支持。
将指定字符串填充到原字符串的右侧,直到达到要求的长度。支持多字节字符(如中文)并确保安全处理Unicode。
也可用于从右侧截取字符串,或重复指定文本。
与padright相同,只是填充方向相反,当原字符串为空时,这两个函数的行为一致。
- 官方文档:MediaWiki文档
- 完整文档:帮助:解析函数/padright - 更多示例、背景知识、底层代码和实战用例
语法
{{padright: 原字符串 | 目标长度 | 填充字符串 }}
- 原字符串:需要被填充的字符串
- 目标长度:填充后的总字符数(最大500)
- 填充字符串(可选):用于填充的字符串,默认为"0"
填充时会循环使用填充字符串直到达到目标长度。如果原字符串已长于目标长度,则不做任何处理。
示例
- 默认填0
{{padright: xyz | 5 }}
→ xyz00 - 中文填充
{{padright: 啊哈 | 5 | 填充 }}
→ 啊哈填充填 - 超长原文
{{padright: 这个字符串太长了 | 5 | 填 }}
→ 这个字符串太长了 - 截断填充
{{padright: | 3 | abcde }}
→ abc - 重复输出
{{padright: | {{#expr:{{#len: abc }} * 3 }} | abc }}
→ abcabcabc
PAGEID
获取页面ID。MediaWiki原生支持。
页面ID是一个数字,是页面的唯一标识符。
- 官方文档:MediaWiki文档
- 官方文档:Help:Page ID
- 完整文档:帮助:解析函数/pageid - 更多示例、背景知识、底层代码和实战用例
语法
{{PAGEID}}
- 获取当前页面ID
{{PAGEID:页面名称}}
- 获取指定页面ID
示例
{{PAGEID}}
→ 2216{{PAGEID:首页}}
→ 1{{PAGEID:帮助:解析函数}}
→ 2216{{PAGEID:特殊:最近更改}}
→ 0- 构造页面链接
https://wiki.biligame.com/tools/?curid={{PAGEID}}
→ https://wiki.biligame.com/tools/?curid=2216- 注意,BWiki针对此类URL的缓存约半小时
PAGENAME
获取页面名,不带命名空间。MediaWiki原生支持。
- 官方文档:Help:Magic words - Page names
- 完整文档:帮助:解析函数/pagename - 更多示例、背景知识、底层代码和实战用例
语法
{{PAGENAME}}
- 当前页面名
{{PAGENAME: 页面名称}}
- 获取指定页面名称的页面名
示例
{{PAGENAME}}
→ 解析函数{{PAGENAME:帮助:解析函数}}
→ 解析函数
PAGENAMEE
获取页面名,以URL编码,不带命名空间。MediaWiki原生支持。
- 官方文档:Help:Magic words - Page names
- 完整文档:帮助:解析函数/pagenamee - 更多示例、背景知识、底层代码和实战用例
语法
{{PAGENAMEE}}
- 当前页面名
{{PAGENAMEE: 页面名称}}
- 获取指定页面名称的页面名
示例
{{PAGENAMEE}}
→ %E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0 (解析函数){{PAGENAMEE:帮助:解析函数}}
→ %E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0 (解析函数)
PAGESINCATEGORY
【高开销】指定分类的页面数量。MediaWiki原生支持。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/pagesincategory - 更多示例、背景知识、底层代码和实战用例
语法
{{PAGESINCATEGORY: 分类名 | 选项 }}
- 分类名:获取此分类的页面数量
- 选项(可选):以下值中的一个
- all 默认,分类中的所有页面
- pages 仅普通页面(不包括子分类和文件)
- subcats 仅子类别
- files 仅文件
示例
{{PAGESINCATEGORY: 解析函数 }}
→ 21{{PAGESINCATEGORY: 解析函数 | files }}
→ 0{{PAGESINCATEGORY: 热力图 | all }}
→ 696{{PAGESINCATEGORY: 热力图 | all | R }}
→ 696{{PAGESINCATEGORY: 热力图 | R | all }}
→ 696
PAGESIZE
获取指定页面的大小。MediaWiki原生支持。
- 官方文档:Help:Magic words - Technical metadata of another page
- 完整文档:帮助:解析函数/pagesize - 更多示例、背景知识、底层代码和实战用例
语法
{{PAGESIZE: 页面名 }}
- 页面名:指定一个页面获取其大小(byte size)
{{PAGESIZE: 页面名 | R }}
- 不格式化结果数字(无逗号分隔符)
示例
{{PAGESIZE: 帮助:解析函数 }}
→ 14,024{{PAGESIZE: 帮助:解析函数 | R }}
→ 14024{{PAGESIZE: 帮助:不存在的页面23333333}}
→ 0
plural
语言复数判断。MediaWiki原生支持。
根据条件使用指定的单数/复数形式,条件为 1 / -1 时判定为单数。
- 官方文档:Help:Magic words - Localization functions
- 完整文档:帮助:解析函数/plural - 更多示例、背景知识、底层代码和实战用例
语法
{{plural: 条件wikitext | 单数文本 | 复数文本 }}
- 条件wikitext:用于判断单复数的条件wikitext,其结果应为数字
- 单数文本:条件wikitext的展开结果为为 1 / -1 时,输出的文本
- 复数文本:非单数情况输出的文本
以上参数描述为默认语言设置。部分语言有更多种复数形式,请参考官方文档和translatewiki.net上的相关文档Plura in MediaWiki。
示例
{{plural: 1 | is | are }}
→ is{{plural: -1 | is | are }}
→ is{{plural: -2 | is | are }}
→ are{{plural: 0 | is | are }}
→ are{{plural: 2 | is | are }}
→ are
pos
字符串搜索。出自扩展 ParserFunctions 的String functions大规模使用时性能低下,推荐使用Lua模块。请参考扩展置顶警告和MediaWiki代码库 r51497中的暴论“parsers in the ugliest, most inefficient programming language known to man: MediaWiki wikitext with ParserFunctions.”、“WARNING: enabling this may have an adverse impact on the sanity of your users.”。
返回指定字符串首次出现的位置,区分大小写。没有找到结果时返回空字符串。搜索时,无视字符串中的nowiki标签和其他解析器扩展标签。
- 官方文档:Extension:ParserFunctions - String functions
- 完整文档:帮助:解析函数/pos - 更多示例、背景知识、底层代码和实战用例
语法
{{#pos: 字符串 | 搜索目标 | 偏移量 }}
- 字符串:被搜索的内容,其中的nowiki标签和解析器扩展标签会被无视,即先移除后搜索。
- 搜索目标:要在字符串中搜索的目标,默认空格
- 偏移量(可选):指定搜索的起始位置,用于跳过若干字符
示例
{{#pos: Wins Come All Day | Come }}
→ 5{{#pos: Wins Come All Day }}
→ 4 (查询目标默认为空格){{#pos: endless wins | e }}
→ 0{{#pos: endless wins | e | 2 }}
→ 4{{#pos: <a>赢</a>而不麻 | 麻 }}
→ 2 (扩展标签及其内容会被忽略){{#pos: 陈睿吃花椒 | 花椒 }}
→ 3
PROTECTIONEXPIRY
查询页面的保护到期时间。MediaWiki原生支持。
指定其他页面时,此函数是【高开销】的。
当页面指定保护时间时返回时间,否则未保护的页面和永久保护的页面均返回 infinity。不存在的页面和无效的操作参数返回空字符串。
- 官方文档:Help:Magic words
- 完整文档:帮助:解析函数/protectionexpiry - 更多示例、背景知识、底层代码和实战用例
语法
{{PROTECTIONEXPIRY: 操作 }}
- 操作:要查询的页面操作,如edit、move
{{PROTECTIONEXPIRY: 操作 | 页面名 }}
- 【高开销】操作:页面操作,如edit、edit
示例
{{PROTECTIONEXPIRY: edit }}
→infinity
(本页面没有保护){{PROTECTIONEXPIRY: move }}
→infinity
(本页面没有保护){{PROTECTIONEXPIRY: edit | 不存在的页面233333 }}
→{{PROTECTIONEXPIRY: move | 不存在的页面233333 }}
→{{PROTECTIONEXPIRY: edit | 保护页面示例 }}
→infinity
(本页面无限期保护){{PROTECTIONEXPIRY: move | 保护页面示例 }}
→infinity
(本页面无限期保护){{PROTECTIONEXPIRY: edit | 保护页面示例/有期限的 }}
→20990908160000
{{PROTECTIONEXPIRY: move | 保护页面示例/有期限的 }}
→20990908160000
{{PROTECTIONEXPIRY: abcdefg | 保护页面示例 }}
→
PROTECTIONLEVEL
查询页面保护级别。MediaWiki原生支持。
查询非当前页面时,是【高开销】函数。
- 官方文档:Help:Magic words
- 完整文档:帮助:解析函数/protectionlevel - 更多示例、背景知识、底层代码和实战用例
语法
{{PROTECTIONLEVEL: 操作 }}
- 操作:如move、edit。查询当前页面的保护级别
{{PROTECTIONLEVEL: 操作 | 页面名 }}
- 页面名:查询指定页面的保护级别【高开销】
返回结果为autoconfirmed
、sysop
或空字符串(未受保护)。超过高开销函数次数限制后,其返回结果是空字符串。
在BWiki中,Lv2以上的B站用户会被自动授予 autoconfirmed 用户组,因此只有“仅允许管理员”的页面保护是有意义的。
示例
{{PROTECTIONLEVEL: edit }}
→{{PROTECTIONLEVEL: move }}
→{{PROTECTIONLEVEL: edit | 保护页面示例 }}
→ sysop(这是个被永久保护的页面){{PROTECTIONLEVEL: move | 保护页面示例 }}
→ sysop
Q
queryformlink
查询表单入口。提供一个链接,跳转到指定表单的查询页面。出自扩展 Page Forms。
s
与{{特殊:执行查询/一个表单名称}}
略有不同,queryformlink可以指定更多参数。
请参阅官方文档:Extension:Page Forms/Creating query forms
语法
{{#queryformlink:form=查询表单名}}
{{#queryformlink:form=|link text=|link type=|query string=|tooltip=|popup}}
R
rel2abs
将相对路径转换为绝对路径。出自扩展 ParserFunctions。
- 官方文档:Help:Extension:ParserFunctions
- 完整文档:帮助:解析函数/rel2abs - 更多示例、背景知识、底层代码和实战用例
语法
{{#rel2abs: 相对路径 }}
或
{{#rel2abs: 相对路径 | 基础路径 }}
- 相对路径:要转换的路径,支持标准路径语法
- 基础路径(可选):作为参考的基础路径,默认为当前页面标题
说明
- 路径语法:
.
表示当前路径级别..
表示上一级路径/foo
表示进入子目录foo
多余的/
和.
会被自动清理。
如果路径尝试访问根目录之上的层级,会返回错误。
函数#iferror可以捕获此函数的错误。
示例
{{#rel2abs: /quok | Help:Foo/bar/baz }}
→ Help:Foo/bar/baz/quok{{#rel2abs: ../quok | Help:Foo/bar/baz }}
→ Help:Foo/bar/quok{{#rel2abs: ../../quok | Help:Foo/bar/baz }}
→ Help:Foo/quok{{#rel2abs: ../../../quok | Help:Foo/bar/baz }}
→ quok{{#rel2abs: ../../../../quok | Help:Foo/bar/baz }}
→ 错误:无效路径深度:“Help:Foo/bar/baz/../../../../quok”(尝试访问根节点以上节点){{#iferror: {{#rel2abs: ../../../../quok | Help:Foo/bar/baz }} | 出错了 | 正常 }}
→ 出错了
#replace
文本替换。出自扩展 ParserFunctions。
- 官方文档:英文文档
- 完整文档:帮助:解析函数/replace - 更多示例、背景知识、底层代码和实战用例
语法
{{#replace: 字符串 | 搜索项 | 替换项 | 替换次数 }}
- 字符串:要进行替换操作的原始文本,区分大小写
- 搜索项(可选):要查找的文本,默认为空格
- 替换项(可选):替换后的文本,默认为空字符串(即删除匹配项)
- 替换次数(可选):最大替换次数,默认为无限制
搜索项和替换项的最大长度受系统配置限制,扩展默认值是1000
参数首尾的空格会被移除,参数中的扩展标签也会被移除。如需在参数首尾使用空格,需要配合<nowiki/>
标签使用,如<nowiki/> balabala
,<nowiki/> <nowiki/>
示例
{{#replace:Hello world|world|Wiki}}
→ Hello Wiki{{#replace:Banana|a|o}}
→ Bonono{{#replace:No_spaces_here|_|<nowiki> </nowiki>}}
→ Nospaceshere{{#replace:No_spaces_here|_|<nowiki>-</nowiki>}}
→ Nospaceshere{{#replace:No_spaces_here|_|<nowiki/> <nowiki/>}}
→ No spaces here(由于nowiki和其他扩展标签会被移除,只能使用自闭合的nowiki标签防止空格被移除){{#replace:Remove all spaces}}
→ Removeallspaces
REVISIONDAY
获取指定页面最后一次修订的日期中的"日"部分(1-31,不带前导零)。出自扩展 ParserFunctions。
注意,页面保存后,其缓存时间无上限,不会自动刷新。因此时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki官方文档
- 完整文档:帮助:解析函数/REVISIONDAY - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONDAY}}
(当前页面)
{{REVISIONDAY:页面名称}}
(指定页面,高开销)
- 页面名称(可选):要查询的页面标题,默认为当前页面。不存在的页面返回空字符串
示例
{{REVISIONDAY}}
→5
(显示当前页面的最后修订日){{REVISIONDAY:首页}}
→24
{{REVISIONDAY:模板:面包屑}}
→29
{{REVISIONDAY:不存在的页面}}
→
REVISIONDAY2
获取指定页面最后一次修订的日期中的"日"部分(01-31,带前导零)。出自扩展 ParserFunctions。
注意,页面保存后,其缓存时间无上限,不会自动刷新。因此时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki官方文档
- 完整文档:帮助:解析函数/REVISIONDAY2 - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONDAY2}}
(当前页面)
{{REVISIONDAY2:页面名称}}
(指定页面,高开销)
- 页面名称(可选):要查询的页面标题,默认为当前页面。不存在的页面返回空字符串
示例
{{REVISIONDAY2}}
→05
(显示当前页面的最后修订日){{REVISIONDAY2:首页}}
→24
{{REVISIONDAY2:模板:面包屑}}
→29
{{REVISIONDAY2:不存在的页面}}
→
REVISIONID
获取指定页面的最新修订版本ID。修订ID是MediaWiki为每次编辑分配的唯一数字标识,数值越大代表编辑时间越新。MediaWiki原生支持。
注意,由于wikitext有缓存,本函数的结果会被缓存(暂时保存)。即使其他页面更新(最新修订ID变化),其缓存结果也不会自动刷新。
- 官方文档:MediaWiki魔术字文档
- 完整文档:帮助:解析函数/REVISIONID - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONID}}
- 当前页面的修订ID{{REVISIONID:页面名称}}
- 指定页面的修订ID(高开销)
示例
{{REVISIONID}}
→52134
{{REVISIONID:首页}}
→52495
{{REVISIONID:不存在的页面}}
→
REVISIONMONTH
获取指定页面最新修订版本的月份(带前导零的两位数格式,如06)。MediaWiki原生支持。
注意,由于页面缓存,时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki魔法字
- 完整文档:帮助:解析函数/REVISIONMONTH - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONMONTH}}
当前页面最新修订日期的月份{{REVISIONMONTH:页面名}}
指定页面最新修订日期的月份(高开销)
示例
{{REVISIONMONTH}}
→07
{{REVISIONMONTH:首页}}
→08
REVISIONMONTH1
获取指定页面最新修订版本的月份(没有前导零,如6)。MediaWiki原生支持。
注意,由于页面缓存,时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki魔法字
- 完整文档:帮助:解析函数/REVISIONMONTH1 - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONMONTH1}}
当前页面最新修订日期的月份{{REVISIONMONTH1:页面名}}
指定页面最新修订日期的月份(高开销)
示例
{{REVISIONMONTH1}}
→7
{{REVISIONMONTH1:首页}}
→8
REVISIONTIMESTAMP
获取指定页面最后一次编辑的时间戳(格式:YYYYMMDDHHMMSS)。时间戳基于本地服务器时间。MediaWiki原生支持。
注意,由于页面缓存,时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki ParserFunctions
- 完整文档:帮助:解析函数/REVISIONTIMESTAMP - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONTIMESTAMP}}
本页编辑时间戳{{REVISIONTIMESTAMP:页面名称}}
指定页面页编辑时间戳(高开销)
示例
- 获取当前页面最后编辑时间:
{{REVISIONTIMESTAMP}}
→ 20250705142649 - 获取"首页"的最后编辑时间:
{{REVISIONTIMESTAMP:首页}}
→ 20250824164157 - 无法实现的功能示例:
{{#ifexpr: {{REVISIONTIMESTAMP}} < 20230101000000 | 此内容可能已过期 | 内容相对较新 }}
- 由于页面缓存,当页面在指定日期后仍未刷新缓存,页面可能永远显示“相对较新”
REVISIONUSER
获取指最后修订的用户名(B站用户ID)。MediaWiki原生支持。
因为BWIKI与B站账号互通,首次访问某wiki时,系统会自动在对应wiki创建以bid为用户名的用户,因此对于所有BWIKI上的站点,用户的用户名都是bid。 (需要注意,BWIKI职员/管理账号、导入的编辑可能会出现非bid、非数字的用户名)
- 官方文档:MediaWiki ParserFunctions
- 完整文档:帮助:解析函数/REVISIONUSER - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONUSER}}
{{REVISIONUSER:页面名}}
(高开销)- 页面名(可选):要查询的页面标题。如果省略,则默认为当前页面。
如果页面不存在或无法访问,将返回空字符串;对于被删除的修订或匿名编辑,可能返回空字符串或IP地址
示例
{{REVISIONUSER}}
→ 39886146{{REVISIONUSER:帮助}}
→ 返回"帮助"页面的最后编辑者{{REVISIONUSER:不存在的页面}}
→ (空字符串)
REVISIONYEAR
获取指定页面最近修订年份(4位数字格式)。MediaWiki原生支持。
注意,由于页面缓存,时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:ParserFunctions#revisionyear
- 完整文档:帮助:解析函数/REVISIONYEAR - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONYEAR}}
当前页面修订年份{{REVISIONYEAR:页面名}}
指定页面,高开销
示例
{{REVISIONYEAR}}
→ 2025{{REVISIONYEAR:首页}}
→ 2025
rmatch
基于正则表达式匹配文本。出自扩展 RegexFunctions。
支持捕获组引用,如果匹配成功 $#
和 \#
包含捕获的文本。如果您想要一个组后跟另一个数字,请使用 ${#}#
,#
为数字。
- 官方文档:Extension:RegexFunctions
- 完整文档:帮助:解析函数/rmatch - 更多示例、背景知识、底层代码和实战用例
语法
{{#rmatch:string|pattern|then|else}}
- string(必需):要匹配的文本
- pattern(必需):正则表达式模式(空格敏感)
- then(可选):匹配成功时返回的文本,可使用
$1
、\1
或${1}1
引用捕获组 - else(可选):匹配失败时返回的文本(默认为空)
示例
{{#rmatch:Hello|H.*|匹配成功|失败}}
→ 匹配成功{{#rmatch:ABC123|([A-Z]+)|大写字母:$1}}
→ 大写字母:ABC{{#rmatch:测试|\\d+|有数字|无数字}}
→ 无数字
ROOTPAGENAME
获取指定页面的根页面名称(去除命名空间和子页面路径)。MediaWiki原生支持。
- 官方文档:Help:Magic_words - Page_names
- 完整文档:帮助:解析函数/ROOTPAGENAME - 更多示例、背景知识、底层代码和实战用例
语法
{{ROOTPAGENAME:页面名称}}
默认为当前页面
示例
{{ROOTPAGENAME}}
→ 解析函数(当前页面的根名称){{ROOTPAGENAME:帮助:标题/子页面}}
→ 标题{{ROOTPAGENAME:帮助:标题/子页面/子页面}}
→ 标题{{ROOTPAGENAME:分类:示例分类}}
→ 示例分类
ROOTPAGENAMEE
获取指定页面的根页面名称,并以URL编码。MediaWiki原生支持。
- 官方文档:Help:Magic_words - Page_names
- 完整文档:帮助:解析函数/ROOTPAGENAMEE - 更多示例、背景知识、底层代码和实战用例
语法
{{ROOTPAGENAMEE:页面名称}}
默认为当前页面
示例
{{ROOTPAGENAMEE}}
→%E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0
(解析函数){{ROOTPAGENAMEE:帮助:标题/子页面}}
→%E6%A0%87%E9%A2%98
(标题){{ROOTPAGENAMEE:帮助:标题/子页面/子页面}}
→%E6%A0%87%E9%A2%98
(标题){{ROOTPAGENAMEE:分类:示例分类}}
→%E7%A4%BA%E4%BE%8B%E5%88%86%E7%B1%BB
(示例分类)
rpos
返回字符串中目标子串的最后出现位置。出自扩展 ParserFunctions 的String functions大规模使用时性能低下,推荐使用Lua模块。请参考扩展置顶警告和MediaWiki代码库 r51497中的暴论“parsers in the ugliest, most inefficient programming language known to man: MediaWiki wikitext with ParserFunctions.”、“WARNING: enabling this may have an adverse impact on the sanity of your users.”。
从0开始计数,未找到时返回-1。
- 官方文档:Extension:ParserFunctions - String functions
- 完整文档:帮助:解析函数/rpos - 更多示例、背景知识、底层代码和实战用例
语法
{{#rpos: 字符串 | 搜索目标 }}
- 字符串:被搜索的文本
- 搜索目标:要查找的子串(空字符串将自动转换为空格)
特性
- 从右向左搜索
- 区分大小写
- 支持UTF-8多字节字符
- 对<nowiki>标签等扩展标记按长度0处理
- 搜索目标长度受$wgStringFunctionsLimitSearch配置限制
示例
{{#rpos: 这是长字串 | 字串 }}
→ 3{{#rpos: 这是长字串长 | 长 }}
→ 5{{#rpos: Žmržlina | lina }}
→ 4{{#rpos: <nowiki>test</nowiki> | test }}
→ -1{{#rpos: 测试文本 | 无匹配 }}
→ -1
rreplace
基于正则表达式的文本替换。出自扩展 RegexFunctions。
- 官方文档:Extension:RegexFunctions
- 完整文档:帮助:解析函数/rreplace - 更多示例、背景知识、底层代码和实战用例
语法
{{#rreplace:源字符串|正则表达式|替换文本}}
- 源字符串:要处理的文本
- 正则表达式:匹配模式(区分大小写和空格)
- 替换文本:替换内容,支持捕获组引用(
\1
或${1}
)
示例
{{#rreplace:Hello World|World|Wiki}}
→ Hello Wiki{{#rreplace:bilibiliBWIKIbilibili|(b{{!}}l)|replacement=<span style="color:red">\1</span>}}
→ bilibiliBWIKIbilibili (把b和l处理成红色标记){{#rreplace:bilibiliBWIKIbilibili|(KI)|replacement=<span style="color:red">${1}1</span>}}
→ bilibiliBWIKI1bilibili(把KI替换成了KI1并标红)
rsplit
基于正则表达式分割字符串。出自扩展 RegexFunctions。
- 官方文档:Extension:RegexFunctions
- 完整文档:帮助:解析函数/rreplace - 更多示例、背景知识、底层代码和实战用例
语法
{{#rsplit:源字符串|正则表达式|片段序号}}
- 源字符串:待分割的原始字符串
- 正则表达式:分隔匹配模式(区分大小写和空格)
- 片段序号(可选):返回的片段索引(负数序号代表反向位置)
示例
{{#rsplit:One Two Three Four|\s+}}
→ One{{#rsplit:One Two Three Four|\s+|1}}
→ Two{{#rsplit:One Two Three Four|\s+|-1}}
→ Four
S
seo
设置页面的SEO元数据,包括HTML标题、搜索引擎指令和社交媒体卡片信息。出自扩展 WikiSEO。
- 官方文档:Extension:WikiSEO
- 完整文档:帮助:解析函数/seo - 更多示例、背景知识、底层代码和实战用例
语法
{{#seo:|可选参数=值|...}}
- title:设置HTML页面标题,影响搜索引擎结果和社交媒体分享。也会设置meta og:title(
<meta property="og:title" content="指定的title"/>
) - title_mode:标题修改模式(replace 替换,默认值;prepend 前置;append 追加)
- title_separator:标题分隔符(默认"-"),当标题修改模式为前置/追加时,使用的分隔符
- keywords:页面关键词(逗号分隔)。部分搜索引擎收录页面时会参考。(会向页面添加
<meta name="keywords" content="页面关键词"/>
) - description:页面描述。部分搜索引擎收录页面时会参考。(会向页面添加
<meta name="description" content="页面描述"/>
)
OpenGraph相关参数。参阅ogp.me。共享到社交媒体时,提供额外的信息。
- image:社交媒体卡片图片(og:image),本地文件名或URL。分享时,社媒通常会优先使用此图片展示分享内容
- image_alt:图片描述(og:image:alt)
- image_width 和 image_height:图片宽高(og:image:width、og:image:height),以像素为单位。如果设置了image,这两个属性会自动设置
- type:内容类型(og:type),常见值:website / article / video.movie / music.song / book
- type=article时,支持参数
- author:作者
- section:本内容所在章节
- published_time:发布时间(ISO 8601格式,如2012-01-25)
- locale:OpenGraph相关参数使用的语言(og:locale),如"en-US"
- site_name:网站名,仅用于 og:site_name
爬虫相关参数
- robots:搜索引擎爬虫指令(如"noindex,nofollow")。部分搜索引擎不会遵循。
- googlebot:谷歌搜索引擎爬虫指令(如"noindex,nofollow")。
- hreflang_xx-xx: 告诉搜索引擎当前页面有其他语言或针对不同地区的版本,xx-xx是语言代码。相当于为页面添加
<link rel="alternate" href="url" hreflang="xx-xx">
引用相关参数(Citation generator)
- 由于BWiki没有启用,相关参数无效。有需要请参考官方文档
示例
{{#seo:|title=自定义标题|description=页面描述}}
→ 设置独立标题和描述{{#seo:|title=前缀|title_mode=prepend|title_separator=-}}
→ 生成"前缀-原标题"格式- 多参数使用
{{#seo:
|title=Tools Wiki_BWIKI_哔哩哔哩
|title_mode=replace
|keywords=bwiki, bwiki文档, 解析函数, 模板, 小工具,mediawiki
|description=由BWiki平台用户编辑维护,这个非官方社区提供BWiki常用的模板、组件、文档。交流群可互助答疑。
|image=Tools_icon.png
}}
set
出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
灰机Wiki文档:
SMW官方文档:
set_recurring_event
出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
循环事件。按指定周期重复的时间,比如周会、生日等。
SMW官方文档:
show
出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
灰机Wiki文档:
smwdoc
出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
生成smw查询结果格式的文档。如{{#smwdoc:table |parameters=all }}
SMW官方文档:
special
获取特殊页面在当前语言中的完整标题。MediaWiki原生支持。
- 官方文档:Help:Magic_words - Miscellaneous
- 完整文档:帮助:解析函数/special - 更多示例、背景知识、底层代码和实战用例
语法
{{#special: 特殊页面名称 }}
- 特殊页面名称:特殊页面的英文名称或本地化名称
示例
{{#special: ask }}
→特殊:询问
{{#special: specialpages }}
→特殊:特殊页面
{{#special: ExpandTemplates }}
→特殊:展开模板
{{#special: 2333 }}
→特殊:2333
(不存在的特殊页面)
speciale
获取特殊页面在当前语言中的完整标题(URL编码)。MediaWiki原生支持。
- 官方文档:Help:Magic_words - Miscellaneous
- 完整文档:帮助:解析函数/speciale - 更多示例、背景知识、底层代码和实战用例
语法
{{#speciale: 特殊页面名称 }}
- 特殊页面名称:特殊页面的英文名称或本地化名称
示例
{{#speciale: ask }}
→%E7%89%B9%E6%AE%8A:%E8%AF%A2%E9%97%AE
{{#speciale: specialpages }}
→%E7%89%B9%E6%AE%8A:%E7%89%B9%E6%AE%8A%E9%A1%B5%E9%9D%A2
{{#speciale: ExpandTemplates }}
→%E7%89%B9%E6%AE%8A:%E5%B1%95%E5%BC%80%E6%A8%A1%E6%9D%BF
{{#speciale: 2333 }}
→%E7%89%B9%E6%AE%8A:2333
(不存在的特殊页面){{#speciale: 不存在的特殊页面 }}
→%E7%89%B9%E6%AE%8A:%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E7%89%B9%E6%AE%8A%E9%A1%B5%E9%9D%A2
(不存在的特殊页面)
sub
返回指定字符串的子串。支持UTF-8多字节字符处理,并兼容MediaWiki标签语法。出自扩展 ParserFunctions。
- 官方文档:Extension:ParserFunctions - sub
- 完整文档:帮助:解析函数/sub - 更多示例、背景知识、底层代码和实战用例
语法
{{#sub: 字符串 | 起始位置 | 长度 }}
- 字符串:要截取的目标字符串
- 起始位置:截取起始位置(0为首字符)。负值表示从末尾倒数
- 长度(可选):截取长度。正值表示最大长度,负值表示从末尾忽略的字符数
示例
{{#sub:Icecream|3}}
→ cream{{#sub:Icecream|0|3}}
→ Ice{{#sub:Icecream|-3}}
→ eam{{#sub:Icecream|3|3}}
→ cre{{#sub:Icecream|3|-3}}
→ cr{{#sub:Žmržlina|3}}
→ žlina{{#sub:<nowiki>This is a </nowiki>test|1}}
→ est
SUBJECTPAGENAME
获取讨论页面对应的主页面完整名称(包含命名空间)。MediaWiki原生支持。
- 官方文档:Help:Magic_words - Page_names
- 完整文档:帮助:解析函数/SUBJECTPAGENAME - 更多示例、背景知识、底层代码和实战用例
语法
{{SUBJECTPAGENAME}}
{{SUBJECTPAGENAME: 页面名 }}
- 页面名(可选):要转换的讨论页面名称,默认为当前页面
示例
{{SUBJECTPAGENAME: 讨论:帮助文档 }}
→ 帮助文档{{SUBJECTPAGENAME: 用户讨论:示例用户 }}
→ 用户:示例用户- 在"文件讨论:示例.jpg"页面中使用
{{SUBJECTPAGENAME}}
→ 文件:示例.jpg
SUBJECTPAGENAMEE
获取讨论页面对应的主页面完整名称(包含命名空间)。MediaWiki原生支持。
- 官方文档:Help:Magic words - Page names
- 完整文档:帮助:解析函数/SUBJECTPAGENAMEE - 更多示例、背景知识、底层代码和实战用例
语法
{{SUBJECTPAGENAMEE}}
{{SUBJECTPAGENAMEE: 页面名 }}
- 页面名(可选):要转换的讨论页面名称,默认为当前页面
示例
{{SUBJECTPAGENAMEE: 讨论:帮助文档 }}
→%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3
(帮助文档){{SUBJECTPAGENAMEE: 用户讨论:示例用户 }}
→%E7%94%A8%E6%88%B7:%E7%A4%BA%E4%BE%8B%E7%94%A8%E6%88%B7
(用户:示例用户)- 在"文件讨论:示例.jpg"页面中使用
{{SUBJECTPAGENAMEE}}
→%E6%96%87%E4%BB%B6%3A%E7%A4%BA%E4%BE%8B.jpg
(文件:示例.jpg)
SUBJECTSPACE
获取讨论页对应内容页面的命名空间名称。MediaWiki原生支持。
主命名空间返回空字符串。镜像功能是TALKSPACE。
- 官方文档:Help:Magic words - Namespaces
- 完整文档:帮助:解析函数/SUBJECTSPACE - 更多示例、背景知识、底层代码和实战用例
语法
{{SUBJECTSPACE: 讨论页名称 }}
- 讨论页名称(可选):目标讨论页标题,默认为当前页面
示例
{{SUBJECTSPACE: 帮助讨论:解析函数}}
→帮助
{{SUBJECTSPACE: 讨论:解析函数}}
→(主命名空间返回空字符串)
SUBJECTSPACEE
获取讨论页对应内容页面的命名空间名称,并以URL编码。MediaWiki原生支持。
主命名空间返回空字符串。镜像功能是TALKSPACEE。
- 官方文档:Help:Magic words - Namespaces
- 完整文档:帮助:解析函数/SUBJECTSPACEE - 更多示例、背景知识、底层代码和实战用例
语法
{{SUBJECTSPACEE: 讨论页名称 }}
- 讨论页名称(可选):目标讨论页标题,默认为当前页面
示例
{{SUBJECTSPACEE: 帮助讨论:解析函数}}
→%E5%B8%AE%E5%8A%A9
(帮助){{SUBJECTSPACEE: 讨论:解析函数}}
→(主命名空间返回空字符串)
subobject
出自扩展 Semantic MediaWiki SMW功能强大,应用广泛。<br>如需单页内大量调用,请考虑使用模板、模块批量查询,这能提升综合体验、降低资源消耗。<br>另请参阅灰机、Fandom的相关文档,他们详述了对SMW的顾虑和限制。。
灰机Wiki文档:
SMW官方文档:
SUBPAGENAME
获取页面标题中的子页面部分。MediaWiki原生支持。
- 官方文档:Help:Magic words - Page names
- 完整文档:帮助:解析函数/SUBPAGENAME - 更多示例、背景知识、底层代码和实战用例
语法
{{SUBPAGENAME:页面名}}
- 页面名(可选):要获取子页面名的完整页面标题。默认为当前页面。
示例
{{SUBPAGENAME:Help:Title/foo/bar}}
→ bar- 在"Help:Title/foo"页面使用
{{SUBPAGENAME}}
→ foo
SUBPAGENAMEE
获取页面标题中的子页面部分,并以URL编码。MediaWiki原生支持。
- 官方文档:Help:Magic words - Page names
- 完整文档:帮助:解析函数/SUBPAGENAMEE - 更多示例、背景知识、底层代码和实战用例
语法
{{SUBPAGENAMEE:页面名}}
- 页面名(可选):要获取子页面名的完整页面标题。默认为当前页面。
示例
{{SUBPAGENAMEE:Help:Title/一/二}}
→%E4%BA%8C
(二)- 在"Help:Title/一"页面使用
{{SUBPAGENAMEE}}
→%E4%B8%80
(一)
#switch
多分支条件判断函数,根据输入值匹配不同情况返回对应结果。出自扩展 ParserFunctions。
- 官方文档:Help:Extension:ParserFunctions - #switch
- 完整文档:帮助:解析函数/#switch - 更多示例、背景知识、底层代码和实战用例
语法
{{#switch: 比较值
| 情况1 = 结果1
| 情况2 = 结果2
| ...
| #default = 默认结果
}}
比较值
:待匹配的字符串或表达式情况N = 结果N
:匹配时返回的结果#default
(可选):无匹配时的默认结果- 分组语法:连续多个无等号情况共享下一结果,如:
{{#switch: 比较值 | 情况1=a | 情况2 | 情况3 | 情况4 = 结果234 }}
示例
基础匹配
{{#switch: baz
| foo = Foooooo
| baz = Bazzzzz
| Bar
}}
Bazzzzz
{{#switch: test
| foo = Foo
| #default = 未匹配
}}
未匹配
{{#switch: test
| foo = Foo
| 未匹配
}}
未匹配
分组结果
{{#switch: cat
| dog
| cat
| wolf = 犬科
| lion = 猫科
| 其他
}}
犬科
数值比较
{{#switch: 02
| 2 = 数值匹配
| 02 = 字符匹配
}}
数值匹配
参数处理
{{#switch: {{{1}}} | red = 红色 | blue = {{{1}}} | 未知颜色 }}
→ 参数未定义时返回"未知颜色"
特殊字符处理
- 情况中的等号需转义
{{#switch: a=b
| a{{=}}b = 模板转义
| a=b = HTML转义
}}
模板转义
T
tag
生成一个XML标签,可以设定其标签类型、内文和属性。 有时候一些XML标签形式的解析器结构(即解析器扩展标签),不会解析和运算其内文,导致其无法在模板中使用或配合其他解析器结构使用(如tabber),此时则需要利用tag函数,生成一个内文已经解析了的标签。
MediaWiki原生支持。
- 格式
- {{#tag: 标签名|内容|属性}}
- 例子
- {{#tag: nowiki|这是nowiki里面,→{{padleft:|5|一二}}切运算都有效}}
这是nowiki里面,一二一二一切运算都有效
- {{#tag: ref|这是备注里面,→{{padleft:|5|一二}}切运算都有效|name="tag" group="tag"}}
[tag 1]
- {{#tag: references||group="tag"}}→
↑ 这是备注里面,一二一二一切运算都有效
(内文连一个空格都没有的话,便会生成一个自关闭标签)
talkpagename
在内容页面获取对应的讨论页名(带有命名空间)
MediaWiki原生支持。
- 格式
- {{TALKPAGENAME}}
- {{TALKPAGENAME: 页面名}}
- 例子
- {{TALKPAGENAME}}→
帮助讨论:解析函数
- {{TALKPAGENAME:首页}}→
讨论:首页
- 实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
talkpagenamee
在内容页面获取对应的讨论页名,以URL编码(带有命名空间)
MediaWiki原生支持。
- 格式
- {{TALKPAGENAMEE}}
- {{TALKPAGTALKPAGENAMEEENAME: 页面名}}
- 例子
- {{TALKPAGENAMEE}}→
%E5%B8%AE%E5%8A%A9%E8%AE%A8%E8%AE%BA:%E8%A7%A3%E6%9E%90%E5%87%BD%E6%95%B0
(帮助讨论:解析函数) - {{TALKPAGENAMEE:首页}}→
%E8%AE%A8%E8%AE%BA:%E9%A6%96%E9%A1%B5
(讨论:首页)
talkspace
获取内容页面对应的讨论页面的命名空间名。
MediaWiki原生支持。
- 格式
- {{TALKSPACE}}
- {{TALKSPACE:页面名}}
- 例子
- {{TALKSPACE}}→
帮助讨论
- {{TALKSPACE:首页}}→
讨论
- {{TALKSPACE:模板:=}}→
模板讨论
- 实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
talkspacee
获取内容页面对应的讨论页面的命名空间名,以URL编码。
MediaWiki原生支持。
- 格式
- {{TALKSPACEE}}
- {{TALKSPACEE:页面名}}
- 例子
- {{TALKSPACEE:首页}}→
%E8%AE%A8%E8%AE%BA
(讨论) - {{TALKSPACEE}}→
%E5%B8%AE%E5%8A%A9%E8%AE%A8%E8%AE%BA
(帮助讨论) - {{TALKSPACEE:模板:=}}→
%E6%A8%A1%E6%9D%BF%E8%AE%A8%E8%AE%BA
(模板讨论)
template_display
出自扩展Page Forms。请参阅帮助:PageForms#template_display
template_params
出自扩展Page Forms。请参阅帮助:PageForms#template_params
time
代码 | 说明 | 当前输出值 (清除此页面缓存以更新结果) |
---|---|---|
年 | ||
Y
|
4位数表示的年。 | 2025 |
y
|
2位数表示的年。 | 25 |
L
|
1表示闰年(Leap year),0表示非闰年。 | 0 |
o [注 1]
|
ISO-8601 规定的该周所属年份。[注 2] | 2025[注 3] |
月 | ||
n
|
月份号,无前导零。 | 9 |
m
|
月份号,有前导零。 | 09 |
M
|
月份名称缩写,使用网站语言。(英文结果为 Sep )
|
9月 |
F
|
月份名称全称,使用网站语言。(英文结果为 September )
|
9月 |
xg
|
月份名称全称,使用网站语言的属格(Genitive)形式,注意区分其与主格(Nominative)形式的区别。 这项功能在斯拉夫语族(Slavic languages)中十分重要,如波兰语、俄语、白俄罗斯语、捷克语、斯洛伐克语、斯洛文尼亚语、乌克兰语等。 在中文环境下: |
对于中文:
(主格) {{#time:Y F d|20 June 2010|zh}} → (属格) {{#time:Y xg d|20 June 2010|zh}} → |
周 | ||
W
|
ISO 8601 规定的周数,有前导零。 | 36 |
日 | ||
j
|
月份内的日期号,无前导零。 | 1 |
d
|
月份内的日期号,有前导零。 | 01 |
z
|
年份内的日期号 (1月1日 = 0)。 注意:要获得 ISO 规定的日期号,需加上1。 |
243 |
D
|
星期的缩写。国际上不通用。 | 一 |
l
|
星期的全称。国际上不通用。 | 星期一 |
N
|
ISO 8601 规定的星期编号(星期一 = 1,星期日 = 7)。 | 1 |
w
|
星期编号(星期日 = 0,星期六 = 6)。 | 1 |
时 | ||
a
|
早上为 am (00:00:00 → 11:59:59);其他时间为 pm (12:00:00 → 23:59:59)。
|
am |
A
|
上方 a 的大写形式。
|
AM |
g
|
12小时制的时,无前导零。 | 3 |
h
|
12小时制的时,有前导零。 | 03 |
G
|
24小时制的时,无前导零。 | 3 |
H
|
24小时制的时,有前导零。 | 03 |
分 和 秒 | ||
i
|
小时后的分钟数,有前导零。 | 55 |
s
|
分钟后的秒钟数,有前导零。 | 56 |
U
|
UNIX时间(Unix time)。从格林尼治时间(GMT)1970年1月1日00:00:00开始计的秒钟数。 | 1756698956 |
时区(需 MediaWiki 1.22wmf2) | ||
e
|
时区标识符。 | UTC |
I
|
当前日期是否使用日光节约时间(夏令时)。 | 0 |
O
|
与格林尼治时间(GMT)的时差。 | +0000 |
P
|
与格林尼治时间(GMT)的时差,带有冒号分隔。 | +00:00 |
T
|
时区缩写。 | UTC |
Z
|
以秒计的时差。 | 0 |
杂项 | ||
t
|
当前月份的天数。 | 30 |
c
|
ISO 8601 格式的日期,等价于 Y-m-d"T"H:i:s+00:00 。
|
2025-09-01T03:55:56+00:00 |
r
|
RFC 5322 格式的日期,等价于 D, j M Y H:i:s +0000 ,其中星期名和月份名国际上不通用。
|
Mon, 01 Sep 2025 03:55:56 +0000 |
非公历日历 | ||
伊斯兰历(Islamic calendar),又称 希吉来历(Hijri calendar) | ||
xmj
|
月份内的日期号。 | 8 |
xmF
|
月份名称全称。 | 赖比尔·敖外鲁月 |
xmn
|
月份号。 | 3 |
xmY
|
全长表示的年。 | 1447 |
伊朗历(Iranian calendar),又称 贾拉利历(Jalali calendar) | ||
xij
|
月份内的日期号。 | 10 |
xiF
|
月份名称全称。 | Shahrivar |
xin
|
月份号。 | 6 |
xiY
|
全长表示的年。 | 1404 |
xiy
|
2位数表示的年。 | 04 |
希伯来历(Hebrew calendar) | ||
xjj
|
月份内的日期号。 | 8 |
xjF
|
月份名称全称。 | 以禄月 |
xjt
|
当前月份的天数。 | 29 |
xjx
|
属格形式的月份名称。 | Elul |
xjn
|
月份号。 | 12 |
xjY
|
全长表示的年。 | 5785 |
泰国历(Thai solar calendar) | ||
xkY
|
泰国历的全长表示的年。 注意:公历1941年前的年份,1月到3月的范围内,计算得到的泰国历年份不正确。(原因) |
2568 |
民国纪年(Minguo calender) 朝鲜历(North Korean calendar),又称 主体历(Juche calendar) | ||
xoY
|
全长表示的年。 | 114 |
日本年号(Japanese era name, or Japanese nengo) | ||
xtY
|
全长表示的年(带有年号)。 | 令和7 |
转换标志 | ||
xn
|
将下一个数字代码转换为原始 ASCII 格式数字。 | 在印地语中, {{#time:H, xnH}} 得到的是 ०६, 06 。
|
xN
|
与 xn 功能类似。但它持续起作用到字串末尾,或字串中的下一个 xN 处。
| |
xr
|
将下一个数字代码转换为罗马数字格式。仅对 10,000 以内的数字有效 (MediaWiki 1.20 之前,仅对 3,000 以内的数字有效)。 |
{{#time:xrY}} → MMXXV
|
xh
|
将下一个数字代码转换为希伯来数字格式。 | {{#time:xhY}} → ב'כ"ה
|
将日期和/或时间(公历)按格式字串规定的格式进行转换。
可自行指定日期/时间对象,默认使用魔术字(Magic word)
的值(该值使用世界协调时间,UTC),也就是页面最近一次渲染为HTML的时间。
出自扩展 ParserFunctions。
- 格式
- {{#time: 格式字串}}
- {{#time: 格式字串|日期/时间对象}}
- {{#time: 格式字串|日期/时间对象|语言代码}}
- 在右边的表格中列出了支持的格式控制代码。'格式字串'中的任何不被识别的字符将原样输出,包括空格(系统不用它们来编译代码)。
- 还有两种方法可以使'格式字串'内的字符原样输出:
- 反斜杠
\
后加字符,可以原样输出单个字母: - 一对半角双引号
" "
内的字符被当作文字,会原样输出,不带双引号。
- 反斜杠
- 另外,还可以用
xx
来输出单个字母x
。 - 例子
- {{#time:\m}}→
m
- {{#time:\xg}}→
x3
(x
被原样输出,g
被当作格式控制代码) - {{#time: Y-m-d}}→
2025-09-01
- {{#time:→[[Y]]m d}}
2025 09 01
- {{#time:→[[Y (year)]]}}
2025 (25UTCamMon, 01 Sep 2025 03:55:56 +0000)
(year被当作格式控制代码y
、e
、a
、r
) - {{#time:→[[Y "(year)"]]}}
2025 (year)
- {{#time: i's"}}→
55'56"
- '日期/时间对象'可以使用任何PHP中strtotime()函数支持的格式。可以使用绝对时间(如
20 December 2000
)和相对时间(如+20 hours
):- {{#time: r|now}}→
Mon, 01 Sep 2025 03:55:56 +0000
- {{#time: r|+2 hours}}→
Mon, 01 Sep 2025 05:55:56 +0000
- {{#time: r|now + 2 hours}}→
Mon, 01 Sep 2025 05:55:56 +0000
- {{#time: r|20 December 2000}}→
Wed, 20 Dec 2000 00:00:00 +0000
- {{#time: r|December 20, 2000}}→
Wed, 20 Dec 2000 00:00:00 +0000
- {{#time: r|2000-12-20}}→
Wed, 20 Dec 2000 00:00:00 +0000
- {{#time: r|2000 December 20}}→
错误:无效时间。
- '语言代码'使用的是ISO 639-3标准,可以显示所选语言的时间格式:
- {{#time:d F Y|1988-02-28|nl}}→
28 februari 1988
- {{#time:l|now|uk}}→
понеділок
- {{#time:d xg Y|20 June 2010|pl}}→
20 czerwca 2010
- 译者注:以上三例本wiki内不起作用,因为不支持该语言。
- 如果需要在计算时使用UNIX时间,可以在UNIX时间前加上
@
:- {{#time: U|now}}→
1756698957
- {{#time: r|@1485582296}}→
Sat, 28 Jan 2017 05:44:56 +0000
- 注意:可接受的输入时间范围是0111年1月1日至9999年12月31日。100年到110年的各个格式控制代码的输出不一致:
Y
和L
按照100-110年来计算;但r
、D
、l
和U
是按照2000-2010年来计算的:- {{#time: d F Y|29 Feb 0100}}→
01 3月 0100
- 上面的结果正确,但是:
- {{#time: r|29 Feb 0100}}→
Mon, 01 Mar 0100 00:00:00 +0000
- 上面的结果错误,因为100年不是闰年,但2000年是闰年,上面的结果是按照2000年计算的。
- 超过9999年会得到不正确的结果:
- {{#time: d F Y|15 April 10000}}→
错误:无效时间。
- {{#time: r|10000-4-15}}→
Sat, 15 Apr 2000 10:00:00 +0000
- 0-99年被当作2000-2069年、1970-1999年来处理,除非使用4位数年格式来表示这些年份:
- {{#time: d F Y|1 Jan 6}}→
01 1月 2006
- {{#time: d F Y|1 Jan 06}}→
01 1月 2006
- {{#time: d F Y|1 Jan 006}}→
01 1月 2006
- {{#time: d F Y|1 Jan 0006}}→
01 1月 0006
(使用了4位数年)
星期名称支持100-110年和1753年以后的年份。111-1752年的r
中星期输出为Unknown
,l
的输出为<>
,且这几年的r
输出值不能当作有效的输入值。- 译者注:
- 测试了一些111-1752之间的年份,已经可以正常显示星期,且正确:
- {{#time: r|1 Jan 1600}}→
Sat, 01 Jan 1600 00:00:00 +0000
(应为星期六) - {{#time: r|23 Dec 802}}→
Mon, 23 Dec 0802 00:00:00 +0000
(应为星期一) - 使用日期转换进行验证。
- 可以指定完整的绝对日期,或者是一部分,此函数会将缺少的部分用当前日期的值填补:
- {{#time: Y|January 1}}→
2025
- 注意:填补功能在不同情况下填补不同的内容:
- {{#time: Y m d H:i:s|June}}→
2025 06 01 00:00:00
(使用了一天的开始时刻,填补了当前月份内的日期号、年份) - {{#time: Y m d H:i:s|2003}}→
2003 09 01 00:00:00
(使用了一天的开始时刻,填补了当前年份内的日期号)
- 在MediaWiki r86805之后,4位数字一概会被认为是年份,而非小时与分钟:
- {{#time: Y m d H:i:s|1959}}→
1959 09 01 00:00:00
- 6位数字会被认为是小时、分钟和秒钟,如果得到的时间不正确,则会报错(一概不会当作年份和月份):
- {{#time: Y m d H:i:s|195909}}→
2025 09 01 19:59:09
(被当作时分秒而不是年月) - {{#time: Y m d H:i:s|196009}}→
错误:无效时间。
(即使19:60:09不是正确的时间,196009也不会被当作年月)
- 函数定量计算天数来得到日期:
- {{#time: Y F d|January 0 2008}}→
2007 12月 31
- {{#time: F d|January 32}}→
错误:无效时间。
(一个月超过31天的话,会报错) - {{#time: F d|February 29 2008}}→
2月 29
- {{#time: F d|February 29 2007}}→
3月 01
- {{#time:Y F|now -1 months}}→
2025 8月
#time
中'格式字串'的总长度限制为6000字符。- 关于时区
- 解析函数
#time
中有一个bug(更确切的说是PHP日期时间的bug),不允许传入非整数的相对时差。这个问题在整点时区不会出现,如东部夏令时间(EDT):- {{#time:g:i A|-4 hours}}→
11:55 PM
- 但是,委内瑞拉(委内瑞拉标准时间,VET)与世界协调时间(UTC)的时差是-4.5小时,如果直接输入则不会得到正确的结果,如下:
- {{#time:g:i A|-4.5 hours}}→
12:55 PM
- 可以将时差转换为分钟或者秒钟来解决这个问题:
- {{#time:g:i A|-270 minutes}}→
11:25 PM
- {{#time:g:i A|-16200 seconds}}→
11:25 PM
- (上述方法由此函数开发者 Tim Starling 提供)
timel
与time一致,默认使用当地时间(在'日期/时间对象'留空时)。
出自扩展 ParserFunctions。
- 例子
- {{#time: Y-m-d}}→
2025-09-01
(世界协调时间,UTC) - {{#timel: Y-m-d}}→
2025-09-01
(北京时间,UTC+8) - {{#time: Y F d H:i:s}}→
2025 9月 01 03:55:56
(世界协调时间,UTC) - {{#timel: Y F d H:i:s}}→
2025 9月 01 11:55:56
(北京时间,UTC+8)
titleparts
获取子页面的一部分标题。以“/”分割,返回从指定开始位置,指定长度的标题。
处理时,会按照Wiki标题规则:下划线作为空格处理;HTML字符实体会被转化;页面首字母是大写的。
出自扩展 ParserFunctions。
- 格式
- {{#titleparts: 页面名|数量|开始位置}}
- 例子
- {{#titleparts: 帮助:解析函数/T/titleparts/Code}}→
帮助:解析函数/T/titleparts/Code
- {{#titleparts: 帮助:解析函数/T/titleparts/Code|1}}→
帮助:解析函数
,效果同ROOTPAGENAME。 - {{#titleparts: 帮助:解析函数/T/titleparts/Code|2}}→
帮助:解析函数/T
- {{#titleparts: 帮助:解析函数/T/titleparts/Code|2|2}}→
T/titleparts
- {{#titleparts: 帮助:解析函数/T/titleparts/Code||2}}→
T/titleparts/Code
- 注意
- 段落长度和段落位置均可以使用负数,负数段落长度表示从尾开始去掉该数量的段落,负数段落位置表示从尾开始计算段落位置。
- 例子
- {{#titleparts: 帮助:解析函数/T/titleparts/Code|-1}}→
帮助:解析函数/T/titleparts
,效果同BASEPAGENAME。 - {{#titleparts: 帮助:解析函数/T/titleparts/Code|-4}}→
,去掉的段落数等于段落总数。
- {{#titleparts: 帮助:解析函数/T/titleparts/Code|-5}}→
,去掉的段落数超出了段落总数。
- {{#titleparts: 帮助:解析函数/T/titleparts/Code||-1}}→
Code
,效果同SUBPAGENAME。 - {{#titleparts: 帮助:解析函数/T/titleparts/Code|-1|2}}→
T/titleparts
- {{#titleparts: 帮助:解析函数/T/titleparts/Code|-1|-2}}→
titleparts
- 注意
- 标题字串最多能含有255个半角字符或相应数量的全角字符,就跟正常页面标题一样。最多只会进行25次切割,25次以后的内容会被当作同一个段落处理。
- 例子
- {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee|1|25}}→
y/z/aa/bb/cc/dd/ee
- 注意
- 若标题字串含有标题内禁用的字符,此函数会返回原字串或返回空字串。
- 例子
{{#titleparts: {one/two} | 1 | 1 }}
→{one/two}
- {{#titleparts:→[[沙盒]]/123|1|2}}
沙盒/123
- {{#titleparts: red/#00FF00/blue|1|3}}→
- 实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
- 模板:扭蛋模拟器 - 突击莉莉终结之弹
- 模板:编辑提示 - 白荆回廊
- 模板:碧蓝回忆录/内容 - 碧蓝航线
- 模板:配队表 - 深空之眼
- 模板:誓灵图鉴 - 方舟指令
- 模板:首饰 - 激战2
- 模板:编辑提示 - 幻塔
- 模板:技能 - 梦幻模拟战
- 模板:Str find - 神甲奇兵
token
返回给定的字符串,其中所有出现的搜索词都被替换为替换词。
此功能与 replace 一样,但参数顺序相反。
出自扩展 ParserPower。
- 格式
- {{#token: 替换项|搜索项|源字符串}}
- 例子
- {{#token:Clown piece}}→
Clown piece
- {{#token:→<nowiki> </nowiki>|_|My_little_home_page}}
My little home page
tokenif
出自扩展ParserPower。
trim
出自扩展ParserPower。
trimuesc
出自扩展ParserPower。
U
uc
把输入的字串中所有字母变成大写。
MediaWiki原生支持。
- 格式
- {{uc: wikitext}}
- 例子
- {{uc: qwer脸滚键盘}}→
QWER脸滚键盘
ucfirst
把输入的字串中第一个字母变成大写。
MediaWiki原生支持。
- 格式
- {{ucfirst: wikitext}}
- 例子
- {{ucfirst: qwer脸滚键盘}}→
Qwer脸滚键盘
- {{ucfirst: 你们说的qwer脸滚键盘是什么意思啊}}→
你们说的qwer脸滚键盘是什么意思啊
ueif
出自扩展ParserPower。 参见帮助:ParserPower#ueif
ueifeq
出自扩展ParserPower。 参见帮助:ParserPower#ueifeq
uesc
出自扩展ParserPower。 参见帮助:ParserPower#uesc
uescnowiki
出自扩展ParserPower。 参见帮助:ParserPower#uescnowiki
ueswitch
出自扩展ParserPower。 参见帮助:ParserPower#ueswitch
urldecode
解码URL编码的字符串。
MediaWiki原生支持。
- 格式
- {{#urldecode: 字符串}}
- 例子
- {{#urldecode: ABC%E4%B8%AD%E6%96%87+%E8%8B%B1%E6%96%87+123%26456%2B1%25}}→
ABC中文 英文 123&456+1%
- {{#urldecode: ABC%E4%B8%AD%E6%96%87+%E8%8B%B1%E6%96%87+123%26456%2B1%25}}→
ABC中文 英文 123&456+1%
(用urlencode加QUERY编码的字串) - {{#urldecode: ABC%E4%B8%AD%E6%96%87_%E8%8B%B1%E6%96%87_123%26456%2B1%25}}→
ABC中文_英文_123&456+1%
(用urlencode加WIKI编码的字串) - {{#urldecode: ABC%E4%B8%AD%E6%96%87%20%E8%8B%B1%E6%96%87%20123%26456%2B1%25}}→
ABC中文 英文 123&456+1%
(用urlencode加PATH编码的字串)
urlencode
URL编码指定字符串。
MediaWiki原生支持。
- 格式
- {{urlencode: 字符串}}
- {{urlencode: 字符串|格式}}格式可选 QUERY / WIKI / PATH 。默认为QUERY
- QUERY 空格变为
+
- WIKI 空格变为
_
- PATH 空格变为
%20
- QUERY 空格变为
- 例子
- {{urlencode: ABC中文 英文 123&456+1%}}→
ABC%E4%B8%AD%E6%96%87+%E8%8B%B1%E6%96%87+123%26456%2B1%25
- {{urlencode: ABC中文 英文 123&456+1%|QUERY}}→
ABC%E4%B8%AD%E6%96%87+%E8%8B%B1%E6%96%87+123%26456%2B1%25
- {{urlencode: ABC中文 英文 123&456+1%|WIKI}}→
ABC%E4%B8%AD%E6%96%87_%E8%8B%B1%E6%96%87_123%26456%2B1%25
- {{urlencode: ABC中文 英文 123&456+1%|PATH}}→
ABC%E4%B8%AD%E6%96%87%20%E8%8B%B1%E6%96%87%20123%26456%2B1%25
V
var
输出变量。 变量需要事先用vardefine或vardefineecho定义。
出自扩展 Variables BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
- 格式
- {{#var: 变量名}}
- {{#var: 变量名|默认值}}变量不存在则输出默认值
- 例子
- 先定义变量{{#vardefine: abc|123456}}
- {{#var: count|未定义}}→
未定义
输出不存在的变量count,会获得默认值。 - {{#var: abc|未定义}}→
123456
获取已定义的变量abc。
var_final
【将弃用】输出变量,使用页面解析结束时变量的值。因此,这允许在未定义变量前使用变量。
- 注意
- 在MediaWiki 1.35版本后,var_final被标记为弃用,MediaWiki 1.39版本后将移除。目前,在BWIKI可以使用,灰机Wiki已弃用。
- 由于行为复杂,它可能会出现未预期的表现,容易让代码难以理解和阅读。
出自扩展 Variables BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
- 格式
- {{#var_final: 变量名}}
- {{#var_final: 变量名|默认值}}如果变量未定义,返回默认值
- 例子
- {{#var_final: count233|未定义}}→
谨慎使用Variables
在此处获取在后面代码中才会被定义的count的内容。 - 此处定义 count233:{{#vardefine: count233|谨慎使用Variables}}
- 实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
vardefine
定义变量。即将一个字符串存储到指定变量中,以便于在后续代码中多次使用。此函数不会输出任何内容。
出自扩展 Variables BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
- 格式
- {{#vardefine: 变量名|值}}
- 例子
- {{#vardefine: count|0}}→
定义count变量,值为0
- {{#vardefine: text}}→
定义空变量text
- {{#vardefine: text|新的233}}→
可以重复定义以覆盖已有变量,现在text的值是
新的233
。 - {{#vardefine: text|→{{#var: text}}内容}}
可以使用更复杂的wikitext来为变量赋值,现在text的值是:
新的233内容
。 - {{#vardefine: count|→{{#expr:}}{{#var: count}}+1}}
通过与expr组合,实现计算,现在变量count的内容为
1
。
vardefineecho
定义并输出变量。行为上相当于vardefine和var先后调用。
出自扩展 Variables BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
- 格式
- {{#vardefineecho: 变量名称|内容值(默认为空字串)}}
- 例子
- {{#vardefineecho: text|变量的内容,看到了吗}}→
变量的内容,看到了吗
定义变量同时输出变量内容,现在变量text的内容为“变量的内容,看到了吗”。
- 其他用法
- 配合varexists,实现防止多次加载资源
- {{#if:→{{#varexists:防止多次加载JS_XXX}}||{{#vardefineecho:防止多次加载JS_XXX|这里加载JS}}}}
这里加载JS
避免JS重复加载 - {{#if:→{{#varexists:防止多次加载CSS_XXX}}||{{#vardefineecho:防止多次加载CSS_XXX|这里是CSS内容或加载CSS}}}}
这里是CSS内容或加载CSS
避免CSS重复加载
varexists
判断变量是否存在。存在则返回1,否则返回空。经常配合#if
使用。
出自扩展 Variables BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
- 格式
- {{#varexists: 变量名}}
- 例子
- 先定义变量 varexiststext:{{#vardefine:varexiststext|想吃烤肠}}。
- 判断存在否 {{#varexists: varexiststext}}→
1
- 未定义的变量 {{#varexists: count123465}}→
- 配合if使用 {{#if:→{{#varexists: count123465}}|存在|不存在}}
不存在
W
while
只要循环条件的wikitext输出非空,就循环执行。
- 注意
- 死循环可能导致页面无响应,甚至增加服务器压力。使用请谨慎。
出自扩展 Loops。
- 格式
- {{#while:
|条件
|循环内容
}}
- 例子
- {{#vardefine: i|0}}
- {{#while:→
|{{#ifexpr:{{#var: i}}< 5|true}}
|<nowiki/>
*{{#var: i}}{{#vardefine: i|{{#expr:}}{{#var: i}}+ 1}}
}}
- 0
- 1
- 2
- 3
- 4
- 实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
- 模板:干员 - 明日方舟
- 模板:面包屑 - 明日方舟
- 模板:图鉴/再生者/立绘 - 地下城堡3
- 模板:怪物信息栏 - 古神遗产
- 模板:挑战副本图鉴 - 汉家江湖
- 模板:秘籍图鉴 - 汉家江湖
- 模板:Only - 开普勒斯
- 模板:角色图鉴 - 空之要塞:启航
- 模板:超导体图鉴 - 空之要塞:启航
- 模板:Anvil - 我的世界地下城
widget
- 参考官方文档和其他文档完善内容
- 增加实际用例和技巧
调用小部件(Widgets)。
Widgets允许用户创建HTML页面,能更灵活的为Wiki添加功能。
出自扩展 Widgets。
- 格式
- {{#widget: 小部件名|参数1=值1|参数2=值2|...|参数n=值n}}
- 例子
- 请参见Widgets。
参考资料
- ↑ Hello