使用說明:模板擴展語法
模板擴展語法是一個MediaWiki擴展,包含多個解析函數解釋器。本擴展的典型語法是:
- {{#函數名: 參數1 | 參數2 | 參數 3 …}}
目前有預定義的函數:expr,if,ifeq,ifexpr,switch(rand暫時被廢除)。
各函數名都對大小寫不敏感。
語句中的空格、換行等空白字符將被省略。
目錄
函數
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:和#之間不能有空格,才可以正常工作。
表格
模板擴展函數中由於使用了「|」管道符做參數分隔符,所以不能包括表格所需要的「|」符。要想在輸出中包含表格,可以通過以下兩個辦法達到:
- 通過嵌套模板來達到隱藏「|」的目的。
- 使用HTML語法。