帮助:解析器函数
本页面几乎是moe:help:魔术字/解析器函数的复制品。 由于编辑者懒癌大犯,阅读此页面请领会精神。
本页面把必定会执行成的效果保留结果。
解析器函数与系统变量非常相似,但与后者相比,前者全部要求至少传入一个参数,所有的参数1与函数名之间均用:
而不是|
分割。
解析器函数有时会在函数名前加上#
用以与模板区分。
URL与标题的数据和解析[编辑]
以下表格详细说明了目前可用的解析器函数,部分术语未作解释。
解析器函数 | 输入 → 输出 | 描述 |
---|---|---|
{{localurl:页面名称}} {{localurl:页面名称|查询字符串}} |
{{localurl:1}} → /wiki/1
|
指定页面的相对路径 |
{{fullurl:页面名称}} {{fullurl:页面名称|查询字符串}} {{fullurl:跨wiki前缀:远程页面名称|查询字符串}} |
{{fullurl:1}} → https://nmfwiki.miraheze.org/wiki/1
|
指定页面的相对协议路径,该解析器函数也能识别跨wiki前缀。
注意:未被方括号包裹起来的相对协议路径不会自动生成为链接 |
{{canonicalurl:页面名称}} {{canonicalurl:页面名称|查询字符串}} {{canonicalurl:interwiki:远程页面名称|查询字符串}} |
{{canonicalurl:Category:帮助}} → https://nmfwiki.miraheze.org/wiki/%E5%88%86%E7%B1%BB:%E5%B8%AE%E5%8A%A9
|
指定页面的绝对协议路径,该解析器函数也能识别跨Wiki前缀。 |
{{filepath:文件名称}} {{filepath:文件名称|缩略图大小}} {{filepath:文件名称|nowiki}} |
{{filepath:001.gif}} → //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
|
输出指定字符串经编码后的结果。不同的参数指定不同的编码规则,用于解析页面标题到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
|
本函数用于以通用的命令行目录变换格式来变换页面路径:
对于不合法的参数1,函数并不会直接抛出错误,而是尝试剔除错误部分继续工作:
|
{{#titleparts: 要解析的标题 | 要返回的层数 | 返回部分的起始点}} |
{{#titleparts: Talk:Foo/bar/baz/quok | 2}} → 讨论:Foo/bar
|
该函数用于输出给定标题的一部分:
注意:
|
名字空间[编辑]
名字空间解析器函数{{ns:}}
返回标准名字空间的本地化名称或自定义名字空间的名称,参数1可以指定名字空间的ID,标准名字空间的MediaWiki标准名称、本地(语言变种)化名,自定义名字空间的名称:
{{ns:2}}
={{ns:User}}
={{ns:用户}}
= 用户{{ns:5}}
={{ns:Project Talk}}
={{ns:NMFWiki讨论{{ns:NMFWiki talk}}
→ NMFWiki讨论
需要注意的是:
- 该解析器函数的参数1可以使用Image,效果与File一致;
- 在解析器函数名后加一个
e
可以得到经MediaWiki URL编码规则编码后的标准名字空间的本地化名称或自定义名字空间的名称,很适合用于外链中:{{nse:5}}
→ NMFWiki%E8%AE%A8%E8%AE%BA
格式化函数[编辑]
解析器函数 | 输入 → 输出 | 描述 |
---|---|---|
{{formatnum:未格式化的数字}} {{formatnum:已格式化的数字|R}} {{formatnum:未格式化的数字|NOSEP}} |
简单例子:
高级例子:
错误的输入会导致无法预测的输出,不论是否有参数2
|
参数1接受任何阿拉伯数字,按照站点默认区域数字格式用分位符号分组,将其本地化后输出。
参数2有两个可接受字符串:
注意:
如果你真的需要输入一个无法保证格式正确的数字的话,你可以使用 |
{{#dateformat:日期}} {{#formatdate:日期}} {{#dateformat:日期|格式规则}} {{#formatdate:日期|格式规则}} |
|
参数1接受一个未格式化的日期,按照设置#显示里的「日期格式」设置将其格式化。对于未登录的读者和未设置日期格式的用户,可以通过参数2指定格式:mdy 、dmy 、ymd (输出的字母全小写)。若参数1只给出月日,那么只有mdy 和dmy 才是有效的格式。如果未指定格式或者格式无效,那么参数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
|
将参数1通过在左侧补上参数3指定的字符串(默认为0)补足到参数2指定的长度,参数3指定的字符串可能被截断以保证补足后的字符串长度满足要求 |
{{padright:原字符串|补足后的字符串长度}} {{padright:原字符串|补足后的字符串长度|补足用的字符串}} |
{{padright:xyz|5}} → xyz00
|
与{{padleft:}} 近乎一样,只是在右边补足
|
本地化函数[编辑]
解析器函数 | 输入 → 输出 | 描述 |
---|---|---|
{{plural:数字|单数形式|复数形式}} |
{{plural:0|is|are}} → are
|
根据参数1是单数还是复数,输出不同的字符串:单数输出参数2,复数输出参数3。判断是否单复数的标准是{{#switch: 1 | {{{1}}} | {{#expr: {{{1}}} }} = true | #defualt = false}} 。
|
{{gender:指定用户名|男性时的文本|女性时的文本|未选择性别时的文本}} {{gender:|男性时的文本|女性时的文本|未选择性别时的文本}} {{gender:.|男性时的文本|女性时的文本|未选择性别时的文本}} |
{{gender:坑触可|男|女|中}} →中
|
根据指定的用户的设置#用户资料的「语言」设置中的性别部分,返回该性别对应的文本。
注意:
|
{{int:信息名称}} |
{{int:edit}} → 编辑
|
返回指定信息的界面语言变种翻译。可以在MediaWiki:信息标准名(en-US)/界面语言变种 里找到,亦可以修改。
对于部分信息,可以提供参数给它们,它们可以通过$1、$2……获取这些参数,在第二个例子里,MediaWiki替换了$1。 这种用法相较于 |
特殊嵌入[编辑]
解析器函数 | 输入 → 输出 | 描述 |
---|---|---|
{{:(主)名字空间页面名}} |
(主名字空间页面) | 通过: 将名字空间强制指定为(主),从而嵌入(主)名字空间的页面
|
{{msg:与某一魔术字重名的模板名}} {{raw:与某一魔术字重名的模板名}} |
(模板正常渲染内容) | 与{{模板:与某一魔术字重名的模板名}} 一样可以避免魔术字与模板名冲突,而直接嵌入模板
|
{{msgnw:模板名}} |
{{msgnw:tl}} → {{[[模板:{{{1}}}|{{{1}}}]]{{#if:{{{2|}}}|{{!}}{{{2|}}}}}}}<noinclude>[[分类:链接模板]]
|
把模板的源码以纯文本形式输出,自带nowiki效果 |
{{subst:模板名}} |
(模板的正常渲染内容,而模板源码在替换完参数,删去<noinclude/> 内容后粘贴到页面源码中)
|
把模板的源码嵌入到页面源码中,参见moe:Help:替换引用 |
{{safesubst:模板名}} |
(模板的正常渲染内容。当上层模板是被正常嵌套时按正常方式被嵌套;而当上层模板是被替换引用时,模板源码在替换完参数,删去<noinclude/> 内容后粘贴到页面源码中)
|
运算与逻辑判断[编辑]
来自 扩展:解析器函数。
解析器函数 | 输入 → 输出 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
{{#expr: 数学表达式 }} |
{{#expr: 1 and -1 }} → 1{{#expr: ---...---1}}(95个「-」) = -1
|
本函数计算并返回数学表达式的结果,你可以使用+、-、*、/ 来进行计算。本函数将e (自然对数的底数)、pi (π)作为常数使用。本函数支持的运算符如下所示:
注意:
当表达式有误时函数会返回一个错误信息,此时无法再继续计算,请注意。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{{#if: X | A | B }} |
{{#if: X | A | B }} → A
|
该函数用于条件逻辑判断:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{{#ifeq: X | Y | A | B }} |
{{#ifeq: 1 | 0 | A | B }} → B
|
该函数用于条件逻辑判断:
{{#if: X | A | B }} == {{#ifeq: X | | A | B }} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{{#iferror: X | A | B }} |
{{#iferror: <span class=error></span> | error | correct}} → error
|
该函数用于条件逻辑判断:
该函数相当适合于执行可能会报错的其他的解释器函数(比如#expr,#time和#rel2abs)、隐藏模板错误(比如模板循环和模板递归)以及隐藏一些其它的解释器「软错误」(如Lua模块、Widget等)。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{{#ifexist: 页面标题 | A | B }} |
{{#ifexist: Main Page | A | B }} → B
|
[高开销] 该函数用于条件逻辑判断:
注意:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{{#ifexpr: Fx(表达式) | A | B }} |
{{#ifexpr: 1+1 | A | B }} → A
|
该函数用于条件逻辑判断:
{{#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 |
该函数用于条件逻辑判断:
注意:
当一个参数没有带有
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{{#time: 格式参数 }} {{#time: 格式参数 | 时间参数 }} {{#time: 格式参数 | 时间参数 | 语言代码}} {{#time: 格式参数 | 时间参数 | 语言代码 | 是否使用本地时区}} |
{{#time: Y/m/d}} → 2024/04/14
|
该函数用来输出时间:
注意:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{{#timel: 格式参数 }} {{#timel: 格式参数 | 时间参数 }} {{#timel: 格式参数 | 时间参数 | 语言代码}} |
{{#timel: Y/m/d}} → 2024/04/15
|
该函数与{{#time}} 几乎一致,除了没有参数4并且强制使用本地时区以外。
|
变量[编辑]
来自 扩展:Variables.
解析器函数 | 输入 → 输出 | 描述 |
---|---|---|
{{#vardefine: 变量名 | 变量值}} |
将 变量值 赋给一个名为 变量名 的变量 | |
{{#vardefineecho: 变量名 | 变量值}} |
{{#vardefineecho: hello | world}} → world
|
将 变量值 赋给一个名为 变量名 的变量,并输出 变量值 |
{{#var: 变量名}} {{#var: 变量名 | 默认值}} |
{{#var: hello}} → world
|
输出名为 变量名 的变量的值,如果没有名为 变量名 的变量则输出默认值 |
{{#varexists: 变量名}} {{#varexists: 变量名 | 存在时的返回值}} {{#varexists: 变量名 | 存在时的返回值 | 不存在时的返回值}} |
{{#varexists: hello}} → 1
|
判断是否存在一个名为 变量名 的变量,若存在则返回 存在时的返回值(默认为 1 ),若不存在则返回 不存在时的返回值(默认为 空)
|
{{#var_final: 变量名}} {{#var_final: 变量名 | 默认值}} |
{{#var_final: index}} → 5
|
在解析器解析到该魔术字时,先展开 默认值 对应的 wikitext,然后等待解析器解析完全文:
注意:不论 默认值 是否用得上,其内的 wikitext 都会被执行,您可以在沙盒里测试以下代码并观察页面标题: |
循环[编辑]
来自 扩展:Loops.
每个页面中循环次数都不能大于99次,否则将抛出错误,因此,必须控制循环次数合理使用,对于模板中使用循环更是应该小心,最好不要超过20次,如果是某些可能在同一页面重复调用的模板,就一定不要使用循环了,若流程大体可控可以手动写出循环,或者在Lua模块中进行循环的操作。[1]
- 以下的解析器函数中
fornumargs
及forargs
不占用循环次数。
解析器函数 | 输入 → 输出 | 描述 |
---|---|---|
{{#while: | 条件 | 语句}} |
{{#vardefine: index | 0 }}{{#while: | {{#ifexpr: {{#var: index }} < 5 | true }} | <nowiki></nowiki> *{{#var: index }}{{#vardefine: index | {{#expr: {{#var: index }} + 1 }} }} }}→
|
当 条件 不为空时执行 语句
注意:扩展:Loops会对所有传入的参数值去除开头结尾的空白字符(包括空格、换行等)后再处理,如果你不想你的换行被删除请使用 |
{{#dowhile: | 条件 | 语句}} |
{{#vardefine: i | 99 }}{{#dowhile: | {{#ifexpr: {{#var: i}} < 5 | true }} | <nowiki></nowiki> *{{#var: i}}{{#vardefine: i| {{#expr: {{#var: index }} + 1 }} }} }}→
|
先执行一次 语句,然后当 条件 不为空时继续执行语句(注意例子里的初始值) |
{{#loop: 变量名 | 初始值 | 循环次数 | 语句}} |
{{#loop: count | 1 | 4 | <nowiki></nowiki> *This is round {{#var: count }} and we have {{#expr: 4 - {{#var: count }} }} more to go }}→
|
循环执行语句:
|
{{#forargs: 变量名前缀 | 索引变量名 | 值变量名 | 语句}} |
若 模板:Loops Test 的内容如下:{{#forargs: arg | key | value | <nowiki></nowiki> *{{#var: key }} = {{#var:value}} }}那么若调用如下代码: {{Loops Test | arg1=val1 | spam=spammity | arg5=val5 | argument=value }} 则输出:
|
遍历参数:
变量名前缀 可以为空,此时将会对所有的参数进行循环且不对参数名做操作直接赋值给名为 索引变量名 的变量。 |
{{#fornumargs: 索引变量名 | 值变量名 | 语句}} |
若 模板:Loops Test 的内容如下:{{#fornumargs: number | value | <nowiki></nowiki> *{{#var:number}} = {{#var:value}} }}那么若调用如下代码: {{Loops Test | Alfa | B = Bravo | Charlie | 5 = Echo }} 则输出:
|
遍历参数:
|
杂项[编辑]
解析器函数 | 输入 → 输出 | 描述 |
---|---|---|
{{#language:语言代码}} {{#language:语言代码|目标语言代码}} |
{{#language:zh-cn}} → 中文(中国大陆)
|
以参数2的语言代码指定的语言(没有则以参数1的)输出参数1的语言代码对应的语言全名 |
{{#special:特殊页面名}} |
{{#special:watchlist}} → 特殊:监视列表
|
输出指定标准名称的特殊页面的本地化名。
可以在函数名后加e以输出经MediaWiki URL编码规则编码后的页面名:
|
{{#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」时,会阻止由于使用多个该函数而导致的错误抛出。 |
参见[编辑]
- MediaWiki
|