帮助:解析函数
本页旨在介绍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: 文本}}
- 完整文档:anchorencode
- 官方文档:帮助:魔术字
- 阮一峰:URL的井号
- MDN文档:什么是 URL?
anchorencode
将文本编码为 HTML 锚点格式。MediaWiki原生支持。
比如把章节名 前言 & 背景 变成有效的锚点格式:前言_&_背景。
通常用于锚点内容不确定时,如模板中处理参数中的章节名,或批量处理生成章节链接。
语法
{{anchorencode:文本}}
参数
- 文本:任意字符串,会被处理为符合规范的锚点格式。
效果
- 返回值:已编码的锚点文本。
更多内容
完整文档:帮助:解析函数/anchorencode
{{#arraydefine: 数组名 | 数据字符串 | 分隔符 | 选项 }}
- 完整文档:arraydefine
- 官方文档:Extension:Arrays
arraydefine
定义临时的数组变量,供页面内使用。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
比如把字符串 apple,banana,orange 拆分建立数组,后续可以按需做集合运算(交、并、差集)和排序、去重等操作,最后可以输出指定位置的元素或整体按指定格式输出。
通常用于需要批量处理数据的场景,如根据 SMW 查询结果生成表格、从模板参数构建列表、批量生成图鉴条目等重复性结构。
语法
{{#arraydefine: 数组名 | 数据 | 分隔符 | 选项 }}
参数
- 数组名
- 要定义的变量名(区分大小写)
- 数据
- 要拆分的内容字符串,留空则定义空数组。可以是固定文本、模板参数、查询结果等
- 分隔符
- 默认逗号 (
,),可使用正则。留空则不拆分,整个字符串作为单个元素.
- 选项:
- 多个选项用逗号分隔,如
unique, sort=asc,支持:
unique:去除重复元素sort:指定排序方式,可选参数:none不排序(默认)asc升序asce升序desc降序random随机reverse倒序
print指定输出格式:list:用顿号连接输出(如"a、b、c")pretty:“人类友好”格式(如"a、b 和 c")
singleempty:保留唯一的空字符串元素
效果
- 输出:若设置
print选项,按指定格式输出数组内容;否则不输出任何字符。 - 效果:创建或更新指定名称的数组变量,在当前页面解析生命周期内有效
更多内容
完整文档:帮助:解析函数/arraydefine
{{#arraydiff: 结果数组名 | 数组1 | 数组2 | ... | 数组N }}
- 完整文档:arraydiff
- 官方文档:Extension:Arrays
arraydiff
计算数组的差集,从第一个数组中移除所有出现在其它数组中的元素,并将结果存入新数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
比如有数组 a=[1,2,3,4]、b=[2,4],执行 {{#arraydiff:result|a|b}} 会得到 result=[1,3]。
差集运算常用于数据过滤场景,如去除已处理元素、排除指定项等操作。
语法
{{#arraydiff: 结果数组名 | 数组1 | 数组2 | ... | 数组N }}
参数
- 结果数组名
- 用于存储结果的数组名称(区分大小写)
- 数组1
- 被减数组,作为差集运算的基准数组
- 数组2 ... 数组N
- 减数组,这些数组中的元素将从数组1中移除
- 支持多个减数组,按参数顺序依次执行差集运算
效果
- 输出:不输出任何字符
- 效果:创建或更新指定名称的结果数组,包含差集运算后的元素。运算逻辑为依次从第一个数组中移除所有出现在后续数组中的元素(数学表示:[math]\displaystyle{ A - B - C - \ldots }[/math])。结果数组的索引会被重新组织为从 0 开始的连续数字索引。
更多内容
完整文档:帮助:解析函数/arraydiff
{{#arrayindex: 数组名 | 序号 | 默认值 }}
- 完整文档:arrayindex
- 官方文档:Extension:Arrays
arrayindex
输出数组中指定位置的元素值。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
从已定义的数组中,根据指定序号返回对应的元素值。比如数组 {{#arraydefine:fruits|apple,banana,cherry}} 定义后,用 {{#arrayindex:fruits|1}} 可以获取第2个元素 banana。
通常用于从批量数据中提取特定位置的值,如获取查询结果的首尾元素、根据条件动态选择数组中的某项、在模板中按索引访问参数列表等场景。
语法
{{#arrayindex: 数组名 | 序号 | 默认值 }}
参数
- 数组名
- 已通过 #arraydefine 定义的数组名称(区分大小写)
- 序号
- 从 0 开始计数的整数索引
- 支持负数索引:
-1表示最后一个元素-2表示倒数第二个元素,以此类推
- 默认值(可选)
- 当数组或索引无效时返回的值,默认为空字符串
- 无效情况包括:
- 数组名不存在(未定义或拼写错误)
- 序号非数字
- 序号越界(超出数组实际范围)
效果
- 输出:返回数组中指定位置的元素值;若无效则返回默认值
- 效果:仅读取数组内容,不修改数组状态
更多内容
完整文档:帮助:解析函数/arrayindex
arrayintersect
{{#arrayintersect: 新数组名 | 数组1 | ... | 数组n }}
- 完整文档:arrayintersect
- 官方文档:Extension:Arrays
计算多个数组的交集。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
保留所有数组共有的元素。比如数组 a 为 orange, red, blue,数组 b 为 red, orange, yellow,则交集为 orange, red。
通常用于需要找出多组数据共同项的场景,如筛选同时满足多个条件的条目、查找多个分类的共同成员、对比多个查询结果的重叠部分等。
语法
{{#arrayintersect: 新数组名 | 数组1 | 数组2 | ... | 数组n }}
参数
- 新数组名
- 用于存储交集结果的数组变量名(区分大小写)
- 数组1, 数组2, ..., 数组n
- 至少需要两个已定义的数组名
- 结果以第一个数组为基准:保留其顺序和重复次数,仅过滤掉不在其他所有数组中的元素
效果
- 输出:无,不直接输出任何字符
- 效果:创建或更新指定名称的数组变量,存储交集结果;需配合
arrayprint等函数输出内容 - 比较规则:基于 PHP 的
array_intersect,按字符串值比较,区分大小写(red与Red视为不同元素) - 顺序保留:结果数组的元素顺序和重复次数完全遵循第一个数组,与后续数组无关
更多内容
{{#arraymap: 字符串 | 分隔符 | 占位符 | 输出格式 | 输出分隔符 | 输出连接词 }}
- 完整文档:arraymap
- 官方文档:Extension:Page Forms
arraymap
拆分字符串,并按照指定格式拼接。出自扩展 Page Forms。
比如把字符串 apple, banana, cherry 拆分后,对每个水果名添加链接格式 [[水果:@]],最终输出为 [[水果:apple]], [[水果:banana]], [[水果:cherry]]。
常用于根据原始数据,输出相同结构的内容。数据通常来自模板参数、SMW 查询或表达式结果。
语法
{{#arraymap: 字符串 | 分隔符 | 占位符 | 输出格式 | 输出分隔符 | 输出连接词 }}
参数
- 字符串
- 要处理的原始字符串
- 分隔符
- 拆分用的符号,默认为
,英文逗号。留空时逐字符拆分(包括空格与换行)
- 占位符
- 在"输出格式"中用作替换的标记,通常用
@
- 输出格式
- 包含占位符的 wikitext,解析时会将占位符替换为当前子串。
- 输出分隔符
- 拼接各结果时使用的分隔符,默认
,(逗号+空格)
- 输出连接词
- 替代最后两个元素之间的分隔符,如“和”、“或”。默认与输出分隔符相同
效果
- 输出:将处理后的所有非空元素按指定分隔符和连接词拼接成的字符串
- 效果:对原始字符串的每个元素应用相同的格式转换,空元素和转换后为空的元素会被自动过滤
更多内容
完整文档:帮助:解析函数/arraymap
{{#arraymaptemplate: 字符串 | 模板名 | 分隔符 | 输出分隔符 }}
- 完整文档:arraymaptemplate
- 官方文档:Extension:Page Forms
arraymaptemplate
分割字符串,用指定模板逐一输出。出自扩展 Page Forms。
比如把字符串 托奇、环理、辰纱 按顿号切分,并用模板 ListLine 渲染每个名字,最终生成带项目符号的列表。片段会作为参数 {{{1}}} 传入模板。
当元素需要复杂格式(多行结构、带条件判断、包含链接/图标/样式等)时,优先使用本函数,将"格式化逻辑"下放到模板中处理,避免在 #arraymap 中堆叠复杂 wikitext 造成"嵌套地狱"。
语法
{{#arraymaptemplate: 字符串 | 模板名 | 分隔符 | 输出分隔符 }}
参数
- 字符串
- 要拆分的原始文本
- 模板名
- 用于渲染每个片段的模板,片段作为
{{{1}}}(即参数1)传入模板
- 分隔符
- 用来切分字符串(非正则表达式)
- 留空时改为"逐字符切分"
- 输出分隔符
- 连接各次模板输出的文本
- 默认值:
,(英文逗号+空格) - 支持
\n表示换行
效果
- 输出:按"输出分隔符"连接所有模板渲染结果
- 效果:字符串拆分后,每个非空片段都会被传入指定模板进行展开,空片段会被跳过
更多内容
{{#arraymerge: 新数组名 | 数组1 | ... | 数组n }}
- 完整文档:arraymerge
- 官方文档:Extension:Arrays
arraymerge
合并多个数组为一个数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
比如将数组 a=[orange] 和 b=[red, red] 合并为 x=[orange, red, red],元素会按顺序依次追加,且保留重复元素。
通常用于需要整合多个来源数据的场景,如合并多次 SMW 查询结果、整合不同分类的条目列表、汇总多个模板参数等批量数据处理任务。
语法
{{#arraymerge: 新数组名 | 数组1 | 数组2 | ... | 数组n }}
参数
- 新数组名
- 存放合并结果的目标数组名称(区分大小写)
- 数组1..n
- 要合并的已定义数组,至少需要两个
效果
- 输出:不输出任何字符
- 效果:创建或更新指定名称的数组变量,将所有源数组的元素按顺序依次追加到新数组中。合并规则遵循 PHP 的
array_merge:- 数字键会重新编号(0, 1, 2...)
- 字符串键保留原名(同名键时后者覆盖前者)
- 不会自动去重,保留所有元素包括重复项
更多内容
完整文档:帮助:解析函数/arraymerge
{{#arrayprint: 数组名 | 分隔符 | 占位符 | 输出格式 | 选项 }}
- 完整文档:arrayprint
- 官方文档:Extension:Arrays
arrayprint
按指定格式输出数组内容。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
比如将数组 boss(包含 red, orange, blue)中的每个元素使用Boss模板渲染输出。
通常用于将计算后的数组转换为可视化内容,如生成导航列表、批量创建链接或调用模板等场景。
语法
{{#arrayprint: 数组名 | 分隔符 | 占位符 | 输出格式 | 选项 }}
参数
- 数组名
- 要输出的数组名称(需先通过
arraydefine等函数定义)
- 分隔符
- 用于分隔多个数组元素的字符串
- 默认为
、(Wiki 界面语言的顿号,BWiki 为中文) - 支持 HTML 标签,如
<br/>
- 占位符
- 在"输出格式"中标记数组元素的插入位置
- 常用
@、@@@等字符串
- 输出格式
- 定义单个数组元素的输出方式(一段 wikitext)
- 必须包含占位符,支持嵌入模板、解析函数、Wiki 链接等
- 选项
- 额外的输出选项,支持:
print=pretty:将最后一个分隔符替换为和(自然语言列表)
效果
- 输出:按指定格式将数组元素拼接为字符串并输出
- 效果:支持占位符替换、Wikitext 展开(模板、解析函数等),可生成复杂的格式化内容
更多内容
完整文档:帮助:解析函数/arrayprint
{{#arrayreset: 数组1 | 数组2 | ... }}
- 完整文档:arrayreset
- 官方文档:Extension:Arrays
arrayreset
删除已定义的数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
比如删除通过 {{#arraydefine:myArray|...}} 创建的数组,或清空所有数组以重新开始处理。
通常用于复杂模板的数据流控制,避免数组命名冲突,或在处理完数据后清理临时变量,保持页面解析环境整洁。
语法
{{#arrayreset: 数组名1 | 数组名2 | ... | 数组名n }}
或删除所有数组:
{{#arrayreset:}}
参数
- 数组名
- 要删除的数组变量名(区分大小写)
- 可指定一个或多个数组名,用竖线分隔
- 若不提供任何参数(空参数),则删除所有已定义的数组
效果
- 输出:不输出任何字符(返回空字符串)
- 效果:永久删除指定的数组变量,删除后该数组名可被重新定义使用
更多内容
完整文档:帮助:解析函数/arraydefine
{{#arraysearch: 数组名 | 搜索值 | 开始位置 | 成功值 | 失败值 }}
- 完整文档:arraysearch
- 官方文档:Extension:Arrays
arraysearch
搜索数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
在数组中查找指定值首次出现的位置,并返回其索引或自定义值。
比如在颜色数组 blue,white,red,white 中查找 white,返回其首次出现的索引 1(索引从 0 开始)。支持正则表达式匹配和指定搜索起点。
通常用于条件判断场景,如检查某元素是否存在于列表中、查找特定模式的元素位置、根据搜索结果执行不同逻辑等。
语法
{{#arraysearch: 数组名 | 搜索值 | 开始位置 | 成功值 | 失败值 }}
参数
- 数组名
- 已定义的数组变量名
- 搜索值
- 要查找的内容,支持两种模式:
- 普通字符串:完全匹配(自动忽略前后空白)
- 正则表达式:以
/pattern/格式书写,如/^red/
- 开始位置(可选)
- 搜索起点的索引,默认为
0。若超出数组范围则直接返回失败值
- 成功值(可选)
- 找到时返回的内容。省略时返回匹配元素的索引(数字)
- 失败值(可选)
- 未找到时返回的内容。省略时返回空字符串
效果
- 输出:根据搜索结果返回索引、自定义成功值或失败值
- 效果:查找指定值在数组中首次出现的位置,从指定索引开始搜索
更多内容
完整文档:帮助:解析函数/arraysearch
{{#arraysearcharray: 新数组名 | 原数组名 | 搜索条件 | 起始索引 | 限制数量 | 转换规则 }}
arraysearcharray
数组筛选。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
从数组中筛选匹配项并写入新数组。比如从数组 apple, blue, fly, add, wiki 中筛选出以字母 a 开头的元素,写入新数组得到 apple, add;支持正则表达式匹配和捕获组替换。
通常用于需要对数组数据进行条件过滤的场景,如从 SMW 查询结果中提取符合特定模式的数据、清理数组中的空值、按规则重组数据格式等批处理操作。
语法
{{#arraysearcharray: 新数组名 | 原数组名 | 搜索条件 | 起始索引 | 限制数量 | 转换规则 }}
参数
- 新数组名
- 筛选结果将写入此数组(区分大小写)
- 原数组名
- 要被筛选的源数组名称
- 搜索条件
- 正则表达式或字符串,默认值
/^(\s*)$/(匹配空白项) - 如果不是有效正则,会被转换为精确匹配:
/^\s*(搜索内容)\s*$/
- 起始索引
- 可选,默认
0。从该位置开始扫描,支持负数(从末尾计数)
- 限制数量
- 可选,默认不限制。限制匹配结果的最大数量,空值或
-1表示不限制
- 转换规则
- 可选,仅当搜索条件为正则时生效。对匹配文本做替换后再写入新数组
- 支持用
$0(整段匹配)、$1、$2…(捕获组)引用匹配内容
效果
- 输出:不输出任何字符
- 效果:创建或更新指定名称的新数组变量,存储从原数组筛选出的匹配项;若原数组不存在或索引无效,则创建空数组
更多内容
{{#arraysize: 数组名}}
- 完整文档:arraysize
- 官方文档:Extension:Arrays - arraysize
arraysize
返回指定数组的元素数量。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
比如数组 fruits 包含 3 个元素 apple, banana, orange,使用 {{#arraysize:fruits}} 将返回 3。空数组返回0。不存在的数组返回空字符串,可配合#if判断数组是否存在。
通常用于循环控制、条件判断、数组验证等场景。
语法
{{#arraysize: 数组名 }}
参数
- 数组名
- 要检查的目标数组名称(区分大小写)
效果
- 输出:返回数组中元素的数量(非负整数)
- 特殊情况:
- 空数组返回
0 - 不存在的数组返回空字符串(可用于判断数组是否存在)
- 空数组返回
更多内容
完整文档:帮助:解析函数/arraysize
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}}→ 1、-10、-1、2、3、7、0、5、6、11{{#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-09-28
- 注意其末尾需要冒号。
示例
查询当前月份的活动,以日历格式显示。
{{#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-11-02
注意
- 其末尾需要冒号。
- 日历结束日期不一定是当月最后一天。因为日历格式以周为单位显示。
示例
查询当前月份的活动,以日历格式显示。
{{#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)、(509732352)、(29136181)、(111160720)、(3546653302721147)和(25679249)
- 注意,一些小组件会改变用户名的外观
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}}→ 962 - 编辑次数:
{{#cscore:39886146|changes}}→ 3,118 - 编辑页面数量:
{{#cscore:39886146|pages}}→ 867
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 */):urlvarattr(… url …)filteracceleratorexpressionimage、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 解析函数/anchorencode/用例 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}}→10389796 - 溢出可能导致未预期报错:
{{#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}}→ unspecified (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简介|获取帮助}}
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}}→ 17{{NUMBERINGROUP:bot}}→ 1{{NUMBERINGROUP:bureaucrat}}→ 8{{NUMBERINGROUP:interface-admin}}→ 24{{NUMBERINGROUP:sysop}}→ 19
NUMBEROFACTIVEUSERS
活跃用户数量。MediaWiki原生支持。
过去30天内执行过操作(如编辑页面)的用户被视为活跃用户。此变量与特殊:统计信息中的活跃用户数量统计保持一致。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofactiveusers - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFACTIVEUSERS}}
示例
{{NUMBEROFACTIVEUSERS}} → 10
NUMBEROFADMINS
管理员数量。MediaWiki原生支持。
拥有管理员用户组的用户数量。此信息也在特殊:统计信息 - 用户统计中显示。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofadmins - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFADMINS}}
示例
{{NUMBEROFADMINS}} → 19
NUMBEROFARTICLES
有效内容页面的数量。MediaWiki原生支持。
有效内容页面:主命名空间中带有链接的非重定向页面。
此信息也在特殊:统计信息 - 页面统计中显示。
在MW 1.17 及更早版本中,还需要带有至少一个逗号。
- 官方文档:Help:Magic words - Statistics
- 相关文档
- 完整文档:帮助:解析函数/numberofarticles - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFARTICLES}}
示例
{{NUMBEROFARTICLES}} → 189
NUMBEROFEDITS
总编辑次数。MediaWiki原生支持。
此信息也在特殊:统计信息 - 编辑统计中显示。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofedits - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFEDITS}}
示例
{{NUMBEROFEDITS}} → 19,865
NUMBEROFFILES
文件数量。MediaWiki原生支持。
此信息也在特殊:统计信息 - 页面统计中显示。
在BWiki,此统计约等于图片数量。目前上传文件仅限图片,较老的wiki可能会存在非图片文件。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberoffiles - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFFILES}}
示例
{{NUMBEROFFILES}} → 210
NUMBEROFPAGES
页面数量。MediaWiki原生支持。
Wiki中所有命名空间的总页面数量,包括讨论、重定向、图片页面等等。此信息也在特殊:统计信息 - 页面统计中显示。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofpages - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFPAGES}}
示例
{{NUMBEROFPAGES}} → 1,531
NUMBEROFPAGEVIEWS
【已弃用MediaWiki版本: 1.14 - 1.24 可用】。MediaWiki原生支持。
原用于显示页面浏览次数。但由于BWiki额外的CDN和缓存层,大部分访问不会纳入此统计,所以此变量通常低于实际浏览量,没有参考价值。
相应的,特殊:统计信息中的「最多查看页面」数据也不准确。
- 完整文档:帮助:解析函数/numberofpageviews - 底层代码
语法
{{NUMBEROFPAGEVIEWS}}
示例
{{NUMBEROFPAGEVIEWS}} → 1,373
NUMBEROFUSERS
注册用户数量。MediaWiki原生支持。
此信息也在特殊:统计信息 - 用户统计中显示。
登录B站的用户首次访问某一个BWiki站点时,会自动创建账号和登录(每个BWiki站点的用户和权限都是独立控制的)。所以此变量等价于访问过某一Wiki的B站用户数。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofusers - 更多示例、背景知识、底层代码和实战用例
语法
{{NUMBEROFUSERS}}
示例
{{NUMBEROFUSERS}}→ 10,389,796{{NUMBEROFUSERS:R}}→ 10389796
NUMBEROFVIEWS
【已弃用MediaWiki Version: 1.14 – 1.24】。MediaWiki原生支持。
原用于获取站点浏览量。但由于BWiki额外的CDN和缓存层,大部分访问不会纳入此统计,所以此变量通常低于实际浏览量,没有参考价值。
此信息也在特殊:统计信息 - 查看统计中显示,同样会低于实际浏览量。
- 官方文档:Help:Magic words - Statistics
- 完整文档:帮助:解析函数/numberofviews - 底层代码
语法
{{NUMBEROFVIEWS}}
示例
{{NUMBEROFVIEWS}} → 3,788,333
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 }}→ 2{{PAGESINCATEGORY: 热力图 | all | R }}→ 2{{PAGESINCATEGORY: 热力图 | R | all }}→ 2
PAGESIZE
获取指定页面的大小。MediaWiki原生支持。
- 官方文档:Help:Magic words - Technical metadata of another page
- 完整文档:帮助:解析函数/pagesize - 更多示例、背景知识、底层代码和实战用例
语法
{{PAGESIZE: 页面名 }}- 页面名:指定一个页面获取其大小(byte size)
{{PAGESIZE: 页面名 | R }}- 不格式化结果数字(无逗号分隔符)
示例
{{PAGESIZE: 帮助:解析函数 }}→ 13,958{{PAGESIZE: 帮助:解析函数 | R }}→ 13958{{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}}→10(显示当前页面的最后修订日){{REVISIONDAY:首页}}→23{{REVISIONDAY:模板:面包屑}}→29{{REVISIONDAY:不存在的页面}}→
REVISIONDAY2
获取指定页面最后一次修订的日期中的"日"部分(01-31,带前导零)。出自扩展 ParserFunctions。
注意,页面保存后,其缓存时间无上限,不会自动刷新。因此时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki官方文档
- 完整文档:帮助:解析函数/REVISIONDAY2 - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONDAY2}}(当前页面)
{{REVISIONDAY2:页面名称}}(指定页面,高开销)
- 页面名称(可选):要查询的页面标题,默认为当前页面。不存在的页面返回空字符串
示例
{{REVISIONDAY2}}→10(显示当前页面的最后修订日){{REVISIONDAY2:首页}}→23{{REVISIONDAY2:模板:面包屑}}→29{{REVISIONDAY2:不存在的页面}}→
REVISIONID
获取指定页面的最新修订版本ID。修订ID是MediaWiki为每次编辑分配的唯一数字标识,数值越大代表编辑时间越新。MediaWiki原生支持。
注意,由于wikitext有缓存,本函数的结果会被缓存(暂时保存)。即使其他页面更新(最新修订ID变化),其缓存结果也不会自动刷新。
- 官方文档:MediaWiki魔术字文档
- 完整文档:帮助:解析函数/REVISIONID - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONID}}- 当前页面的修订ID{{REVISIONID:页面名称}}- 指定页面的修订ID(高开销)
示例
{{REVISIONID}}→53046{{REVISIONID:首页}}→52830{{REVISIONID:不存在的页面}}→
REVISIONMONTH
获取指定页面最新修订版本的月份(带前导零的两位数格式,如06)。MediaWiki原生支持。
注意,由于页面缓存,时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki魔法字
- 完整文档:帮助:解析函数/REVISIONMONTH - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONMONTH}}当前页面最新修订日期的月份{{REVISIONMONTH:页面名}}指定页面最新修订日期的月份(高开销)
示例
{{REVISIONMONTH}}→10{{REVISIONMONTH:首页}}→09
REVISIONMONTH1
获取指定页面最新修订版本的月份(没有前导零,如6)。MediaWiki原生支持。
注意,由于页面缓存,时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki魔法字
- 完整文档:帮助:解析函数/REVISIONMONTH1 - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONMONTH1}}当前页面最新修订日期的月份{{REVISIONMONTH1:页面名}}指定页面最新修订日期的月份(高开销)
示例
{{REVISIONMONTH1}}→10{{REVISIONMONTH1:首页}}→9
REVISIONTIMESTAMP
获取指定页面最后一次编辑的时间戳(格式:YYYYMMDDHHMMSS)。时间戳基于本地服务器时间。MediaWiki原生支持。
注意,由于页面缓存,时间相关的函数无法实现如:仅25年9月3日展示的彩蛋内容、计算页面更新距今时长。相关功能使用JS实现更为稳妥。
- 官方文档:MediaWiki ParserFunctions
- 完整文档:帮助:解析函数/REVISIONTIMESTAMP - 更多示例、背景知识、底层代码和实战用例
语法
{{REVISIONTIMESTAMP}}本页编辑时间戳{{REVISIONTIMESTAMP:页面名称}}指定页面页编辑时间戳(高开销)
示例
- 获取当前页面最后编辑时间:
{{REVISIONTIMESTAMP}}→ 20251010220028 - 获取"首页"的最后编辑时间:
{{REVISIONTIMESTAMP:首页}}→ 20250923223719 - 无法实现的功能示例:
{{#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
|
月份号,无前导零。 | 10 |
m
|
月份号,有前导零。 | 10 |
M
|
月份名称缩写,使用网站语言。(英文结果为 Oct)
|
10月 |
F
|
月份名称全称,使用网站语言。(英文结果为 October)
|
10月 |
xg
|
月份名称全称,使用网站语言的属格(Genitive)形式,注意区分其与主格(Nominative)形式的区别。 这项功能在斯拉夫语族(Slavic languages)中十分重要,如波兰语、俄语、白俄罗斯语、捷克语、斯洛伐克语、斯洛文尼亚语、乌克兰语等。 在中文环境下: |
对于中文:
(主格) {{#time:Y F d|20 June 2010|zh}} → (属格) {{#time:Y xg d|20 June 2010|zh}} → |
| 周 | ||
W
|
ISO 8601 规定的周数,有前导零。 | 44 |
| 日 | ||
j
|
月份内的日期号,无前导零。 | 28 |
d
|
月份内的日期号,有前导零。 | 28 |
z
|
年份内的日期号 (1月1日 = 0)。 注意:要获得 ISO 规定的日期号,需加上1。 |
300 |
D
|
星期的缩写。国际上不通用。 | 二 |
l
|
星期的全称。国际上不通用。 | 星期二 |
N
|
ISO 8601 规定的星期编号(星期一 = 1,星期日 = 7)。 | 2 |
w
|
星期编号(星期日 = 0,星期六 = 6)。 | 2 |
| 时 | ||
a
|
早上为 am(00:00:00 → 11:59:59);其他时间为 pm(12:00:00 → 23:59:59)。
|
pm |
A
|
上方 a 的大写形式。
|
PM |
g
|
12小时制的时,无前导零。 | 9 |
h
|
12小时制的时,有前导零。 | 09 |
G
|
24小时制的时,无前导零。 | 21 |
H
|
24小时制的时,有前导零。 | 21 |
| 分 和 秒 | ||
i
|
小时后的分钟数,有前导零。 | 25 |
s
|
分钟后的秒钟数,有前导零。 | 26 |
U
|
UNIX时间(Unix time)。从格林尼治时间(GMT)1970年1月1日00:00:00开始计的秒钟数。 | 1761686726 |
| 时区(需 MediaWiki 1.22wmf2) | ||
e
|
时区标识符。 | UTC |
I
|
当前日期是否使用日光节约时间(夏令时)。 | 0 |
O
|
与格林尼治时间(GMT)的时差。 | +0000 |
P
|
与格林尼治时间(GMT)的时差,带有冒号分隔。 | +00:00 |
T
|
时区缩写。 | UTC |
Z
|
以秒计的时差。 | 0 |
| 杂项 | ||
t
|
当前月份的天数。 | 31 |
c
|
ISO 8601 格式的日期,等价于 Y-m-d"T"H:i:s+00:00。
|
2025-10-28T21:25:26+00:00 |
r
|
RFC 5322 格式的日期,等价于 D, j M Y H:i:s +0000,其中星期名和月份名国际上不通用。
|
Tue, 28 Oct 2025 21:25:26 +0000 |
| 非公历日历 | ||
| 伊斯兰历(Islamic calendar),又称 希吉来历(Hijri calendar) | ||
xmj
|
月份内的日期号。 | 6 |
xmF
|
月份名称全称。 | 主马达·敖外鲁月 |
xmn
|
月份号。 | 5 |
xmY
|
全长表示的年。 | 1447 |
| 伊朗历(Iranian calendar),又称 贾拉利历(Jalali calendar) | ||
xij
|
月份内的日期号。 | 6 |
xiF
|
月份名称全称。 | Aban |
xin
|
月份号。 | 8 |
xiY
|
全长表示的年。 | 1404 |
xiy
|
2位数表示的年。 | 04 |
| 希伯来历(Hebrew calendar) | ||
xjj
|
月份内的日期号。 | 6 |
xjF
|
月份名称全称。 | 玛西班月 |
xjt
|
当前月份的天数。 | 29 |
xjx
|
属格形式的月份名称。 | Cheshvan |
xjn
|
月份号。 | 2 |
xjY
|
全长表示的年。 | 5786 |
| 泰国历(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}}→
x9(x被原样输出,g被当作格式控制代码) - {{#time: Y-m-d}}→
2025-10-28 - {{#time:→[[Y]]m d}}
2025 10 28 - {{#time:→[[Y (year)]]}}
2025 (25UTCpmTue, 28 Oct 2025 21:25:26 +0000)(year被当作格式控制代码y、e、a、r) - {{#time:→[[Y "(year)"]]}}
2025 (year) - {{#time: i's"}}→
25'26" - '日期/时间对象'可以使用任何PHP中strtotime()函数支持的格式。可以使用绝对时间(如
20 December 2000)和相对时间(如+20 hours):- {{#time: r|now}}→
Tue, 28 Oct 2025 21:25:26 +0000 - {{#time: r|+2 hours}}→
Tue, 28 Oct 2025 23:25:26 +0000 - {{#time: r|now + 2 hours}}→
Tue, 28 Oct 2025 23:25:26 +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}}→
1761686727 - {{#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 28 00:00:00(使用了一天的开始时刻,填补了当前月份内的日期号、年份) - {{#time: Y m d H:i:s|2003}}→
2003 10 28 00:00:00(使用了一天的开始时刻,填补了当前年份内的日期号)
- 在MediaWiki r86805之后,4位数字一概会被认为是年份,而非小时与分钟:
- {{#time: Y m d H:i:s|1959}}→
1959 10 28 00:00:00
- 6位数字会被认为是小时、分钟和秒钟,如果得到的时间不正确,则会报错(一概不会当作年份和月份):
- {{#time: Y m d H:i:s|195909}}→
2025 10 28 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 9月
#time中'格式字串'的总长度限制为6000字符。- 关于时区
- 解析函数
#time中有一个bug(更确切的说是PHP日期时间的bug),不允许传入非整数的相对时差。这个问题在整点时区不会出现,如东部夏令时间(EDT):- {{#time:g:i A|-4 hours}}→
5:25 PM
- 但是,委内瑞拉(委内瑞拉标准时间,VET)与世界协调时间(UTC)的时差是-4.5小时,如果直接输入则不会得到正确的结果,如下:
- {{#time:g:i A|-4.5 hours}}→
6:25 AM
- 可以将时差转换为分钟或者秒钟来解决这个问题:
- {{#time:g:i A|-270 minutes}}→
4:55 PM - {{#time:g:i A|-16200 seconds}}→
4:55 PM
- (上述方法由此函数开发者 Tim Starling 提供)
timel
与time一致,默认使用当地时间(在'日期/时间对象'留空时)。
出自扩展 ParserFunctions。
- 例子
- {{#time: Y-m-d}}→
2025-10-28(世界协调时间,UTC) - {{#timel: Y-m-d}}→
2025-10-29(北京时间,UTC+8) - {{#time: Y F d H:i:s}}→
2025 10月 28 21:25:26(世界协调时间,UTC) - {{#timel: Y F d H:i:s}}→
2025 10月 29 05:25:26(北京时间,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


沪公网安备 31011002002714 号