帮助:魔术字/解析器函数:修订间差异

删除10,257字节 、​ 2020年7月19日 (星期日)
无编辑摘要
(// Edit via Wikiplus)
无编辑摘要
| <code><nowiki>{{padright:xyz|5}}</nowiki></code> → {{padright:xyz|5}}<br><code><nowiki>{{padright:xyz|5|_}}</nowiki></code> → {{padright:xyz|5|_}}<br><code><nowiki>{{padright:xyz|5|abc}}</nowiki></code> → {{padright:xyz|5|abc}}<br><code><nowiki>{{padright:xyz|7|abc}}</nowiki></code> → {{padright:xyz|7|abc}}<br><code><nowiki>{{padright:xyz|2}}</nowiki></code> → {{padright:xyz|2}}<br><code><nowiki>{{padright:|4|xyz}}</nowiki></code> → {{padright:|4|xyz}}
| 与<code><nowiki>{{padleft:}}</nowiki></code>近乎一样,只是在右边补足
|-
! colspan="3" style="background-color: #DDDDDD;" class="heading" id="{{anchorencode:本地化函数}}" | 本地化函数
|-
| <code><nowiki>{{plural:数字|单数形式|复数形式}}</nowiki></code>
| <code><nowiki>{{plural:0|is|are}}</nowiki></code> → {{plural:0|is|are}}<br><code><nowiki>{{plural:1*1|is|are}}</nowiki></code> → {{plural:1*1|is|are}}<br><code><nowiki>{{plural:21 mod 10|is|are}}</nowiki></code> → {{plural:21 mod 10|is|are}}<br><code><nowiki>{{plural:{{#expr:21 mod 10}}|is|are}}</nowiki></code> → {{plural:{{#expr:21 mod 10}}|is|are}}
| 根据参数1是单数还是复数,输出不同的字符串:单数输出参数2,复数输出参数3。判断是否单复数的标准是<code><nowiki>{{#switch: 1 | {{{1}}} | {{#expr: {{{1}}} }} = true | #defualt = false}}</nowiki></code>。
|-
| <code><nowiki>{{gender:指定用户名|男性时的文本|女性时的文本|未选择性别时的文本}}</nowiki></code><br><code><nowiki>{{gender:|男性时的文本|女性时的文本|未选择性别时的文本}}</nowiki></code><br><code><nowiki>{{gender:.|男性时的文本|女性时的文本|未选择性别时的文本}}</nowiki></code>
| <code><nowiki>{{gender:AnnAngela|男性时的文本|女性时的文本|未选择性别时的文本}}</nowiki></code>→{{gender:AnnAngela|男性时的文本|女性时的文本|未选择性别时的文本}}<br><code><nowiki>{{gender:|男性时的文本|女性时的文本|未选择性别时的文本}}</nowiki></code>→{{UserGender|男性时的文本|女性时的文本|未选择性别时的文本}}<br><code><nowiki>{{gender:.|男性时的文本|女性时的文本|未选择性别时的文本}}</nowiki></code>→{{gender:.|男性时的文本|女性时的文本|未选择性别时的文本}}
| 根据指定的用户的[[Special:参数设置#mw-prefsection-personal|设置#用户资料]]的“语言”设置中的性别部分,返回该性别对应的文本。
 
'''注意''':
# 如果参数4未给出,那么当用户设置为“中性”时使用男性文本;
# 如果参数3未给出,那么当用户设置为“女性”时使用男性文本;
# 如果参数1为空,则指定当前用户(未登录读者使用站点默认设置),但这种方式只能在系统消息页面使用;
# 如果参数1为<code><nowiki>.</nowiki></code>,则使用站点默认设置。
|-
| <code><nowiki>{{int:信息名称}}</nowiki></code>
| <code><nowiki>{{int:edit}}</nowiki></code> → {{int:edit}}<br><code><nowiki>{{int:editsectionhint|MediaWiki}}</nowiki></code> → {{int:editsectionhint|MediaWiki}}
| 返回指定信息的'''界面语言变种'''翻译。可以在<code><nowiki>MediaWiki:信息标准名(en-US)/界面语言变种</nowiki></code>里找到,亦可以修改。
 
对于部分信息,可以提供参数给它们,它们可以通过$1、$2……获取这些参数,在第二个例子里,MediaWiki替换了$1。
 
这种用法相较于<code><nowiki>{{MediaWiki:信息名称}}</nowiki></code>好处是可以根据用户的界面语言变种的变化而变化,也比模板更快加载,但它不会在编辑框下方的“{{int:templatesused}}”中出现。如果对应信息不存在的话,会以{{int:unexist}}出现.
|-
! colspan="3" style="background-color: #DDDDDD;" class="heading" id="{{anchorencode:特殊嵌入}}" | 特殊嵌入
**如果A被省略则输出为空。
该函数相当适合于执行可能会报错的其他的解释器函数(比如#expr,#time和#rel2abs)、隐藏模板错误(比如模板循环和模板递归)以及隐藏一些其它的解释器“软错误”(如Lua模块、Widget等)。
|- style="background:#FED;"
| <code><nowiki>{{#ifexist: 《页面标题》 | A | B }}</nowiki></code>
| <code><nowiki>{{#ifexist: Main Page | A | B }}</nowiki></code> → {{#ifexist: Main Page | A | B }}<br><code><nowiki>{{#ifexist: 肯定不存在的标题 | A | B }}</nowiki></code> → {{#ifexist: 肯定不存在的标题 | A | B }}<br><code><nowiki>{{#ifexist: 肯定不存在的标题 | A }}</nowiki></code> → {{#ifexist: 肯定不存在的标题 | A }}<hr><code><nowiki>{{#ifexist: File:混乱头像.jpg | A | B }}</nowiki></code> → {{#ifexist: File:混乱头像.jpg | A | B }}<br><code><nowiki>{{#ifexist: Image:混乱头像.jpg | A | B }}</nowiki></code> → {{#ifexist: Image:混乱头像.jpg | A | B }}<br><code><nowiki>{{#ifexist: Media:混乱头像.jpg | A | B }}</nowiki></code> → {{#ifexist: Media:混乱头像.jpg | A | B }}
| '''[高开销]''' 该函数用于条件逻辑判断:
* 如果《页面标题》对应的页面存在,那么执行A(以wikitext格式解析);
* 否则执行B(以wikitext格式解析);
**如果B被省略则输出为空。
注意:
#如果某个页面A(例如本页面)使用了该函数检查另一个页面B(例如“肯定不存在的标题”)是否存在,那么[[Special:链入页面]]就能查询到A链接到了B(例如[[Special:链入页面/肯定不存在的标题]]),[[Special:需要的页面]]也会显示B需要被创建;
#如果要检查萌娘共享里的文件,则需要使用<code><nowiki>Media:</nowiki></code>前缀。
#*使用<code><nowiki>File:</nowiki></code>和<code><nowiki>Image:</nowiki></code>前缀时只检查本地wiki上有无对应页面(例如[[:混乱头像.jpg]])
#*从这里也能看出,该函数只检查页面'''是否存在''',不考虑页面是否有内容亦不考虑页面是否按共享文件页面显示(如上所示,[[:混乱头像.jpg]]为蓝链而<code><nowiki>{{#ifexist: File:混乱头像.jpg | A | B }}</nowiki></code>却仍然返回B)
|-
| <code><nowiki>{{#ifexpr: Fx(表达式) | A | B }}</nowiki></code>
<li>格式参数用于指定输出的时间的格式,下表以样例时间为例说明各格式参数的作用。'''特别注意:系统默认时区为UTC+0,所以以下结果默认以<u>协调世界时</u>为依据''',中国标准时间仅供本地时间对应,更改时区的办法参见表格后的说明部分。此处只列举常见的参数,更多参数请浏览[[mw:Help:Extension:ParserFunctions/zh##time|幫助:扩展:解析器函數##time]]。
{| class="wikitable" style="width: 100%;margin: 0"
! 样例时间
| colspan = "2" | <nowiki>{|</nowiki> style="border-collapse: collapse; border: none;"
{{!}} 协调世界时
{{!}} (UTC)
{{!}} {{#time:Y年n月j日(l)H时i分s秒}}
<nowiki>-</nowiki>
{{!}} 中国标准时间
{{!}} (CST)
{{!}} {{#time:Y年n月j日(l)H时i分s秒|+8 hours}}
<nowiki>|}</nowiki>
|-
! 格式参数
! 说明
* 若解析完全文后发现不存在名为 ''变量名'' 的变量则输出 ''默认值'';
'''注意''':不论 ''默认值'' 是否用得上,其内的 wikitext 都会被执行,您可以在沙盒里测试以下代码并观察页面标题:<code><nowiki>{{#vardefine: hello | world}}{{#var_final: hello | {{DISPLAYTITLE: var_final 测试}}}}</nowiki></code>
|-
! colspan="3" style="background-color: #DDDDDD;" class="heading" id="{{anchorencode:循环}}" | 循环(来自扩展:Loops)
|-
| colspan="3" | 每个页面中循环次数都'''不能大于99次''',否则将抛出错误,因此,必须控制循环次数合理使用,对于模板中使用循环更是应该小心,最好不要超过20次,如果是某些可能在同一页面重复调用的模板,就一定不要使用循环了,若流程大体可控可以手动写出循环,或者在[https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/zh Lua模块]中进行循环的操作。
* 以下的解析器函数中<code>fornumargs</code>及<code>forargs</code>'''不占用循环次数'''。
|-
| <code><nowiki>{{#while: | 条件 | 语句}}</nowiki></code>
| <pre><nowiki>{{#vardefine: index | 0 }}{{#while:
| {{#ifexpr: {{#var: index }} < 5 | true }}
| &lt;nowiki&gt;&lt;/nowiki&gt;
* {{#var: index }}{{#vardefine: index | {{#expr: {{#var: index }} + 1 }} }}
}}</nowiki></pre> → <br>{{#vardefine: index | 0 }}{{#while:
| {{#ifexpr: {{#var: index }} < 5 | true }}
| <nowiki></nowiki>
* {{#var: index }}{{#vardefine: index | {{#expr: {{#var: index }} + 1 }} }}
}}
| 当 ''条件'' 不为空时执行 ''语句''
 
'''注意''':扩展:Loops会对所有传入的参数值去除开头结尾的空白字符(包括空格、换行等)后再处理,如果你不想你的换行被删除请使用 <code><nowiki>&lt;nowiki&gt;&lt;/nowiki&gt;</nowiki></code>放在换行处(如例子所示),下同。
|-
| <code><nowiki>{{#dowhile: | 条件 | 语句}}</nowiki></code>
| <pre><nowiki>{{#vardefine: i | 99 }}{{#dowhile:
| {{#ifexpr: {{#var: i}} < 5 | true }}
| &lt;nowiki&gt;&lt;/nowiki&gt;
* {{#var: i}}{{#vardefine: i| {{#expr: {{#var: index }} + 1 }} }}
}}</nowiki></pre> → <br>{{#vardefine: i| 99 }}{{#dowhile:
| {{#ifexpr: {{#var: i}} < 5 | true }}
| <nowiki></nowiki>
* {{#var: i }}{{#vardefine: i| {{#expr: {{#var: i}} + 1 }} }}
}}
| 先执行一次 ''语句'',然后当 ''条件'' 不为空时继续执行语句(注意例子里的初始值)
|-
| <code><nowiki>{{#loop: 变量名 | 初始值 | 循环次数 | 语句}}</nowiki></code>
| <pre><nowiki>{{#loop: count
| 1
| 4
| &lt;nowiki&gt;&lt;/nowiki&gt;
* This is round {{#var: count }} and we have {{#expr: 4 - {{#var: count }} }} more to go
}}</nowiki></pre> → <br>{{#loop: count
| 1
| 4
| <nowiki></nowiki>
* This is round {{#var: count }} and we have {{#expr: 4 - {{#var: count }} }} more to go
}}
| 循环执行语句:
# 将 ''初始值'' 赋给一个名为 ''变量名'' 的变量;
# 然后开始循环,次数为 ''循环次数'' 的绝对值:
## 执行 ''语句'';
## 若 ''循环次数'' 为正整数,则将名为 ''变量名'' 的变量的值增加 1;若 ''循环次数'' 为负整数,则将名为 ''变量名'' 的变量的值减少 1。
|-
| <code><nowiki>{{#forargs: 变量名前缀 | 索引变量名 | 值变量名 | 语句}}</nowiki></code>
| 若模板 <code><nowiki>Template:Loops Test</nowiki></code> 的内容如下:<pre><nowiki>{{#forargs: arg
| key
| value
| &lt;nowiki&gt;&lt;/nowiki&gt;
* {{#var: key }} = {{#var: value }}
}}</nowiki></pre>
那么若调用如下代码:<pre><nowiki>{{Loops Test
| arg1=val1
| spam=spammity
| arg5=val5
| argument=value
}}</nowiki></pre>
则输出:
* 1 = val1
* 5 = val5
* ument = value
| 遍历参数:
* 若参数名开头为 ''变量名前缀''(如例子中的<code><nowiki>arg1</nowiki></code>、<code><nowiki>argument</nowiki></code>等):
*# 将切除开头的 ''变量名前缀'' 后的参数名赋给名为 ''索引变量名'' 的变量;
*# 将该参数的值赋给名为 ''值变量名'' 的变量;
*# 执行语句。
''变量名前缀'' 可以为空,此时将会对所有的参数进行循环且不对参数名做操作直接赋值给名为 ''索引变量名'' 的变量。
|-
| <code><nowiki>{{#fornumargs: 索引变量名 | 值变量名 | 语句}}</nowiki></code>
| 若模板 <code><nowiki>Template:Loops Test</nowiki></code> 的内容如下:<pre><nowiki>{{#fornumargs: number
| value
| &lt;nowiki&gt;&lt;/nowiki&gt;
* {{#var: number }} = {{#var: value }}
}}</nowiki></pre>
那么若调用如下代码:<pre><nowiki>{{Loops Test
| Alfa
| B = Bravo
| Charlie
| 5 = Echo
}}</nowiki></pre>
则输出:
* 1 = Alfa
* 2 = Charlie
* 5 = Echo
| 遍历参数:
* 若参数名为纯数字(未指定参数名的参数按其出现的先后顺序编号(只在未指定参数名的参数范围内编号,如例子中的Charlie对应的是2)):
*# 将参数名赋给名为 ''索引变量名'' 的变量;
*# 将该参数的值赋给名为 ''值变量名'' 的变量;
*# 执行语句。
|-
! colspan="3" style="background-color: #DDDDDD;" class="heading" id="{{anchorencode:杂项}}" | 杂项