帮助:解析器函数

NMFWiki,网易我的世界论坛的百科全书!转载请声明引自NMFWiki。
跳转到导航 跳转到搜索

本页面几乎是moe:help:魔术字/解析器函数的复制品。 由于编辑者懒癌大犯,阅读此页面请领会精神

本页面把必定会执行成的效果保留结果。

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

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

URL与标题的数据和解析[编辑]

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

解析器函数 输入 → 输出 描述
{{localurl:页面名称}}
{{localurl:页面名称|查询字符串}}
{{localurl:1}} → /wiki/1

{{localurl:1|printable=yes}} → /wiki/1?printable=yes

指定页面的相对路径
{{fullurl:页面名称}}
{{fullurl:页面名称|查询字符串}}
{{fullurl:跨wiki前缀:远程页面名称|查询字符串}}
{{fullurl:1}}https://nmfwiki.miraheze.org/wiki/1

{{fullurl:1|action=edit}}https://nmfwiki.miraheze.org/wiki/1?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://nmfwiki.miraheze.org/wiki/%E5%88%86%E7%B1%BB:%E5%B8%AE%E5%8A%A9

{{canonicalurl:Category:帮助|action=edit}}https://nmfwiki.miraheze.org/wiki/%E5%88%86%E7%B1%BB:%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:001.gif}} → //static.miraheze.org/nmfwikiwiki/1/15/001.gif

{{filepath:001.gif|120}} → //static.miraheze.org/nmfwikiwiki/thumb/1/15/001.gif/120px-001.gif

{{filepath:001.gif|nowiki}} → //static.miraheze.org/nmfwikiwiki/1/15/001.gif

指定文件的绝对协议路径,可以指定缩略图大小(仅能指定宽度大小,单位为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;如果你不清楚如何选择时,你可以到NT:讨论区求助
{{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}} → 讨论:Foo/bar

{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2}} → bar/baz

