2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

帮助:魔术字/解析器函数

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索
Commons-emblem-notice.svg
这个页面“Help:魔术字/解析器函数”是萌娘百科的帮助文档
  • 本文用于介绍萌娘百科中一些特定功能的操作方法;
  • 本文仅是一篇论述,不属于方针或指引。如果本指南与相关方针或指引发生冲突或存在不一致的情况,请以方针或指引的条文为准。

解析器函数与系统变量非常相似,但与后者相比,前者全部要求至少传入一个参数,所有的参数1与函数名之间均用:而不是|分割。

解析器函数有时会在函数名前加上#用以与模板区分。

列表

以下表格详细说明了萌百可用的解析器函数,部分术语未作解释。

解析器函数 输入 → 输出 描述
URL与标题的数据和解析
{{localurl:页面名称}}
{{localurl:页面名称|查询字符串}}
{{localurl:Mainpage}} → /Mainpage
{{localurl:Mainpage|printable=yes}} → /index.php?title=Mainpage&printable=yes
指定页面的相对路径
{{fullurl:页面名称}}
{{fullurl:页面名称|查询字符串}}
{{fullurl:跨wiki前缀:远程页面名称|查询字符串}}
{{fullurl:Category:帮助}}https://moegirl.icu/Category:%E5%B8%AE%E5%8A%A9
{{fullurl:Category:帮助|action=edit}}https://moegirl.icu/index.php?title=Category:%E5%B8%AE%E5%8A%A9&action=edit
{{fullurl:mw:MediaWiki/zh|action=edit}}https://www.mediawiki.org/wiki/MediaWiki/zh?action=edit
{{fullurl:mw:Help:Magic words|action=edit}}https://www.mediawiki.org/wiki/Help:Magic_words?action=edit
指定页面的相对协议路径,该解析器函数也能识别跨wiki前缀。
注意:未被方括号包裹起来的相对协议路径不会自动生成为链接
{{canonicalurl:页面名称}}
{{canonicalurl:页面名称|查询字符串}}
{{canonicalurl:interwiki:远程页面名称|查询字符串}}
{{canonicalurl:Category:帮助}}https://moegirl.icu/Category:%E5%B8%AE%E5%8A%A9
{{canonicalurl:Category:帮助|action=edit}}https://moegirl.icu/index.php?title=Category:%E5%B8%AE%E5%8A%A9&action=edit
{{canonicalurl:mw:Help:Magic words|action=edit}}https://www.mediawiki.org/wiki/Help:Magic_words?action=edit
指定页面的绝对协议路径,该解析器函数也能识别跨wiki前缀。
{{filepath:文件名称}}
{{filepath:文件名称|缩略图大小}}
{{filepath:文件名称|nowiki}}
{{filepath:Box-1.png}}Box-1.png
{{filepath:Box-1.png|120}}120px-Box-1.png
{{filepath:Box-1.png|nowiki}} → https://moegirl.icu/media/Box-1.png
指定文件的绝对协议路径,可以指定缩略图大小(仅能指定宽度大小,单位为px),也可以指定是否被直接渲染为图片
{{urlencode:字符串}}
{{urlencode:字符串|QUERY}}{{urlencode:字符串|WIKI}}{{urlencode:字符串|PATH}}
{{urlencode:x:y/z á é-萌娘百科}}{{urlencode:x:y/z á é-萌娘百科|QUERY}} → x%3Ay%2Fz+%C3%A1+%C3%A9-%E8%90%8C%E5%A8%98%E7%99%BE%E7%A7%91
{{urlencode:x:y/z á é-萌娘百科|WIKI}} → x:y/z_%C3%A1_%C3%A9-%E8%90%8C%E5%A8%98%E7%99%BE%E7%A7%91
{{urlencode:x:y/z á é-萌娘百科|PATH}} → x%3Ay%2Fz%20%C3%A1%20%C3%A9-%E8%90%8C%E5%A8%98%E7%99%BE%E7%A7%91
输出指定字符串经编码后的结果。不同的参数指定不同的编码规则,用于解析页面标题到MediaWiki类站点链接时建议使用WIKI,解析字符串到文件名时建议使用PATH,解析字符串到搜索引擎链接时建议使用(空)、QUERY;如果你不清楚如何选择时,你可以到Talk:提问求助区求助

注意:现阶段萌百MediaWiki版本不支持参数指定,可尝试使用{{replace}}等进行替换

