Help:模板擴展語法

来自女性百科
跳转至: 导航搜索

模板扩展语法是一个MediaWiki扩展,包含多个解析函数解释器。本扩展的典型语法是:

{{#函数名: 参数1 | 参数2 | 参数 3 …}}

目前有预定义的函数:exprififeqifexprswitchrand暂时被废除)。

各函数名都对大小写不敏感。

语句中的空格、换行等空白字符将被省略。

函数

expr

expr函数,计算数学表达式。语法为:

{{ #expr: 表达式 }}

表达式支持的运算符有:

运算符 名称 优先级 元数 结合性 样例
+ 9 1 {{#expr: + 7}} = {{#expr: + 7}}
- 9 1 {{#expr: - 7}} = {{#expr: - 7}}
not 逻辑非 9 1 {{#expr: not 7}} = {{#expr: not 7}}
* 8 2 {{#expr: 30 * 7}} = {{#expr: 30 * 7}}
/ 8 2 {{#expr: 30 / 7}} = {{#expr: 30 / 7}}
div 8 2 {{#expr: 30 div 7}} = {{#expr: 30 div 7}}
mod 8 2 {{#expr: 30 mod 7}} = {{#expr: 30 mod 7}}
+ 6 2 {{#expr: 30 + 7}} = {{#expr: 30 + 7}}
- 6 2 {{#expr: 30 - 7}} = {{#expr: 30 - 7}}
round 舍入 5 2 {{#expr: 30 / 7 round 7}} = {{#expr: 30 / 7 round 7}}
= 等于 4 2 {{#expr: 30 = 7}} = {{#expr: 30 = 7}}
< 小于 4 2 {{#expr: 30 < 7}} = {{#expr: 30 < 7}}
> 大于 4 2 {{#expr: 30 > 7}} = {{#expr: 30 > 7}}
<= 小于等于 4 2 {{#expr: 30 <= 7}} = {{#expr: 30 <= 7}}
>= 大于等于 4 2 {{#expr: 30 >= 7}} = {{#expr: 30 >= 7}}
<> 不等于 4 2 {{#expr: 30 <> 7}} = {{#expr: 30 <> 7}}
 != 不等于 4 2 {{#expr: 30 != 7}} = {{#expr: 30 != 7}}
and 逻辑与 3 2 {{#expr: 30 and 7}} = {{#expr: 30 and 7}}
or 逻辑或 2 2 {{#expr: 30 or 7}} = {{#expr: 30 or 7}}

round运算对运算数正负,位数正负都有不同的表现,参见下例。

  • {{#expr: 300/7 round 1}} = {{#expr: 300/7 round 1}}
  • {{#expr: 300/7 round -1}} = {{#expr: 300/7 round -1}}
  • {{#expr: -300/7 round 1}} = {{#expr: -300/7 round 1}}

逻辑运算符把假映射为0,把真映射为非0,且返回值只有0或1。

同一表达式中先计算高优先级运算。括号优先级高于一切。

if

if函数是一个if-then-else结构。语法是:

{{#if: <判断字符串> | <then字符串> [| <else字符串> ]}}

若判断字符串为非空字符串(忽略前导或后缀空格),则函数返回then字符串,否则函数返回else字符串。else字符可被省略而不会造成错误,但函数在判断字符串为空时便会返回空字符串。

ifeq

ifeq比较两个字符串,返回比较结果。语法为:

{{#ifeq: <字符串1> | <字符串2> [| <相等时返回的字符串> [| <不相等时返回的字符串> ]]}}

注意:两个空字符串是相等的。

ifexist

ifexist根据指定名称的页面是否存在,返回两个参数中的一个。用法:

{{#ifexist: <待测页面标题> | <存在文字> | <不存在文字> }};

示例:

  • {{#ifexist:test|有test页面|无test页面}} 得到 {{#ifexist:test|有test页面|无test页面}}
  • {{#ifexist:user:sex|该用户存在|该用户不存在}} 得到 {{#ifexist:user:sex|该用户存在|该用户不存在}}
  • {{#ifexist:Calculation|Yes|Oops}} 得到 {{#ifexist:Calculation|Yes|Oops}}

ifexpr

ifexpr计算数学表达式,并根据计算结果返回字符串。

{{ #ifexpr: <表达式> | <then字符串> [| <else字符串>] }}

若表达式经计算不为0,则函数返回then字符串,否则函数返回else字符串。表达式语法与expr<tt>相同。

switch

<tt>switch将一个值与多个预设值比较,若有匹配时则返回指定字符串,即双射。语法是:

{{ #switch: <比较值>
| <预设值1> [= <结果1>]
| <预设值2> [= <结果2>]
| ...
| <预设值n> [= <结果n>]
| [#default = ]<缺省结果> 
}}

switch将从左往右逐一尝试,直到出现匹配。函数将返回第一个匹配值对应的结果,而忽略后面的匹配值。如果没有匹配,函数将返回缺省结果。如果缺省结果没有设置,函数将返回空串。

注意:“缺省结果”是最后一个没有等号的预设值或“#default”预设值对应的结果;如果期望把一个包含“=”号的字符串作为缺省结果,则必须采用“#default”预设值形式。例如:

#default = <span style="color:red;">red</span>

switch也可用作满射(多对一,避免重复设置结果)。即某预设值后未设置结果,这样如果该预设值与比较值匹配,则函数返回第一个有结果的预设值的结果。例如:

{{ #switch: <比较值>
| <预设值1>
| <预设值2>
| <预设值3> = <结果3>
| <缺省结果>
}}


如果比较值与预设值1或预设值2匹配,都将返回结果3。注意:“#default”后必须有“=”,但其他预设值可以使用“#default”的结果。

time

time是一个时间日期格式化函数,它的语法为:

{{  #time: format }}

或者

{{  #time: format | time }}

format参数是时间格式化设置,与php的date使用方法很相似。 PHP's date

以下格式码在php中也具有相同的含义。重大差异在于PHP的国际化处理 (即语言和locale的不同处理) 在ParserFunctions中将视为错误并被报告出来。所有数字格式化码按本地语言返加格式化后的数字,可以使用xn指定的编码来覆盖它。
编码 描述 范例输出
d 所在月份的第几天,有前导零 04
D 简写的星期。 Mon
j 所在月份的第几天,没有前导零 3
l 完整的星期。 Monday
F 完整的月份 January
m 数字表示的月份,有前导零 01 到 12
M 简写的月份。 Jan
n 数字表示的月份,没有前导零 1 to 12
Y 4位数的年份 2006
y 2位数的年份 06
H 小时,有前导零 00 to 23
i 分钟,有前导零 00 to 59
s 秒,有前导零 00 to 59


所有非格式化编码的字符将直接输出。有两个转义字符可以输出原始内容。

  • 两个引号中的字符将直接输出(引号本身去掉),没有对应的引号将直接输出:
    • {{ #time: "本月是" m}} → 本月是05
    • {{ #time:i's"}} → 20'11"
  • 支持PHP的date()中反斜杠。如 \H 输出一个原始字符 H, \" 输出一个原始字符 "。


time参数的格式与PHP的strtotime()函数的参数格式相同。支持相对时间的计算。如“+10 hours”。更多信息可以查看the GNU tar manual

如果时间参数没有指定,则默认为所在的文章转化成HTML文档时的时间。注意,由于缓存,文章上观看到的时间和实际可能有近一周时间的出入。如果有必要可以手工更新,对文章不做任何更改进行保存就可以刷新缓存(“空编辑”)。

Examples

  • {{#time:Y年M月j日 |-14 days}} 得到14天前的日期: {{#time:Y年F月j日|-14 days}}
  • {{#time:H:i|+8 hours}} 得到当前的UTC+8时间: {{#time:H:i|+8 hours}}


subst

应用subst:到模板扩展,必须在subst:和#之间不能有空格,才可以正常工作。

表格

模板扩展函数中由于使用了“|”管道符做参数分隔符,所以不能包括表格所需要的“|”符。要想在输出中包含表格,可以通过以下两个办法达到:

  1. 通过嵌套模板来达到隐藏“|”的目的。
  2. 使用HTML语法。

参见