{{#titleparts: Talk:Foo/bar/baz/quok | -2}} → 讨论: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}} → 讨论:A/b/c
    5. 若参数1不合法则会被直接输出{{#titleparts: [[N:首页]]/123 | 1 | 2}}N:首页/123

名字空间[编辑]

名字空间解析器函数{{ns:}}返回标准名字空间的本地化名称或自定义名字空间的名称,参数1可以指定名字空间的ID,标准名字空间的MediaWiki标准名称、本地(语言变种)化名,自定义名字空间的名称:

  • {{ns:2}} = {{ns:User}} = {{ns:用户}} = 用户
  • {{ns:5}} = {{ns:Project Talk}} = {{ns:NMFWiki讨论{{ns:NMFWiki talk}} → NMFWiki讨论

需要注意的是:

  1. 该解析器函数的参数1可以使用Image,效果与File一致;
  2. 在解析器函数名后加一个e可以得到经MediaWiki URL编码规则编码后的标准名字空间的本地化名称或自定义名字空间的名称,很适合用于外链中:
    • {{nse:5}} → NMFWiki%E8%AE%A8%E8%AE%BA

格式化函数[编辑]

解析器函数 输入 → 输出 描述
{{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 只会在不使用zhwiki:印度-阿拉伯数字系统的语言中将数字字符进行转换。NOSEP 参数还会防止出现意外的非标准数字分组。。

注意

  1. 开头的前导零不会被去除,如果你要去除请使用{{#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}} → data 将字符串完全小写化
{{lcfirst:字符串}}
{{lcfirst:DATA test}} → dATA test 将字符串首字母小写化
{{uc:字符串}}
{{uc:text}} → TEXT 将字符串完全大写化
{{ucfirst:字符串}}
{{ucfirst:text TEST}} → Text TEST 将字符串首字母大写化
{{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 | #defualt = false}}
{{gender:指定用户名|男性时的文本|女性时的文本|未选择性别时的文本}}
{{gender:|男性时的文本|女性时的文本|未选择性别时的文本}}
{{gender:.|男性时的文本|女性时的文本|未选择性别时的文本}}
{{gender:坑触可|男|女|中}}→中

{{gender:.|男|女|中}}→中

根据指定的用户的设置#用户资料的「语言」设置中的性别部分,返回该性别对应的文本。

注意

  1. 若参数4未给出,那么当用户设置为「中性」时使用男性文本;
  2. 若参数3未给出,那么当用户设置为「女性」时使用男性文本;
  3. 若参数1为空,则指定当前用户(未登录读者使用站点默认设置),但这种方式只能在系统消息页面使用;
  4. 若参数1为.,则使用站点默认设置。
{{int:信息名称}}
{{int:edit}} → 编辑

{{int:editsectionhint|MediaWiki}} → 编辑章节:MediaWiki

返回指定信息的界面语言变种翻译。可以在MediaWiki:信息标准名(en-US)/界面语言变种里找到,亦可以修改。

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

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

特殊嵌入[编辑]

解析器函数 输入 → 输出 描述
{{:(主)名字空间页面名}}
(主名字空间页面) 通过:将名字空间强制指定为(主),从而嵌入(主)名字空间的页面
{{msg:与某一魔术字重名的模板名}}
{{raw:与某一魔术字重名的模板名}}
(模板正常渲染内容) {{模板:与某一魔术字重名的模板名}}一样可以避免魔术字与模板名冲突,而直接嵌入模板
{{msgnw:模板名}}
{{msgnw:tl}} → &#123;&#123;[[模板:{{{1}}}|{{{1}}}]]{{#if:{{{2|}}}|{{!}}{{{2|}}}}}&#125;&#125;<noinclude>[[分类:链接模板]] 把模板的源码以纯文本形式输出,自带nowiki效果
{{subst:模板名}}
(模板的正常渲染内容,而模板源码在替换完参数,删去<noinclude/>内容后粘贴到页面源码中) 把模板的源码嵌入到页面源码中,参见moe: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
/
div
8 2 {{#expr: 30 / 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
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:sin45}} = 0.5235987755983

角度制:{{#expr:(asin 0.5)*180/pi}} = 30

注意:

  1. round运算对运算数正负,位数正负有不同表现:
    • {{#expr: 999 * 999 round -2}} → 998000
    • {{#expr: 999 * 999 round -20}} → 0
    • {{#expr: 999 * 999 round -2.9}} → 998000(这是十分危险的作法,不推荐使用)
  2. 逻辑运算符把假映射为0,把真映射为非0,且返回值只有0(假)或1(真)。
  3. 同一表达式中先计算高优先级运算。括号优先级高于一切。
  4. 浮点误差有可能造成某些运算的不可预料的结果,特别是最后几位数字的不精确。因此在使用此函数进行非整数运算时,注意不要进行比较运算。
  5. 表达式的返回值可能是无法再计算的值(比如用科学计数法表示的数:{{#expr: 100000000000000000}} → 1.0E+17),或者有一部分有效数字没有显示出来。此时该值相当可能难以运算,因此在使用此函数进行运算时,须注意这些问题。

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

{{#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 | | A | B }}
{{#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那么执行B(以wikitext格式解析);
    • 若B被省略则输出X;
  • 否则执行A(以wikitext格式解析);
    • 如果A被省略则输出为空。

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

{{#ifexist: 页面标题 | A | B }}
{{#ifexist: Main Page | A | B }} → B

{{#ifexist: 肯定不存在的标题 | A | B }} → B

{{#ifexist: 肯定不存在的标题 | A }}


{{#ifexist: File:Logo.png | A | B }} → B

{{#ifexist: Image:Logo.png | A | B }} → B

{{#ifexist: Media:Logo.png | A | B }} → A

[高开销] 该函数用于条件逻辑判断:
  • 如果《页面标题》对应的页面存在,那么执行A(以wikitext格式解析);
  • 否则执行B(以wikitext格式解析);
    • 若B被省略则输出为空。

注意:

  1. 若某个页面A(例如本页面)使用了该函数检查另一个页面B(例如「肯定不存在的标题」)是否存在,那么特殊:链入页面就能查询到A链接到了B(例如特殊:链入页面/肯定不存在的标题),特殊:需要的页面也会显示B需要被创建;
    • 使用File:Image:前缀时只检查本地Wiki上有无对应页面(例如File:Logo.png
    • 从这里也能看出,该函数只检查页面是否存在,不考虑页面是否有内容亦不考虑页面是否按共享文件页面显示(如上所示,File:Logo.png为蓝链而{{#ifexist: File:Logo.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/04/14

{{#time: Y/m/d|2017-01-04}} → 2017/01/04

{{#time: F d H:i:s|+1 second}} → 4月 14 21:53:00

{{#time: F d H:i:s|+1 second|en}} → April 14 21:53:00

{{#time: F d H:i:s|+1 second|zh|1}} → 4月 15 05:53:00

该函数用来输出时间:
  • 格式参数用于指定输出的时间的格式,下表以样例时间为例说明各格式参数的作用。特别注意:系统默认时区为UTC+0,所以以下结果默认以协调世界时为依据,中国标准时间仅供本地时间对应,更改时区的办法参见表格后的说明部分。此处只列举常见的参数,更多参数请浏览Help:扩展:解析器函数##time
    样例时间
    协调世界时 (UTC) 2024年4月14日(星期日)21时52分59秒
    中国标准时间 (CST) 2024年4月15日(星期一)05时52分59秒
    格式参数 说明 显示结果
    A 根据时间是上午还是下午,输出AM或PM PM
    a 根据时间是上午还是下午,输出am或pm pm
    c 输出长日期(ISO 8601格式) 2024-04-14T21:52:59+00:00
    D 星期数,以一个汉字显示
    d 日期日数,补足前导0 14
    F或M 月份,以当前语言输出 4月
    G或g 当前UTC时间小时数 21
    H或h 小时数,补足前导0 21
    i 分钟数,补足前导0 52
    j 日期日数 14
    L 日期星期数,1位数字,星期日为1,星期六为7 1
    l 日期星期数,3位汉字 星期日
    m 月份数,补足前导0 04
    N 星期数,星期一为1,星期日为7 7
    n 月份数 4
    r 英文长日期格式(ISO 8601格式) Sun, 14 Apr 2024 21:52:59 +0000
    s 秒数 59
    t 该月天数 30
    U UNIX时间戳 1713131579
    W 日期周数,显示日期为当年第几周,补足前导0 15
    w 星期数,星期日为0,星期六为6 0
    Y 日期年份,4位数字 2024
    y 日期年份,2位数字 24
    z 显示日期为当年第几日(1月1日是第0天) 104
  • 时间参数可以使用绝对时间,如「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时间戳前添加@则很可能导致一个错误,详见Help:扩展:解析器函数##time
  • 语言代码可以指定为mw支持的任意语言,例如en、zh-hant、ja之类的
  • 是否使用本地时区参数将会被传递给PHP解释器,若被解释为true则使用 NMFWiki 本地时区(CST)

注意:

  • 如果想要输出字母本身,而该字母又是属于格式参数的一种时,可以用英文双引号包裹:{{#time: "Y/m/d" == Y/m/d}} → Y/m/d == 2024/04/14
  • 本函数支持的时间范围为1年1月1日~9999年12月31日,但特定的时间范围会有奇怪的结果,详见Help:扩展:解析器函数##time
{{#timel: 格式参数 }}
{{#timel: 格式参数 | 时间参数 }}
{{#timel: 格式参数 | 时间参数 | 语言代码}}
{{#timel: Y/m/d}} → 2024/04/15

{{#timel: Y/m/d|2017-01-04}} → 2017/01/04

{{#timel: Y/m/d H:i:s|+1 second}} → 2024/04/15 05:53:00

{{#timel: Y/m/d H:i:s|+1 second|en}} → 2024/04/15 05:53:00

该函数与{{#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模块中进行循环的操作。[1]

  • 以下的解析器函数中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: 变量名前缀 | 索引变量名 | 值变量名 | 语句}}
模板: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. 执行语句。

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

{{#fornumargs: 索引变量名 | 值变量名 | 语句}}
模板: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. 执行语句。

杂项[编辑]

解析器函数 输入 → 输出 描述
{{#language:语言代码}}
{{#language:语言代码|目标语言代码}}
{{#language:zh-cn}} → 中文(中国大陆)

{{#language:zh-cn|en-us}} → Chinese (China)

以参数2的语言代码指定的语言(没有则以参数1的)输出参数1的语言代码对应的语言全名
{{#special:特殊页面名}}
{{#special:watchlist}} → 特殊:监视列表 输出指定标准名称的特殊页面的本地化名。

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

  • {{#speciale:watchlist}} → %E7%89%B9%E6%AE%8A:%E7%9B%91%E8%A7%86%E5%88%97%E8%A1%A8
{{#tag:标签名称|内容|属性1=属性值1|属性2=属性值2|……}}
{{#tag:div|右浮动|style="border:1px solid gray;float:right;padding:1em"}}
右浮动
输出一个元素的HTML源码,参数1为其标签名,参数2为其内容,参数3及之后为其属性值对。请不要向参数1传入自闭合标签名,如br、img、hr等。

内容中的wikitext会在tag函数渲染之前完成渲染,并与往常一样阻止不受信任的代码渲染。如果内容需要为空,则参数2必须为空,而不是省略

{{#invoke:模块名|函数名|参数1|参数2|……}}
(根据指定模块输出) Lua模块的调用方法
{{DISPLAYTITLE:标题}}
{{DISPLAYTITLE:标题|noerror}}
{{DISPLAYTITLE:标题|noreplace}}
- 本函数用以改变当前页面的标题的格式做出变换,该函数无法做出修改标题的行为,只能做出例如改变大小写、下划线替代空格等的修改。

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

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

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

参见[编辑]