{{anchorencode:字符串}} {{anchorencode:x:y/z á é-萌娘百科}} → x:y/z_á_é-萌娘百科 输出指定字符串经MediaWiki页内标题链接编码规则编码后的结果,可用于指定内容的标题的页内导航
{{#rel2abs: 路径}}
{{#rel2abs: 路径 | 基础路径}}
{{#rel2abs: /quok | Help:Foo/bar/baz}} → Help:Foo/bar/baz/quok
{{#rel2abs: ../../../../quok | Help:Foo/bar/baz}}错误:路径深度无效:“Help:Foo/bar/baz/../../../../quok”(试图访问根节点之上的节点)。
本函数用于以通用的命令行目录变换格式来变换页面路径:
  • 如果没有给定参数2,基础路径为当前页面路径;
  • 参数1中可以使用以下格式来变换路径:
    • .指定基础路径;
    • ..使基础路径上移一层
    • /path使基础路径移动到下一层名为path的页面

对于不合法的参数1,函数并不会直接抛出错误,而是尝试剔除错误部分继续工作:

  • {{#rel2abs: ../quok/. | Help:Foo/bar/baz}} → Help:Foo/bar/quok
  • {{#rel2abs: ../../../quok | Help:Foo/bar/baz}} → quok
{{#titleparts: 要解析的标题 | 要返回的层数 | 返回部分的起始点}} {{#titleparts: Talk:Foo/bar/baz/quok | 2}} → Talk:Foo/bar
{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2}} → bar/baz
{{#titleparts: Talk:Foo/bar/baz/quok | -2}} → Talk:Foo/bar
{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2}} → baz
该函数用于输出给定标题的一部分:
  1. 参数1指定要解析的标题;
  2. 参数2指定返回的部分的层数,默认接受正整数向后计数,本参数也可以接受一个负整数,用以从最后一层向前计数舍去被计入的部分;
  3. 参数3指定从何处开始返回,默认接受正整数从根路径向后计数,本参数也可以接受一个负整数,用以从最后一层向前计数。

注意:

  • 本函数会对参数1先进行url解码再进行解析;
  • 本函数返回被解析后的部分;
  • 本函数返回的部分受MediaWiki标题限制:
    1. 所有下划线会被替换成空格:{{#titleparts: Talk:Foo/bah_boo|1|2}} → bah boo
    2. 只对前25层做划分,即第25层和第25层以下的内容会合并为1个第25层:{{#titleparts: 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28 | 2 | 24}} → 24/25/26/27/28
      为了避免这个缺陷,你可以用嵌套的方式:{{#titleparts: {{#titleparts: 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28 | 2 | 24}} | 1 | 2}} → 25
    3. 上一个函数提到的命令行目录变换格式不被接受;
    4. 参数1的首字母会变为大写:{{#titleparts: talk:a/b/c}} → Talk:A/b/c
    5. 若参数1不合法则会被直接输出{{#titleparts: [[首页]]/123 | 1 | 2}}首页/123
名字空间
名字空间解析器函数{{ns:}}返回标准名字空间的本地化名称(萌百使用标准名称作为本地化名称)或自定义名字空间的名称,参数1可以指定名字空间的ID,标准名字空间的MediaWiki标准名称、本地(语言变种)化名,自定义名字空间的名称:
  • {{ns:2}} = {{ns:User}} = {{ns:用户}} = {{ns:用戶}} = {{ns:使用者}} → User
  • {{ns:5}} = {{ns:Project Talk}} = {{ns:萌娘百科讨论}} = {{ns:萌娘百科討論}} = {{ns:萌娘百科 talk}} → 萌娘百科 talk

需要注意的是:

  1. 该解析器函数的参数1可以使用Image,效果与File一致;
  2. 在解析器函数名后加一个e可以得到经MediaWiki URL编码规则编码后的标准名字空间的本地化名称或自定义名字空间的名称,很适合用于外链中:
    • {{nse:5}} → %E8%90%8C%E5%A8%98%E7%99%BE%E7%A7%91_talk
格式化函数
{{formatnum:未格式化的数字}}
{{formatnum:已格式化的数字|R}}
{{formatnum:未格式化的数字|NOSEP}}
简单例子:
  • {{formatnum:987654321.654321}} → 987,654,321.654321
  • {{formatnum:987,654,321.654321|R}} → 987654321.654321

高级例子:

  • {{formatnum:{{formatnum:987654321.654321}}|R}} → 987654321.654321(任何情况下)
  • {{formatnum:00001}} → 00,001
  • {{formatnum:987654321.654321 |NOSEP}} → 987654321.654321

错误的输入会导致无法预测的输出,不论是否有参数2|R

  • {{formatnum:987.654,321}} → 987.654,321
  • {{formatnum:987.654,321|R}} → 987.654321
参数1接受任何阿拉伯数字,按照站点默认区域数字格式用分位符号分组,将其本地化后输出。

参数2有两个可接受字符串:

  1. |R可以使函数的行为倒转,即输入已格式化的数字输出完全无格式数字(只有小数点.,没有其他的格式),可以用在数学计算中。但请注意只有在输入的数字是完全格式化后它的输出才符合预期;
  2. |NOSEP(“无分隔符”)参数会使数位分组分隔符和小数点分隔符不被修改,此时 formatnum 只会在不使用zhwp:印度-阿拉伯数字系统的语言中将数字字符进行转换。NOSEP 参数还会防止出现意外的非标准数字分组。。

注意

  1. 开头的前导0不会被去除,如果你要去除请使用{{#expr:00001}}
  2. 如果输入的数字格式有误,那么输出的数字无法保证格式正确。

如果你真的需要输入一个无法保证格式正确的数字的话,你可以使用{{formatnum:}}两次,但请不要在输入数字可能有数位分组格式的情况下使用这种变通方式,否则分隔符可能会消失或数字无法被格式化。请注意这种方法是非常取巧的,因此它的输出结果可能不可靠。

{{#dateformat:日期}}
{{#formatdate:日期}}
{{#dateformat:日期|格式规则}}
{{#formatdate:日期|格式规则}}
  • {{#dateformat:25 dec 2009}} → 25 dec 2009
  • {{#formatdate:dec 25,2009|dmy}} → dec 25,2009
  • {{#dateformat:2009-12-25|mdy}}12月 25, 2009(本例子中只有这一行合法,mw添加了额外的信息:<span class="mw-formatted-date" title="2009-12-25">12月 25, 2009</span>
  • {{#formatdate:2009 dec 25|ISO 8601}} → 2009 dec 25
参数1接受一个未格式化的日期,按照设置#显示里的“日期格式”设置将其格式化。对于未登录的读者和未设置日期格式的用户,可以通过参数2指定格式:mdydmyymd(输出的字母全小写)。如果参数1只给出月日,那么只有mdydmy才是有效的格式。如果未指定格式或者格式无效,那么参数1的格式将被指定为输出格式。如果参数1的日期格式无效,那么函数输出参数1的原样。

警告:即使ISO 8601格式要求参数1的日期是公历日期,若参数2指定ISO 8601,函数也能对那些超出通常公历范围的日期进行格式化(例如1583年之前的日期)。不过,函数无法正确转换ISO 8601格式下的负数年份和通常格式下的公元前的年份。

{{lc:字符串}} {{lc:DATA CENTER}} → data center 将字符串完全小写化
{{lcfirst:字符串}} {{lcfirst:DATA center}} → dATA center 将字符串首字母小写化
{{uc:字符串}} {{uc:text transform}} → TEXT TRANSFORM 将字符串完全大写化
{{ucfirst:字符串}} {{ucfirst:text TRANSFORM}} → Text TRANSFORM 将字符串首字母大写化
{{padleft:原字符串|补足后的字符串长度}}
{{padleft:原字符串|补足后的字符串长度|补足用的字符串}}
{{padleft:xyz|5}} → 00xyz
{{padleft:xyz|5|_}} → __xyz
{{padleft:xyz|5|abc}} → abxyz
{{padleft:xyz|7|abc}} → abcaxyz
{{padleft:xyz|2}} → xyz
{{padleft:|4|xyz}} → xyzx
将参数1通过在左侧补上参数3指定的字符串(默认为0)补足到参数2指定的长度,参数3指定的字符串可能被截断以保证补足后的字符串长度满足要求
{{padright:原字符串|补足后的字符串长度}}
{{padright:原字符串|补足后的字符串长度|补足用的字符串}}
{{padright:xyz|5}} → xyz00
{{padright:xyz|5|_}} → xyz__
{{padright:xyz|5|abc}} → xyzab
{{padright:xyz|7|abc}} → xyzabca
{{padright:xyz|2}} → xyz
{{padright:|4|xyz}} → xyzx
{{padleft:}}近乎一样,只是在右边补足
本地化函数
{{plural:数字|单数形式|复数形式}} {{plural:0|is|are}} → are
{{plural:1*1|is|are}} → is
{{plural:21 mod 10|is|are}} → are
{{plural:{{#expr:21 mod 10}}|is|are}} → is
根据参数1是单数还是复数,输出不同的字符串:单数输出参数2,复数输出参数3。判断是否单复数的标准是{{#switch: 1 | {{{1}}} | {{#expr: {{{1}}} }} = true | #default = false}}
{{gender:指定用户名|男性时的文本|女性时的文本|未选择性别时的文本}}
{{gender:|男性时的文本|女性时的文本|未选择性别时的文本}}
{{gender:.|男性时的文本|女性时的文本|未选择性别时的文本}}
{{gender:AnnAngela|男性时的文本|女性时的文本|未选择性别时的文本}}→未选择性别时的文本
{{gender:|男性时的文本|女性时的文本|未选择性别时的文本}}未选择性别时的文本(此处使用{{UserGender}}渲染)
{{gender:.|男性时的文本|女性时的文本|未选择性别时的文本}}→未选择性别时的文本
根据指定的用户的设置#用户资料的“语言”设置中的性别部分,返回该性别对应的文本。

注意

  1. 如果参数4未给出,那么当用户设置为“中性”时使用男性文本;
  2. 如果参数3未给出,那么当用户设置为“女性”时使用男性文本;
  3. 如果参数1为空,则指定当前用户(未登录读者使用站点默认设置),但这种方式只能在系统消息页面使用;
    • 如果要在普通页面使用,请用{{UserGender}};
  4. 如果参数1为.,则使用站点默认设置。
{{int:信息名称}} {{int:edit}} → 编辑
{{int:editsectionhint|MediaWiki}} → 编辑章节:MediaWiki
返回指定信息的界面语言变种翻译。可以在MediaWiki:信息标准名(en-US)/界面语言变种里找到,亦可以修改。

对于部分信息,可以提供参数给它们,它们可以通过$1、$2……获取这些参数,在第二个例子里,MediaWiki替换了$1。

这种用法相较于{{MediaWiki:信息名称}}好处是可以根据用户的界面语言变种的变化而变化,也比模板更快加载,但它不会在编辑框下方的“该页面使用的模板:”中出现。如果对应信息不存在的话,会以⧼unexist⧽出现.

特殊嵌入
{{:(主)名字空间页面名}} (主名字空间页面) 通过:将名字空间强制指定为(主),从而嵌入(主)名字空间的页面
{{msg:与某一魔术字重名的模板名}}
{{raw:与某一魔术字重名的模板名}}
(模板正常渲染内容) {{Tempate:与某一魔术字重名的模板名}}一样可以避免魔术字与模板名冲突,而直接嵌入模板
{{msgnw:模板名}} {{msgnw:tl}} → &#123;&#123;{{ {{{|safesubst:}}}#if:{{{3|}}}|{{{3|}}}:|}}[[{{ {{{|safesubst:}}}ns:Template}}:{{{1}}}|{{{1}}}]]{{ {{{|safesubst:}}}#if:{{{2|{{{arg|}}}}}}|{{!}}{{{2|{{{arg}}}}}}}}&#125;&#125;<noinclude>

{{Documentation}} <!-- 请在将分类与跨语言连结增加在 /doc 子页面 --> [[Category:内部链接模板]] </noinclude>

把模板的源码以纯文本形式输出,自带nowiki效果
{{subst:模板名}} (模板的正常渲染内容,而模板源码在替换完参数,删去<noinclude/>内容后粘贴到页面源码中) 把模板的源码嵌入到页面源码中,参见Help:替换引用
{{safesubst:模板名}} (模板的正常渲染内容。当上层模板是被正常嵌套时按正常方式被嵌套;而当上层模板是被替换引用时,模板源码在替换完参数,删去<noinclude/>内容后粘贴到页面源码中)
运算与逻辑判断(来自扩展:解析器函数)
{{#expr: 数学表达式 }} {{#expr: 1 and -1 }} → 1

{{#expr: ---...---1}}(95个“-”) = -1

本函数计算并返回数学表达式的结果,你可以使用+、-、*、/来进行计算。本函数将e(自然对数的底数)、pi(π)作为常数使用。本函数支持的运算符如下所示:
运算符 名称 优先级 元数 结合性 样例
+ 9 1 {{#expr: + 7}} = 7
- 9 1 {{#expr: - 7}} = -7
not 逻辑非 9 1 {{#expr: not 7}} = 0
* 8 2 {{#expr: 30 * 7}} = 210
/ 8 2 {{#expr: 30 / 7}} = 4.2857142857143
div 8 2 {{#expr: 30 div 7}} = 4.2857142857143
mod 8 2 {{#expr: 30 mod 7}} = 2
+ 6 2 {{#expr: 30 + 7}} = 37
- 6 2 {{#expr: 30 - 7}} = 23
round 舍入 5 2 {{#expr: 30 / 7 round 7}} = 4.2857143
= 等于 4 2 {{#expr: 30 = 7}} = 0
< 小于 4 2 {{#expr: 30 < 7}} = 0
> 大于 4 2 {{#expr: 30 > 7}} = 1
<= 小于等于 4 2 {{#expr: 30 <= 7}} = 0
>= 大于等于 4 2 {{#expr: 30 >= 7}} = 1
<> 不等于 4 2 {{#expr: 30 <> 7}} = 1
!= 不等于 4 2 {{#expr: 30 != 7}} = 1
and 逻辑与 3 2 {{#expr: 30 and 7}} = 1
or 逻辑或 2 2 {{#expr: 30 or 7}} = 1
abs 绝对值 10 1 {{#expr: abs 2}} = 2
{{#expr: abs -2}} = 2
^ 乘方 10 1 {{#expr: 2^3}} = 8
sqrt 开方 10 1 {{#expr: sqrt9}} = 3
ln 对数 10 1 {{#expr: ln10}} = 2.302585092994
log28(换底):{{#expr: ln8 div ln2}} = 3
支持:
sin、cos、tan
不支持:
csc、sec、cot
三角函数 10 1 弧度制:{{#expr:sin45}} = 0.85090352453412
角度制:{{#expr:cos(45 * pi div 180)}} = 0.70710678118655
支持:
asin、acos、atan
不支持:
acsc、asec、acot
反三角函数 10 1 弧度制:{{#expr:asin0.5}} = 0.5235987755983
角度制:{{#expr:(asin 0.5)*180/pi}} = 30

注意:

  1. round运算后接入的是数位,正方向向小数位:
    • {{#expr: 33.44 * 55.68 round 2}} → 1861.94(舍入至最近的整百数)
    • {{#expr: 33.44 * 55.68 round -2}} → 1900(舍入至第3位)
    • {{#expr: 33.44 * 55.68 round -20}} → 0
    • {{#expr: 33.44 * 55.68 round -2.9}} → 1900(数位会自动舍去小数位,但这是十分危险的做法,不推荐使用 )
  2. 逻辑运算符把假映射为0,把真映射为非0,且返回值只有0(假)或1(真)。
  3. 同一表达式中先计算高优先级运算。括号优先级高于一切。
  4. 浮点误差有可能造成某些运算的不可预料的结果,特别是最后几位数字的不精确。因此在使用此函数进行非整数运算时,注意不要进行比较运算。
  5. 表达式的返回值可能是无法再计算的值(比如用科学计数法表示的数:{{#expr: 100000000000000000}} → 1.0E+17),或者有一部分有效数字没有显示出来。此时该值相当可能难以运算,因此在使用此函数进行运算时,须注意这些问题。
  6. 判断一个值的范围时,不能使用{{#expr: 1 <= 123 < 50}}这样的形式(输出值为1)。可以使用{{#expr: 1 <= 123 and 123 < 50}}的形式(输出值为0)。

当表达式有误时函数会返回一个错误信息,此时无法再继续计算,请注意。

{{#if: X | A | B }} {{#if: X | A | B }} → A
{{#if: | A | B }} → B
{{#if: | A }}
该函数用于条件逻辑判断:
  • 如果X处为非空字符串(忽略前导后缀的空格)那么执行A(以wikitext格式解析);
  • 如果X处为空或只有空格那么执行B(以wikitext格式解析);
    • 如果B被省略则输出为空。
{{#ifeq: X | Y | A | B }} {{#ifeq: 1 | 0 | A | B }} → B
{{#ifeq: 1 | 1 | A | B }} → A
该函数用于条件逻辑判断:
  • 如果X == Y(忽略前导后缀的空格)那么执行A(以wikitext格式解析);
  • 否则执行B(以wikitext格式解析);
    • 如果B被省略则输出为空。

注:{{#if: X | A | B }} == {{#ifeq: X | | B | A }}但是在写代码时请采用前一种,以提高可读性。

{{#iferror: X | A | B }} {{#iferror: <span class="error"></span> | error | correct}} → error
{{#iferror: I'm fine. | error}} → I'm fine.
{{#iferror: {{#rel2abs: ../../../../quok | Help:Foo/bar/baz}}}}
该函数用于条件逻辑判断:
  • 如果X包含class="error"那么执行A(以wikitext格式解析);
    • 如果A被省略则输出为空;
  • 否则执行B(以wikitext格式解析);
    • 若B被省略则输出X。

该函数相当适合于执行可能会报错的其他的解释器函数(比如#expr,#time和#rel2abs)、隐藏模板错误(比如模板循环和模板递归)以及隐藏一些其它的解释器“软错误”(如Lua模块、Widget等)。

{{#ifexist: 页面标题 | A | B }} {{#ifexist: Main Page | A | B }} → A
{{#ifexist: 肯定不存在的标题 | A | B }} → B
{{#ifexist: 肯定不存在的标题 | A }}
{{#ifexist: File:Box-1.png | A | B }} → B
{{#ifexist: Image:Box-1.png | A | B }} → B
{{#ifexist: Media:Box-1.png | A | B }} → A
[高开销][1] 该函数用于条件逻辑判断:
  • 如果页面标题对应的页面存在,那么执行A(以wikitext格式解析);
  • 否则执行B(以wikitext格式解析);
    • 如果B被省略则输出为空。

注意:

  1. 如果某个页面A(例如本页面)使用了该函数检查另一个页面B(例如“肯定不存在的标题”)是否存在,那么Special:链入页面就能查询到A链接到了B(例如Special:链入页面/肯定不存在的标题),Special:需要的页面也会显示B需要被创建;
  2. 如果要检查萌娘共享里的文件,则需要使用Media:前缀。
    • 使用File:Image:前缀时只检查本地wiki(萌百)上有无对应页面(例如File:Box-1.png
    • 从这里也能看出,该函数只检查页面是否存在,不考虑页面是否有内容亦不考虑页面是否按共享文件页面显示(如上所示,File:Box-1.png为蓝链而{{#ifexist: File:Box-1.png | A | B }}却仍然返回B)
{{#ifexpr: Fx(表达式) | A | B }} {{#ifexpr: 1+1 | A | B }} → A
{{#ifexpr: 1-1 | A | B }} → B
{{#ifexpr: 1-1 | A }}
该函数用于条件逻辑判断:
  • 如果Fx != 0,那么执行A(以wikitext格式解析);
  • 否则执行B(以wikitext格式解析);
    • 如果B被省略则输出为空。

注:{{#ifexpr: Fx(表达式) | A | B }} == {{#ifeq: {{#expr: Fx(表达式)}} | 0 | B | A }}

{{#switch: X | Y = A | #default = B}}
{{#switch: 1
| 0 = A
| 1 = B
| #default = C
}}

→ B

{{#switch: 2
| 0 = A
| 1 = B
| C
}}

→ C

该函数用于条件逻辑判断:
  • 对于输入值X,函数会与每一个预设值Y做比较,如果相同(不考虑前导后缀空格)则执行对应结果(以wikitext格式解析);
    • 预设值与结果以=连接,作为参数提交给函数;
    • 如果预设值没有对应的结果则会将后面的第一个结果加以执行(例如:{{#switch: X | Y | Z = 1}}X == Y时输出1);
  • 如果没有任何一个预设值与输入值相同,则执行#default给出的默认结果;
    • 可以不设定默认结果;
    • 可以省略#default=,即用没有等号的最后一个参数作为默认值。

注意: 当一个参数没有带有=时,该参数会依照下列逻辑被分类:

  • 如果该参数不是最后一个参数,那么它将被作为预设值考虑;
  • 否则它将被作为默认结果考虑。
{{#time: 格式参数 }}
{{#time: 格式参数 | 时间参数 }}
{{#time: 格式参数 | 时间参数 | 语言代码}}
{{#time: 格式参数 | 时间参数 | 语言代码 | 是否使用本地时区}}
{{#time: Y/m/d}} → 2024/11/22
{{#time: Y/m/d|2017-01-04}} → 2017/01/04
{{#time: F d H:i:s|+1 second}} → 11月 22 04:07:35
{{#time: F d H:i:s|+1 second|en}} → November 22 04:07:35
{{#time: F d H:i:s|+1 second|zh|1}} → 11月 22 12:07:35
该函数用来输出时间:
  • 格式参数用于指定输出的时间的格式,下表以样例时间为例说明各格式参数的作用。特别注意:系统默认时区为UTC+0,所以以下结果默认以协调世界时为依据,中国标准时间仅供本地时间对应,更改时区的办法参见表格后的说明部分。此处只列举常见的参数,更多参数请浏览帮助:扩展:解析器函数##time
    样例时间
    协调世界时 (UTC) 2024年11月22日(星期五)04时07分34秒
    中国标准时间 (CST) 2024年11月22日(星期五)12时07分34秒
    格式参数 说明(点击可按年月日时分秒顺序排序) 显示结果
    A 根据时间是上午还是下午,输出AMPM AM
    a 根据时间是上午还是下午,输出ampm am
    c 输出长日期(ISO 8601格式) 2024-11-22T04:07:34+00:00
    D 星期数,以一个汉字显示
    d 日期日数,补足前导0 22
    e 时区名 UTC
    F或M 月份,以当前语言输出 11月
    G 小时数,24小时制,不补足前导0 4
    g 小时数,12小时制,不补足前导0 4
    H 小时数,24小时制,补足前导0 04
    h 小时数,12小时制,补足前导0 04
    I 是否使用夏令时,若是返回1,若否返回0 0
    i 分钟数,补足前导0 07
    j 日期日数,无前导0 22
    L 如果是闰年则为1,否则为0。 1
    l 日期星期数,3位汉字 星期五
    m 月份数,补足前导0 11
    N 星期数,星期一为1,星期日为7 5
    n 月份数,无前导0 11
    O 系统时区与GMT的差值,不含冒号 +0000
    o 日期的 ISO-8601 格式年份(详见下方说明) 2024
    P 系统时区与GMT的差值,含冒号 +00:00
    r 英文长日期格式(ISO 8601格式) Fri, 22 Nov 2024 04:07:34 +0000
    s 秒数 34
    T 时区缩写 UTC
    t 该月天数 30
    U UNIX时间戳 1732248454
    W 日期周数,显示日期为当年第几周,补足前导0 47
    w 星期数,星期日为0,星期六为6 5
    Y 日期年份,4位数字 2024
    y 日期年份,2位数字 24
    Z 系统时区与GMT的差值,以秒为单位 0
    z 显示日期为当年第几日(1月1日是第0天) 326
  • 时间参数可以使用绝对时间,如“2008-12-31 23:59:59”,也可以使用相对时间,如“+7 days”或者“-5 hours”得到默认时间7日之后或默认时间5小时之前的时间。也可以二者混合使用,比如{{#time:Y-m-d H:i:s|2001-2-3 04:05:06 +1 year +2 months +3 days +4 hours +5 minutes +6 seconds}} → 2002-04-06 08:10:12
    时间参数也可以使用Unix时间戳,这需要在时间戳前添加@,如{{#time:Y-m-d H:i:s|@981144306}} → 2001-02-02 20:05:06,但如果在非Unix时间戳前添加@则很可能导致一个错误,详见帮助:扩展:解析器函数##time
  • 语言代码可以指定为mw支持的任意语言,例如en、zh-hant、ja之类的
  • 格式参数里的o指的是 ISO-8601 格式年份,在大部分情况下是和Y一致的。但其计算规则如下:
    • 每年第1个周一起开始计算星期数(W),一年按52个星期计;
    • 被这52个星期覆盖到的日期,即使是在下一年度也视为当年;
    • 未被这52个星期覆盖到的日期,在当年开头的部分视为上一年度,在当年结尾的部分视为下一年度。
    例如:2022年的第1个周一是1月3日,那么未被覆盖到的1月1日和1月2日视为上一年度,对应的o2021
  • 是否使用本地时区参数将会被传递给PHP解释器,若被解释为true则使用萌百本地时区(CST)

注意:

  • 如果想要输出字母本身,而该字母又是属于格式参数的一种时,可以用英文双引号包裹:{{#time: "Y/m/d" == Y/m/d}} → Y/m/d == 2024/11/22
  • 本函数支持的时间范围为1年1月1日~9999年12月31日,但特定的时间范围会有奇怪的结果,详见帮助:扩展:解析器函数##time
{{#timel: 格式参数 }}
{{#timel: 格式参数 | 时间参数 }}
{{#timel: 格式参数 | 时间参数 | 语言代码}}
{{#timel: Y/m/d}} → 2024/11/22
{{#timel: Y/m/d|2017-01-04}} → 2017/01/04
{{#timel: Y/m/d H:i:s|+1 second}} → 2024/11/22 12:07:35
{{#timel: Y/m/d H:i:s|+1 second|en}} → 2024/11/22 12:07:35
{{#timel: e}} → PRC
{{#timel: O}} → +0800
{{#timel: P}} → +08:00
{{#timel: T}} → CST
{{#timel: Z}} → 28800
该函数与{{#time}}几乎一致,除了没有参数4并且强制使用本地时区以外。
变量(来自扩展:Variables)
{{#vardefine: 变量名 | 变量值}} - 变量值 赋给一个名为 变量名 的变量
{{#vardefineecho: 变量名 | 变量值}} {{#vardefineecho: hello | world}} → world 变量值 赋给一个名为 变量名 的变量,并输出 变量值
{{#var: 变量名}}
{{#var: 变量名 | 默认值}}
{{#var: hello}} → world
{{#var: foo | no-op}} → no-op
输出名为 变量名 的变量的值,如果没有名为 变量名 的变量则输出默认值
{{#varexists: 变量名}}
{{#varexists: 变量名 | 存在时的返回值}}
{{#varexists: 变量名 | 存在时的返回值 | 不存在时的返回值}}
{{#varexists: hello}} → 1
{{#varexists: foo | exist}}
{{#varexists: foo | exist | does not exist}} → does not exist
判断是否存在一个名为 变量名 的变量,若存在则返回 存在时的返回值(默认为 1),若不存在则返回 不存在时的返回值(默认为
{{#var_final: 变量名}}
{{#var_final: 变量名 | 默认值}}
{{#var_final: index}} → 5
  • 该变量在下一行({{#while:)才被赋值,可用来观察效果

{{#var_final: foo | <u>no-op</u>}}no-op

在解析器解析到该魔术字时,先展开 默认值 对应的 wikitext,然后等待解析器解析完全文:
  • 若解析完全文后存在一个名为 变量名 的变量则输出该变量(这意味着该魔术字不能用作其他模板/魔术字的参数);
  • 若解析完全文后发现不存在名为 变量名 的变量则输出 默认值

注意:不论 默认值 是否用得上,其内的 wikitext 都会被执行,您可以在沙盒里测试以下代码并观察页面标题:{{#vardefine: hello | world}}{{#var_final: hello | {{DISPLAYTITLE: var_final 测试}}}}

循环(来自扩展:Loops)
每个页面中循环次数都不能大于99次,否则将抛出错误,因此,必须控制循环次数合理使用,对于模板中使用循环更是应该小心,最好不要超过20次,如果是某些可能在同一页面重复调用的模板,就一定不要使用循环了,若流程大体可控可以手动写出循环,或者在Lua模块中进行循环的操作。[2]
  • 以下的解析器函数中fornumargsforargs不占用循环次数
{{#while: | 条件 | 语句}}
{{#vardefine: index | 0 }}{{#while:
 | {{#ifexpr: {{#var: index }} < 5 | true }}
 | <nowiki></nowiki>
* {{#var: index }}{{#vardefine: index | {{#expr: {{#var: index }} + 1 }} }}
}}

  • 0
  • 1
  • 2
  • 3
  • 4
条件 不为空时执行 语句

注意:扩展:Loops会对所有传入的参数值去除开头结尾的空白字符(包括空格、换行等)后再处理,如果你不想你的换行被删除请使用 <nowiki></nowiki>放在换行处(如例子所示),下同。

{{#dowhile: | 条件 | 语句}}
{{#vardefine: i | 99 }}{{#dowhile:
 | {{#ifexpr: {{#var: i}} < 5 | true }}
 | <nowiki></nowiki>
* {{#var: i}}{{#vardefine: i| {{#expr: {{#var: index }} + 1 }} }}
}}

  • 99
先执行一次 语句,然后当 条件 不为空时继续执行语句(注意例子里的初始值)
{{#loop: 变量名 | 初始值 | 循环次数 | 语句}}
{{#loop: count
 | 1
 | 4
 | <nowiki></nowiki>
* This is round {{#var: count }} and we have {{#expr: 4 - {{#var: count }} }} more to go
}}

  • This is round 1 and we have 3 more to go
  • This is round 2 and we have 2 more to go
  • This is round 3 and we have 1 more to go
  • This is round 4 and we have 0 more to go
循环执行语句:
  1. 初始值 赋给一个名为 变量名 的变量;
  2. 然后开始循环,次数为 循环次数 的绝对值:
    1. 执行 语句
    2. 循环次数 为正整数,则将名为 变量名 的变量的值增加 1;若 循环次数 为负整数,则将名为 变量名 的变量的值减少 1。
{{#forargs: 变量名前缀 | 索引变量名 | 值变量名 | 语句}} 若模板 Template:Loops Test 的内容如下:
{{#forargs: arg
 | key
 | value
 | <nowiki></nowiki>
* {{#var: key }} = {{#var: value }}
}}
那么若调用如下代码:
{{Loops Test
 | arg1=val1
 | spam=spammity
 | arg5=val5
 | argument=value
}}

则输出:

  • 1 = val1
  • 5 = val5
  • ument = value
遍历参数:
  • 若参数名开头为 变量名前缀(如例子中的arg1argument等):
    1. 将切除开头的 变量名前缀 后的参数名赋给名为 索引变量名 的变量;
    2. 将该参数的值赋给名为 值变量名 的变量;
    3. 执行语句。

变量名前缀 可以为空,此时将会对所有的参数进行循环且不对参数名做操作直接赋值给名为 索引变量名 的变量。

循环顺序按照参数传入的先后顺序。注意Lua展开模板无视参数顺序,所以使用Lua展开带有{{#forargs:}}的模板(例如使用{{ptl}})时可能会有预期之外的结果。

{{#fornumargs: 索引变量名 | 值变量名 | 语句}} 若模板 Template:Loops Test 的内容如下:
{{#fornumargs: number
 | value
 | <nowiki></nowiki>
* {{#var: number }} = {{#var: value }}
}}
那么若调用如下代码:
{{Loops Test
  |     Alfa
  | B = Bravo
  |     Charlie
  | 5 = Echo
}}

则输出:

  • 1 = Alfa
  • 2 = Charlie
  • 5 = Echo
遍历参数:
  • 若参数名为纯数字(未指定参数名的参数按其出现的先后顺序编号(只在未指定参数名的参数范围内编号,如例子中的Charlie对应的是2)):
    1. 将参数名赋给名为 索引变量名 的变量;
    2. 将该参数的值赋给名为 值变量名 的变量;
    3. 执行语句。

循环顺序按照数字参数的数字大小顺序:即使上例中5 = Echo放在Alfa之前,5 = Echo仍会最后输出。

杂项
{{#language:语言代码}}
{{#language:语言代码|目标语言代码}}
{{#language:zh-cn}} → 中文(中国大陆)
{{#language:zh-cn|en-us}} → 中文(中国大陆)
以参数2的语言代码指定的语言(没有则以参数1的)输出参数1的语言代码对应的语言全名
{{#special:特殊页面名}} {{#special:watchlist}} → Special:监视列表 输出指定标准名称的特殊页面的本地化名。

可以在函数名后加e以输出经MediaWiki URL编码规则编码后的页面名:

  • {{#speciale:watchlist}} → Special:%E7%9B%91%E8%A7%86%E5%88%97%E8%A1%A8
{{#tag:标签名称|内容|属性1=属性值1|属性2=属性值2|……}} {{#tag:div|右浮动|style="border: 1px gray solid; float: right; clear: both; padding: 1em;"}}
右浮动



{{#tag:nowiki|{{草}}}} → <span title="草">[[File:大草字.svg|20px|link=W(网络用语)]]</span>

<nowiki>{{草}}</nowiki> → {{草}}

输出一个元素的HTML源码,参数1为其标签名,参数2为其内容,参数3及之后为其属性值对。请不要向参数1传入自闭合标签名,如br、img、hr等。

内容中的wikitext会在tag函数渲染之前完成渲染,并与往常一样阻止不受信任的代码渲染。 因此若标签为nowiki且内容有使用模板则会输出其模板输出结果的代码。 (pre标签同理)

如果内容需要为空,则参数2必须为空,而不是省略

不支持noinclude、includeonly。

{{#invoke:模块名|函数名|参数1|参数2|……}} (根据指定模块输出) Lua模块的调用方法
{{DISPLAYTITLE:标题}}
{{DISPLAYTITLE:标题|noerror}}
{{DISPLAYTITLE:标题|noreplace}}
- 本函数用以对当前页面的标题的格式做出变换,该函数并不会修改页面本来的标题(注)在url中显示的标题,只是更改了页面中标题显示的文字和效果,例如改变大小写、下划线替代空格等。

参数1为“noerror”或“noreplace”时,会阻止由于使用多个该函数而导致的错误抛出。

{{DEFAULTSORT:分类索引}}
{{DEFAULTSORTKEY:分类索引}}
{{DEFAULTCATEGORYSORT:分类索引}}
{{DEFAULTSORT:分类索引|noerror}}
{{DEFAULTSORT:分类索引|noreplace}}
- 本函数用以改变当前页面在分类中的索引,比如{{DEFAULTSORT:A}}会把页面分到A部分下。

参数1为“noerror”或“noreplace”时,会阻止由于使用多个该函数而导致的错误抛出。

{{#choose:选项1|选项2|选项3}} {{#choose:选项1|选项2|选项3}} → 选项2 等概率随机选择选项中的一个作为输出。
{{#cscore:UserName|参数}} {{#cscore:示例用户|score}} → {{#cscore:示例用户|score}}
{{#cscore:示例用户|changes}} → {{#cscore:示例用户|changes}}
{{#cscore:示例用户|pages}} → {{#cscore:示例用户|pages}}
获取用户的编辑页面数(pages)/编辑次数(changes)/战斗力(score)。

参见

MediaWiki官方文档
魔术字
帮助:扩展:解析器函数
  1. 由于萌百使用了缓存,因此使用该函数检测主站页面可能不会被标记为高开销,只有检测多媒体文件(Media虚拟名字空间)会触发,但仍应该避免在同一页面中大量使用。
  2. User:东东君/从零开始的模板教程#循环语句