使用說明:模板擴展語法

出自 女性百科
於 2009年11月21日 (六) 07:20 由 Admin (對話 | 貢獻) 所做的修訂 (1个修订)

(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
前往: 導覽搜尋

模板擴展語法是一個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語法。

參見