置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

幫助:魔術字/解析器函數

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
跳至導覽 跳至搜尋
Commons-emblem-notice.svg
這個頁面「Help:魔術字/解析器函數」是萌娘百科的幫助文檔
  • 本文用於介紹萌娘百科中一些特定功能的操作方法;
  • 本文僅是一篇論述,不屬於方針或指引。如果本指南與相關方針或指引發生衝突或存在不一致的情況,請以方針或指引的條文為準。

解析器函數與系統變量非常相似,但與後者相比,前者全部要求至少傳入一個參數,所有的參數1與函數名之間均用:而不是|分割。

解析器函數有時會在函數名前加上#用以與模板區分。

列表

以下表格詳細說明了萌百可用的解析器函數,部分術語未作解釋。

解析器函數 輸入 → 輸出 描述
URL與標題的數據和解析
{{localurl:頁面名稱}}
{{localurl:頁面名稱|查詢字符串}}
{{localurl:Mainpage}} → /Mainpage
{{localurl:Mainpage|printable=yes}} → /index.php?title=Mainpage&printable=yes
指定頁面的相對路徑
{{fullurl:頁面名稱}}
{{fullurl:頁面名稱|查詢字符串}}
{{fullurl:跨wiki前綴:遠程頁面名稱|查詢字符串}}
{{fullurl:Category:帮助}}https://moegirl.uk/Category:%E5%B8%AE%E5%8A%A9
{{fullurl:Category:帮助|action=edit}}https://moegirl.uk/index.php?title=Category:%E5%B8%AE%E5%8A%A9&action=edit
{{fullurl:mw:MediaWiki/zh|action=edit}}https://moegirl.uk/index.php?title=MediaWiki:MediaWiki/zh&action=edit
{{fullurl:mw:Help:Magic words|action=edit}}https://moegirl.uk/index.php?title=MediaWiki:Help:Magic_words&action=edit
指定頁面的相對協議路徑,該解析器函數也能識別跨wiki前綴。
注意:未被方括號包裹起來的相對協議路徑不會自動生成為鏈接
{{canonicalurl:頁面名稱}}
{{canonicalurl:頁面名稱|查詢字符串}}
{{canonicalurl:interwiki:遠程頁面名稱|查詢字符串}}
{{canonicalurl:Category:帮助}}https://moegirl.uk/Category:%E5%B8%AE%E5%8A%A9
{{canonicalurl:Category:帮助|action=edit}}https://moegirl.uk/index.php?title=Category:%E5%B8%AE%E5%8A%A9&action=edit
{{canonicalurl:mw:Help:Magic words|action=edit}}https://moegirl.uk/index.php?title=MediaWiki:Help:Magic_words&action=edit
指定頁面的絕對協議路徑,該解析器函數也能識別跨wiki前綴。
{{filepath:文件名稱}}
{{filepath:文件名稱|縮略圖大小}}
{{filepath:文件名稱|nowiki}}
{{filepath:Box-1.png}}Box-1.png
{{filepath:Box-1.png|120}}Box-1.png
{{filepath:Box-1.png|nowiki}} → https://moegirl.uk/images/5/56/Box-1.png
指定文件的絕對協議路徑,可以指定縮略圖大小(僅能指定寬度大小,單位為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
{{urlencode:x:y/z á é-萌娘百科|WIKI}} → x:y/z_%C3%A1_%C3%A9-%E8%90%8C%E5%A8%98%E7%99%BE%E7%A7%91
{{urlencode:x:y/z á é-萌娘百科|PATH}} → x%3Ay%2Fz%20%C3%A1%20%C3%A9-%E8%90%8C%E5%A8%98%E7%99%BE%E7%A7%91
輸出指定字符串經編碼後的結果。不同的參數指定不同的編碼規則,用於解析頁面標題到MediaWiki類站點鏈接時建議使用WIKI,解析字符串到文件名時建議使用PATH,解析字符串到搜索引擎鏈接時建議使用(空)、QUERY;如果你不清楚如何選擇時,你可以到Talk:提問求助區求助
{{anchorencode:字符串}} {{anchorencode:x:y/z á é-萌娘百科}} → x:y/z_á_é-萌娘百科 輸出指定字符串經MediaWiki頁內標題鏈接編碼規則編碼後的結果,可用於指定內容的標題的頁內導航
{{#rel2abs: 路徑}}
{{#rel2abs: 路徑 | 基礎路徑}}
{{#rel2abs: /quok | Help:Foo/bar/baz}} → Help:Foo/bar/baz/quok
{{#rel2abs: ../../../../quok | Help:Foo/bar/baz}}錯誤:無效路徑深度:「Help:Foo/bar/baz/../../../../quok」(嘗試訪問根節點以上節點)
本函數用於以通用的命令行目錄變換格式來變換頁面路徑:
  • 如果沒有給定參數2,基礎路徑為當前頁面路徑;
  • 參數1中可以使用以下格式來變換路徑:
    • .指定基礎路徑;
    • ..使基礎路徑上移一層
    • /path使基礎路徑移動到下一層名為path的頁面

對於不合法的參數1,函數並不會直接拋出錯誤,而是嘗試剔除錯誤部分繼續工作:

  • {{#rel2abs: ../quok/. | Help:Foo/bar/baz}} → Help:Foo/bar/quok
  • {{#rel2abs: ../../../quok | Help:Foo/bar/baz}} → quok
{{#titleparts: 要解析的標題 | 要返回的層數 | 返回部分的起始點}} {{#titleparts: Talk:Foo/bar/baz/quok | 2}} → Talk:Foo/bar
{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2}} → bar/baz
{{#titleparts: Talk:Foo/bar/baz/quok | -2}} → Talk:Foo/bar
{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2}} → baz
該函數用於輸出給定標題的一部分:
  1. 參數1指定要解析的標題;
  2. 參數2指定返回的部分的層數,默認接受正整數向後計數,本參數也可以接受一個負整數,用以從最後一層向前計數捨去被計入的部分;
  3. 參數3指定從何處開始返回,默認接受正整數從根路徑向後計數,本參數也可以接受一個負整數,用以從最後一層向前計數。

注意:

  • 本函數會對參數1先進行url解碼再進行解析;
  • 本函數返回被解析後的部分;
  • 本函數返回的部分受MediaWiki標題限制:
    1. 所有下劃線會被替換成空格:{{#titleparts: Talk:Foo/bah_boo|1|2}} → bah boo
    2. 只對前25層做劃分,即第25層和第25層以下的內容會合併為1個第25層:{{#titleparts: 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28 | 2 | 24}} → 24/25/26/27/28
      為了避免這個缺陷,你可以用嵌套的方式:{{#titleparts: {{#titleparts: 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28 | 2 | 24}} | 1 | 2}} → 25
    3. 上一個函數提到的命令行目錄變換格式不被接受;
    4. 參數1的首字母會變為大寫:{{#titleparts: talk:a/b/c}} → Talk:A/b/c
    5. 若參數1不合法則會被直接輸出{{#titleparts: [[首頁]]/123 | 1 | 2}}首頁/123
名字空間
名字空間解析器函數{{ns:}}返回標準名字空間的本地化名稱(萌百使用標準名稱作為本地化名稱)或自定義名字空間的名稱,參數1可以指定名字空間的ID,標準名字空間的MediaWiki標準名稱、本地(語言變種)化名,自定義名字空間的名稱:
  • {{ns:2}} = {{ns:User}} = {{ns:用户}} = {{ns:用戶}} = {{ns:使用者}} → User
  • {{ns:5}} = {{ns:Project Talk}} = {{ns:萌娘百科讨论}} = {{ns:萌娘百科討論}} = {{ns:萌娘百科 talk}} → 萌娘百科 talk

需要注意的是:

  1. 該解析器函數的參數1可以使用Image,效果與File一致;
  2. 在解析器函數名後加一個e可以得到經MediaWiki URL編碼規則編碼後的標準名字空間的本地化名稱或自定義名字空間的名稱,很適合用於外鏈中:
    • {{nse:5}} → %E8%90%8C%E5%A8%98%E7%99%BE%E7%A7%91_talk
格式化函數
{{formatnum:未格式化的數字}}
{{formatnum:已格式化的數字|R}}
{{formatnum:未格式化的數字|NOSEP}}
簡單例子:
  • {{formatnum:987654321.654321}} → 987,654,321.654321
  • {{formatnum:987,654,321.654321|R}} → 987654321.654321

高級例子:

  • {{formatnum:{{formatnum:987654321.654321}}|R}} → 987654321.654321(任何情況下)
  • {{formatnum:00001}} → 00,001
  • {{formatnum:987654321.654321 |NOSEP}} → 987654321.654321

錯誤的輸入會導致無法預測的輸出,不論是否有參數2|R

  • {{formatnum:987.654,321}} → 987.654,321
  • {{formatnum:987.654,321|R}} → 987.654321
參數1接受任何阿拉伯數字,按照站點默認區域數字格式用分位符號分組,將其本地化後輸出。

參數2有兩個可接受字符串:

  1. |R可以使函數的行為倒轉,即輸入已格式化的數字輸出完全無格式數字(只有小數點.,沒有其他的格式),可以用在數學計算中。但請注意只有在輸入的數字是完全格式化後它的輸出才符合預期;
  2. |NOSEP(「無分隔符」)參數會使數位分組分隔符和小數點分隔符不被修改,此時 formatnum 只會在不使用zhwp:印度-阿拉伯數字系統的語言中將數字字符進行轉換。NOSEP 參數還會防止出現意外的非標準數字分組。。

注意

  1. 開頭的前導0不會被去除,如果你要去除請使用{{#expr:00001}}
  2. 如果輸入的數字格式有誤,那麼輸出的數字無法保證格式正確。

如果你真的需要輸入一個無法保證格式正確的數字的話,你可以使用{{formatnum:}}兩次,但請不要在輸入數字可能有數位分組格式的情況下使用這種變通方式,否則分隔符可能會消失或數字無法被格式化。請注意這種方法是非常取巧的,因此它的輸出結果可能不可靠。

{{#dateformat:日期}}
{{#formatdate:日期}}
{{#dateformat:日期|格式規則}}
{{#formatdate:日期|格式規則}}
  • {{#dateformat:25 dec 2009}} → 25 dec 2009
  • {{#formatdate:dec 25,2009|dmy}} → dec 25,2009
  • {{#dateformat:2009-12-25|mdy}}12月 25, 2009(本例子中只有這一行合法,mw添加了額外的信息:<span class="mw-formatted-date" title="2009-12-25">12月 25, 2009</span>
  • {{#formatdate:2009 dec 25|ISO 8601}} → 2009 dec 25
參數1接受一個未格式化的日期,按照設置#顯示里的「日期格式」設置將其格式化。對於未登錄的讀者和未設置日期格式的用戶,可以通過參數2指定格式:mdydmyymd(輸出的字母全小寫)。如果參數1隻給出月日,那麼只有mdydmy才是有效的格式。如果未指定格式或者格式無效,那麼參數1的格式將被指定為輸出格式。如果參數1的日期格式無效,那麼函數輸出參數1的原樣。

警告:即使ISO 8601格式要求參數1的日期是公曆日期,若參數2指定ISO 8601,函數也能對那些超出通常公曆範圍的日期進行格式化(例如1583年之前的日期)。不過,函數無法正確轉換ISO 8601格式下的負數年份和通常格式下的公元前的年份。

{{lc:字符串}} {{lc:DATA CENTER}} → data center 將字符串完全小寫化
{{lcfirst:字符串}} {{lcfirst:DATA center}} → dATA center 將字符串首字母小寫化
{{uc:字符串}} {{uc:text transform}} → TEXT TRANSFORM 將字符串完全大寫化
{{ucfirst:字符串}} {{ucfirst:text TRANSFORM}} → Text TRANSFORM 將字符串首字母大寫化
{{padleft:原字符串|補足後的字符串長度}}
{{padleft:原字符串|補足後的字符串長度|補足用的字符串}}
{{padleft:xyz|5}} → 00xyz
{{padleft:xyz|5|_}} → __xyz
{{padleft:xyz|5|abc}} → abxyz
{{padleft:xyz|7|abc}} → abcaxyz
{{padleft:xyz|2}} → xyz
{{padleft:|4|xyz}} → xyzx
將參數1通過在左側補上參數3指定的字符串(默認為0)補足到參數2指定的長度,參數3指定的字符串可能被截斷以保證補足後的字符串長度滿足要求
{{padright:原字符串|補足後的字符串長度}}
{{padright:原字符串|補足後的字符串長度|補足用的字符串}}
{{padright:xyz|5}} → xyz00
{{padright:xyz|5|_}} → xyz__
{{padright:xyz|5|abc}} → xyzab
{{padright:xyz|7|abc}} → xyzabca
{{padright:xyz|2}} → xyz
{{padright:|4|xyz}} → xyzx
{{padleft:}}近乎一樣,只是在右邊補足
本地化函數
{{plural:數字|單數形式|複數形式}} {{plural:0|is|are}} → are
{{plural:1*1|is|are}} → is
{{plural:21 mod 10|is|are}} → are
{{plural:{{#expr:21 mod 10}}|is|are}} → is
根據參數1是單數還是複數,輸出不同的字符串:單數輸出參數2,複數輸出參數3。判斷是否單複數的標準是{{#switch: 1 | {{{1}}} | {{#expr: {{{1}}} }} = true | #default = false}}
{{gender:指定用戶名|男性時的文本|女性時的文本|未選擇性別時的文本}}
{{gender:|男性時的文本|女性時的文本|未選擇性別時的文本}}
{{gender:.|男性時的文本|女性時的文本|未選擇性別時的文本}}
{{gender:AnnAngela|男性時的文本|女性時的文本|未選擇性別時的文本}}→未選擇性別時的文本
{{gender:|男性时的文本|女性时的文本|未选择性别时的文本}}未選擇性別時的文本(此處使用{{UserGender}}渲染)
{{gender:.|男性時的文本|女性時的文本|未選擇性別時的文本}}→未選擇性別時的文本
根據指定的用戶的設置#用戶資料的「語言」設置中的性別部分,返回該性別對應的文本。

注意

  1. 如果參數4未給出,那麼當用戶設置為「中性」時使用男性文本;
  2. 如果參數3未給出,那麼當用戶設置為「女性」時使用男性文本;
  3. 如果參數1為空,則指定當前用戶(未登錄讀者使用站點默認設置),但這種方式只能在系統消息頁面使用;
    • 如果要在普通頁面使用,請用{{UserGender}};
  4. 如果參數1為.,則使用站點默認設置。
{{int:信息名稱}} {{int:edit}} → 編輯
{{int:editsectionhint|MediaWiki}} → 編輯章節:MediaWiki
返回指定信息的界面語言變種翻譯。可以在MediaWiki:信息標準名(en-US)/界面語言變種里找到,亦可以修改。

對於部分信息,可以提供參數給它們,它們可以通過$1、$2……獲取這些參數,在第二個例子裡,MediaWiki替換了$1。

這種用法相較於{{MediaWiki:信息名稱}}好處是可以根據用戶的界面語言變種的變化而變化,也比模板更快加載,但它不會在編輯框下方的「此頁面使用了以下模板:」中出現。如果對應信息不存在的話,會以⧼unexist⧽出現.

特殊嵌入
{{:(主)名字空間頁面名}} (主名字空間頁面) 通過:將名字空間強制指定為(主),從而嵌入(主)名字空間的頁面
{{msg:與某一魔術字重名的模板名}}
{{raw:與某一魔術字重名的模板名}}
(模板正常渲染內容) {{Tempate:與某一魔術字重名的模板名}}一樣可以避免魔術字與模板名衝突,而直接嵌入模板
{{msgnw:模板名}} {{msgnw:tl}} → &#123;&#123;{{ {{{|safesubst:}}}#if:{{{3|}}}|{{{3|}}}:|}}[[{{ {{{|safesubst:}}}ns:Template}}:{{{1}}}|{{{1}}}]]{{ {{{|safesubst:}}}#if:{{{2|{{{arg|}}}}}}|{{!}}{{{2|{{{arg}}}}}}}}&#125;&#125;<noinclude>

{{Documentation}} <!-- 請在將分類與跨語言連結增加在 /doc 子頁面 --> [[Category:內部鏈接模板]] </noinclude>

把模板的源碼以純文本形式輸出,自帶nowiki效果
{{subst:模板名}} (模板的正常渲染內容,而模板源碼在替換完參數,刪去<noinclude/>內容後粘貼到頁面源碼中) 把模板的源碼嵌入到頁面源碼中,參見Help:替換引用
{{safesubst:模板名}} (模板的正常渲染內容。當上層模板是被正常嵌套時按正常方式被嵌套;而當上層模板是被替換引用時,模板源碼在替換完參數,刪去<noinclude/>內容後粘貼到頁面源碼中)
運算與邏輯判斷(來自擴展:解析器函數)
{{#expr: 數學表達式 }} {{#expr: 1 and -1 }} → 1

{{#expr: ---...---1}}(95个“-”) = -1

本函數計算並返回數學表達式的結果,你可以使用+、-、*、/來進行計算。本函數將e(自然對數的底數)、pi(π)作為常數使用。本函數支持的運算符如下所示:
運算符 名稱 優先級 元數 結合性 樣例
+ 9 1 {{#expr: + 7}} = 7
- 9 1 {{#expr: - 7}} = -7
not 邏輯非 9 1 {{#expr: not 7}} = 0
* 8 2 {{#expr: 30 * 7}} = 210
/ 8 2 {{#expr: 30 / 7}} = 4.2857142857143
div 8 2 {{#expr: 30 div 7}} = 4.2857142857143
mod 8 2 {{#expr: 30 mod 7}} = 2
+ 6 2 {{#expr: 30 + 7}} = 37
- 6 2 {{#expr: 30 - 7}} = 23
round 捨入 5 2 {{#expr: 30 / 7 round 7}} = 4.2857143
= 等於 4 2 {{#expr: 30 = 7}} = 0
< 小於 4 2 {{#expr: 30 < 7}} = 0
> 大於 4 2 {{#expr: 30 > 7}} = 1
<= 小於等於 4 2 {{#expr: 30 <= 7}} = 0
>= 大於等於 4 2 {{#expr: 30 >= 7}} = 1
<> 不等於 4 2 {{#expr: 30 <> 7}} = 1
!= 不等於 4 2 {{#expr: 30 != 7}} = 1
and 邏輯與 3 2 {{#expr: 30 and 7}} = 1
or 邏輯或 2 2 {{#expr: 30 or 7}} = 1
abs 絕對值 10 1 {{#expr: abs 2}} = 2
{{#expr: abs -2}} = 2
^ 乘方 10 1 {{#expr: 2^3}} = 8
sqrt 開方 10 1 {{#expr: sqrt9}} = 3
ln 對數 10 1 {{#expr: ln10}} = 2.302585092994
log28(換底):{{#expr: ln8 div ln2}} = 3
支持:
sin、cos、tan
不支持:
csc、sec、cot
三角函數 10 1 弧度制:{{#expr:sin45}} = 0.85090352453412
角度制:{{#expr:cos(45 * pi div 180)}} = 0.70710678118655
支持:
asin、acos、atan
不支持:
acsc、asec、acot
反三角函數 10 1 弧度制:{{#expr:asin0.5}} = 0.5235987755983
角度制:{{#expr:(asin 0.5)*180/pi}} = 30

注意:

  1. round運算後接入的是數位,正方向向小數位:
    • {{#expr: 33.44 * 55.68 round 2}} → 1861.94(捨入至最近的整百數)
    • {{#expr: 33.44 * 55.68 round -2}} → 1900(捨入至第3位)
    • {{#expr: 33.44 * 55.68 round -20}} → 0
    • {{#expr: 33.44 * 55.68 round -2.9}} → 1900(數位會自動捨去小數位,但這是十分危險的做法,不推薦使用 )
  2. 邏輯運算符把假映射為0,把真映射為非0,且返回值只有0(假)或1(真)。
  3. 同一表達式中先計算高優先級運算。括號優先級高於一切。
  4. 浮點誤差有可能造成某些運算的不可預料的結果,特別是最後幾位數字的不精確。因此在使用此函數進行非整數運算時,注意不要進行比較運算。
  5. 表達式的返回值可能是無法再計算的值(比如用科學計數法表示的數:{{#expr: 100000000000000000}} → 1.0E+17),或者有一部分有效數字沒有顯示出來。此時該值相當可能難以運算,因此在使用此函數進行運算時,須注意這些問題。
  6. 判斷一個值的範圍時,不能使用{{#expr: 1 <= 123 < 50}}這樣的形式(輸出值為1)。可以使用{{#expr: 1 <= 123 and 123 < 50}}的形式(輸出值為0)。

當表達式有誤時函數會返回一個錯誤信息,此時無法再繼續計算,請注意。

{{#if: X | A | B }} {{#if: X | A | B }} → A
{{#if: | A | B }} → B
{{#if: | A }}
該函數用於條件邏輯判斷:
  • 如果X處為非空字符串(忽略前導後綴的空格)那麼執行A(以wikitext格式解析);
  • 如果X處為空或只有空格那麼執行B(以wikitext格式解析);
    • 如果B被省略則輸出為空。
{{#ifeq: X | Y | A | B }} {{#ifeq: 1 | 0 | A | B }} → B
{{#ifeq: 1 | 1 | A | B }} → A
該函數用於條件邏輯判斷:
  • 如果X == Y(忽略前導後綴的空格)那麼執行A(以wikitext格式解析);
  • 否則執行B(以wikitext格式解析);
    • 如果B被省略則輸出為空。

註:{{#if: X | A | B }} == {{#ifeq: X | | B | A }}但是在寫代碼時請採用前一種,以提高可讀性。

{{#iferror: X | A | B }} {{#iferror: <span class="error"></span> | error | correct}} → error
{{#iferror: I'm fine. | error}} → I'm fine.
{{#iferror: {{#rel2abs: ../../../../quok | Help:Foo/bar/baz}}}}
該函數用於條件邏輯判斷:
  • 如果X包含class="error"那麼執行A(以wikitext格式解析);
    • 如果A被省略則輸出為空;
  • 否則執行B(以wikitext格式解析);
    • 若B被省略則輸出X。

該函數相當適合於執行可能會報錯的其他的解釋器函數(比如#expr,#time和#rel2abs)、隱藏模板錯誤(比如模板循環和模板遞歸)以及隱藏一些其它的解釋器「軟錯誤」(如Lua模塊、Widget等)。

{{#ifexist: 頁面標題 | A | B }} {{#ifexist: Main Page | A | B }} → A
{{#ifexist: 肯定不存在的標題 | A | B }} → B
{{#ifexist: 肯定不存在的標題 | A }}
{{#ifexist: File:Box-1.png | A | B }} → A
{{#ifexist: Image:Box-1.png | A | B }} → A
{{#ifexist: Media:Box-1.png | A | B }} → A
[高開銷][1] 該函數用於條件邏輯判斷:
  • 如果頁面標題對應的頁面存在,那麼執行A(以wikitext格式解析);
  • 否則執行B(以wikitext格式解析);
    • 如果B被省略則輸出為空。

注意:

  1. 如果某個頁面A(例如本頁面)使用了該函數檢查另一個頁面B(例如「肯定不存在的標題」)是否存在,那麼Special:鏈入頁面就能查詢到A鏈接到了B(例如Special:鏈入頁面/肯定不存在的標題),Special:需要的頁面也會顯示B需要被創建;
  2. 如果要檢查萌娘共享里的文件,則需要使用Media:前綴。
    • 使用File:Image:前綴時只檢查本地wiki(萌百)上有無對應頁面(例如File:Box-1.png
    • 從這裡也能看出,該函數隻檢查頁面是否存在,不考慮頁面是否有內容亦不考慮頁面是否按共享文件頁面顯示(如上所示,File:Box-1.png為藍鏈而{{#ifexist: File:Box-1.png | A | B }}卻仍然返回B)
{{#ifexpr: Fx(表達式) | A | B }} {{#ifexpr: 1+1 | A | B }} → A
{{#ifexpr: 1-1 | A | B }} → B
{{#ifexpr: 1-1 | A }}
該函數用於條件邏輯判斷:
  • 如果Fx != 0,那麼執行A(以wikitext格式解析);
  • 否則執行B(以wikitext格式解析);
    • 如果B被省略則輸出為空。

註:{{#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

該函數用於條件邏輯判斷:
  • 對於輸入值X,函數會與每一個預設值Y做比較,如果相同(不考慮前導後綴空格)則執行對應結果(以wikitext格式解析);
    • 預設值與結果以=連接,作為參數提交給函數;
    • 如果預設值沒有對應的結果則會將後面的第一個結果加以執行(例如:{{#switch: X | Y | Z = 1}}X == Y時輸出1);
  • 如果沒有任何一個預設值與輸入值相同,則執行#default給出的默認結果;
    • 可以不設定默認結果;
    • 可以省略#default=,即用沒有等號的最後一個參數作為默認值。

注意: 當一個參數沒有帶有=時,該參數會依照下列邏輯被分類:

  • 如果該參數不是最後一個參數,那麼它將被作為預設值考慮;
  • 否則它將被作為默認結果考慮。
{{#time: 格式參數 }}
{{#time: 格式參數 | 時間參數 }}
{{#time: 格式參數 | 時間參數 | 語言代碼}}
{{#time: 格式參數 | 時間參數 | 語言代碼 | 是否使用本地時區}}
{{#time: Y/m/d}} → 2024/11/26
{{#time: Y/m/d|2017-01-04}} → 2017/01/04
{{#time: F d H:i:s|+1 second}} → 11月 26 22:58:26
{{#time: F d H:i:s|+1 second|en}} → November 26 22:58:26
{{#time: F d H:i:s|+1 second|zh|1}} → 11月 26 22:58:26
該函數用來輸出時間:
  • 格式參數用於指定輸出的時間的格式,下表以樣例時間為例說明各格式參數的作用。特別注意:系統默認時區為UTC+0,所以以下結果默認以協調世界時為依據,中國標準時間僅供本地時間對應,更改時區的辦法參見表格後的說明部分。此處只列舉常見的參數,更多參數請瀏覽幫助:擴展:解析器函數##time
    樣例時間
    協調世界時 (UTC) 2024年11月26日(星期二)22時58分25秒
    中國標準時間 (CST) 2024年11月27日(星期三)06時58分25秒
    格式參數 說明(點擊可按年月日時分秒順序排序) 顯示結果
    A 根據時間是上午還是下午,輸出AMPM PM
    a 根據時間是上午還是下午,輸出ampm pm
    c 輸出長日期(ISO 8601格式) 2024-11-26T22:58:25+00:00
    D 星期數,以一個漢字顯示
    d 日期日數,補足前導0 26
    e 時區名 UTC
    F或M 月份,以當前語言輸出 11月
    G 小時數,24小時制,不補足前導0 22
    g 小時數,12小時制,不補足前導0 10
    H 小時數,24小時制,補足前導0 22
    h 小時數,12小時制,補足前導0 10
    I 是否使用夏令時,若是返回1,若否返回0 0
    i 分鐘數,補足前導0 58
    j 日期日數,無前導0 26
    L 如果是閏年則為1,否則為0。 1
    l 日期星期數,3位漢字 星期二
    m 月份數,補足前導0 11
    N 星期數,星期一為1,星期日為7 2
    n 月份數,無前導0 11
    O 系統時區與GMT的差值,不含冒號 +0000
    o 日期的 ISO-8601 格式年份(詳見下方說明) 2024
    P 系統時區與GMT的差值,含冒號 +00:00
    r 英文長日期格式(ISO 8601格式) Tue, 26 Nov 2024 22:58:25 +0000
    s 秒數 25
    T 時區縮寫 UTC
    t 該月天數 30
    U UNIX時間戳 1732661905
    W 日期周數,顯示日期為當年第幾周,補足前導0 48
    w 星期數,星期日為0,星期六為6 2
    Y 日期年份,4位數字 2024
    y 日期年份,2位數字 24
    Z 系統時區與GMT的差值,以秒為單位 0
    z 顯示日期為當年第幾日(1月1日是第0天) 330
  • 時間參數可以使用絕對時間,如「2008-12-31 23:59:59」,也可以使用相對時間,如「+7 days」或者「-5 hours」得到默認時間7日之後或默認時間5小時之前的時間。也可以二者混合使用,比如{{#time:Y-m-d H:i:s|2001-2-3 04:05:06 +1 year +2 months +3 days +4 hours +5 minutes +6 seconds}} → 2002-04-06 08:10:12
    時間參數也可以使用Unix時間戳,這需要在時間戳前添加@,如{{#time:Y-m-d H:i:s|@981144306}} → 2001-02-02 20:05:06,但如果在非Unix時間戳前添加@則很可能導致一個錯誤,詳見幫助:擴展:解析器函數##time
  • 語言代碼可以指定為mw支持的任意語言,例如en、zh-hant、ja之類的
  • 格式參數裡的o指的是 ISO-8601 格式年份,在大部分情況下是和Y一致的。但其計算規則如下:
    • 每年第1個周一起開始計算星期數(W),一年按52個星期計;
    • 被這52個星期覆蓋到的日期,即使是在下一年度也視為當年;
    • 未被這52個星期覆蓋到的日期,在當年開頭的部分視為上一年度,在當年結尾的部分視為下一年度。
    例如:2022年的第1個周一是1月3日,那麼未被覆蓋到的1月1日和1月2日視為上一年度,對應的o2021
  • 是否使用本地時區參數將會被傳遞給PHP解釋器,若被解釋為true則使用萌百本地時區(CST)

注意:

  • 如果想要輸出字母本身,而該字母又是屬于格式參數的一種時,可以用英文雙引號包裹:{{#time: "Y/m/d" == Y/m/d}} → Y/m/d == 2024/11/26
  • 本函數支持的時間範圍為1年1月1日~9999年12月31日,但特定的時間範圍會有奇怪的結果,詳見幫助:擴展:解析器函數##time
{{#timel: 格式參數 }}
{{#timel: 格式參數 | 時間參數 }}
{{#timel: 格式參數 | 時間參數 | 語言代碼}}
{{#timel: Y/m/d}} → 2024/11/26
{{#timel: Y/m/d|2017-01-04}} → 2017/01/04
{{#timel: Y/m/d H:i:s|+1 second}} → 2024/11/26 22:58:26
{{#timel: Y/m/d H:i:s|+1 second|en}} → 2024/11/26 22:58:26
{{#timel: e}} → UTC
{{#timel: O}} → +0000
{{#timel: P}} → +00:00
{{#timel: T}} → UTC
{{#timel: Z}} → 0
該函數與{{#time}}幾乎一致,除了沒有參數4並且強制使用本地時區以外。
變量(來自擴展:Variables)
{{#vardefine: 變量名 | 變量值}} - 變量值 賦給一個名為 變量名 的變量
{{#vardefineecho: 變量名 | 變量值}} {{#vardefineecho: hello | world}} → world 變量值 賦給一個名為 變量名 的變量,並輸出 變量值
{{#var: 變量名}}
{{#var: 變量名 | 默認值}}
{{#var: hello}} → world
{{#var: foo | no-op}} → no-op
輸出名為 變量名 的變量的值,如果沒有名為 變量名 的變量則輸出默認值
{{#varexists: 變量名}}
{{#varexists: 變量名 | 存在時的返回值}}
{{#varexists: 變量名 | 存在時的返回值 | 不存在時的返回值}}
{{#varexists: hello}} → 1
{{#varexists: foo | exist}}
{{#varexists: foo | exist | does not exist}} → does not exist
判斷是否存在一個名為 變量名 的變量,若存在則返回 存在時的返回值(默認為 1),若不存在則返回 不存在時的返回值(默認為
{{#var_final: 變量名}}
{{#var_final: 變量名 | 默認值}}
{{#var_final: index}} → 5
  • 該變量在下一行({{#while:)才被賦值,可用來觀察效果

{{#var_final: foo | <u>no-op</u>}}no-op

在解析器解析到該魔術字時,先展開 默認值 對應的 wikitext,然後等待解析器解析完全文:
  • 若解析完全文後存在一個名為 變量名 的變量則輸出該變量(這意味着該魔術字不能用作其他模板/魔術字的參數);
  • 若解析完全文後發現不存在名為 變量名 的變量則輸出 默認值

注意:不論 默認值 是否用得上,其內的 wikitext 都會被執行,您可以在沙盒裡測試以下代碼並觀察頁面標題:{{#vardefine: hello | world}}{{#var_final: hello | {{DISPLAYTITLE: var_final 測試}}}}

循環(來自擴展:Loops)
每個頁面中循環次數都不能大於99次,否則將拋出錯誤,因此,必須控制循環次數合理使用,對於模板中使用循環更是應該小心,最好不要超過20次,如果是某些可能在同一頁面重複調用的模板,就一定不要使用循環了,若流程大體可控可以手動寫出循環,或者在Lua模塊中進行循環的操作。[2]
  • 以下的解析器函數中fornumargsforargs不占用循環次數
{{#while: | 條件 | 語句}}
{{#vardefine: index | 0 }}{{#while:
 | {{#ifexpr: {{#var: index }} < 5 | true }}
 | <nowiki></nowiki>
* {{#var: index }}{{#vardefine: index | {{#expr: {{#var: index }} + 1 }} }}
}}

  • 0
  • 1
  • 2
  • 3
  • 4
條件 不為空時執行 語句

注意:擴展:Loops會對所有傳入的參數值去除開頭結尾的空白字符(包括空格、換行等)後再處理,如果你不想你的換行被刪除請使用 <nowiki></nowiki>放在換行處(如例子所示),下同。

{{#dowhile: | 條件 | 語句}}
{{#vardefine: i | 99 }}{{#dowhile:
 | {{#ifexpr: {{#var: i}} < 5 | true }}
 | <nowiki></nowiki>
* {{#var: i}}{{#vardefine: i| {{#expr: {{#var: index }} + 1 }} }}
}}

  • 99
先執行一次 語句,然後當 條件 不為空時繼續執行語句(注意例子裡的初始值)
{{#loop: 變量名 | 初始值 | 循環次數 | 語句}}
{{#loop: count
 | 1
 | 4
 | <nowiki></nowiki>
* This is round {{#var: count }} and we have {{#expr: 4 - {{#var: count }} }} more to go
}}

  • This is round 1 and we have 3 more to go
  • This is round 2 and we have 2 more to go
  • This is round 3 and we have 1 more to go
  • This is round 4 and we have 0 more to go
循環執行語句:
  1. 初始值 賦給一個名為 變量名 的變量;
  2. 然後開始循環,次數為 循環次數 的絕對值:
    1. 執行 語句
    2. 循環次數 為正整數,則將名為 變量名 的變量的值增加 1;若 循環次數 為負整數,則將名為 變量名 的變量的值減少 1。
{{#forargs: 變量名前綴 | 索引變量名 | 值變量名 | 語句}} 若模板 Template:Loops Test 的內容如下:
{{#forargs: arg
 | key
 | value
 | <nowiki></nowiki>
* {{#var: key }} = {{#var: value }}
}}
那麼若調用如下代碼:
{{Loops Test
 | arg1=val1
 | spam=spammity
 | arg5=val5
 | argument=value
}}

則輸出:

  • 1 = val1
  • 5 = val5
  • ument = value
遍歷參數:
  • 若參數名開頭為 變量名前綴(如例子中的arg1argument等):
    1. 將切除開頭的 變量名前綴 後的參數名賦給名為 索引變量名 的變量;
    2. 將該參數的值賦給名為 值變量名 的變量;
    3. 執行語句。

變量名前綴 可以為空,此時將會對所有的參數進行循環且不對參數名做操作直接賦值給名為 索引變量名 的變量。

循環順序按照參數傳入的先後順序。注意Lua展開模板無視參數順序,所以使用Lua展開帶有{{#forargs:}}的模板(例如使用{{ptl}})時可能會有預期之外的結果。

{{#fornumargs: 索引變量名 | 值變量名 | 語句}} 若模板 Template:Loops Test 的內容如下:
{{#fornumargs: number
 | value
 | <nowiki></nowiki>
* {{#var: number }} = {{#var: value }}
}}
那麼若調用如下代碼:
{{Loops Test
  |     Alfa
  | B = Bravo
  |     Charlie
  | 5 = Echo
}}

則輸出:

  • 1 = Alfa
  • 2 = Charlie
  • 5 = Echo
遍歷參數:
  • 若參數名為純數字(未指定參數名的參數按其出現的先後順序編號(只在未指定參數名的參數範圍內編號,如例子中的Charlie對應的是2)):
    1. 將參數名賦給名為 索引變量名 的變量;
    2. 將該參數的值賦給名為 值變量名 的變量;
    3. 執行語句。

循環順序按照數字參數的數字大小順序:即使上例中5 = Echo放在Alfa之前,5 = Echo仍會最後輸出。

雜項
{{#language:語言代碼}}
{{#language:語言代碼|目標語言代碼}}
{{#language:zh-cn}} → 中文(中國大陸)
{{#language:zh-cn|en-us}} → 中文(中國大陸)
以參數2的語言代碼指定的語言(沒有則以參數1的)輸出參數1的語言代碼對應的語言全名
{{#special:特殊頁面名}} {{#special:watchlist}} → Special:監視列表 輸出指定標準名稱的特殊頁面的本地化名。

可以在函數名後加e以輸出經MediaWiki URL編碼規則編碼後的頁面名:

  • {{#speciale:watchlist}} → Special:%E7%9B%91%E8%A7%86%E5%88%97%E8%A1%A8
{{#tag:標籤名稱|內容|屬性1=屬性值1|屬性2=屬性值2|……}} {{#tag:div|右浮動|style="border: 1px gray solid; float: right; clear: both; padding: 1em;"}}
右浮動



{{#tag:nowiki|{{草}}}} → <span title="草">[[File:大草字.svg|20px|link=W(网络用语)]]</span>

<nowiki>{{草}}</nowiki> → {{草}}

輸出一個元素的HTML源碼,參數1為其標籤名,參數2為其內容,參數3及之後為其屬性值對。請不要向參數1傳入自閉合標籤名,如br、img、hr等。

內容中的wikitext會在tag函數渲染之前完成渲染,並與往常一樣阻止不受信任的代碼渲染。 因此若標籤為nowiki且內容有使用模板則會輸出其模板輸出結果的代碼。 (pre標籤同理)

如果內容需要為空,則參數2必須為空,而不是省略

不支持noinclude、includeonly。

{{#invoke:模塊名|函數名|參數1|參數2|……}} (根據指定模塊輸出) Lua模塊的調用方法
{{DISPLAYTITLE:標題}}
{{DISPLAYTITLE:標題|noerror}}
{{DISPLAYTITLE:標題|noreplace}}
- 本函數用以對當前頁面的標題的格式做出變換,該函數並不會修改頁面本來的標題(註)在url中顯示的標題,只是更改了頁面中標題顯示的文字和效果,例如改變大小寫、下劃線替代空格等。

參數1為「noerror」或「noreplace」時,會阻止由於使用多個該函數而導致的錯誤拋出。

{{DEFAULTSORT:分類索引}}
{{DEFAULTSORTKEY:分類索引}}
{{DEFAULTCATEGORYSORT:分類索引}}
{{DEFAULTSORT:分類索引|noerror}}
{{DEFAULTSORT:分類索引|noreplace}}
- 本函數用以改變當前頁面在分類中的索引,比如{{DEFAULTSORT:A}}會把頁面分到A部分下。

參數1為「noerror」或「noreplace」時,會阻止由於使用多個該函數而導致的錯誤拋出。

{{#choose:選項1|選項2|選項3}} {{#choose:選項1|選項2|選項3}} → 選項2 等概率隨機選擇選項中的一個作為輸出。
{{#cscore:UserName|參數}} {{#cscore:示例用戶|score}} → 無效的使用者名稱
{{#cscore:示例用戶|changes}} → 無效的使用者名稱
{{#cscore:示例用戶|pages}} → 無效的使用者名稱
獲取用戶的編輯頁面數(pages)/編輯次數(changes)/戰鬥力(score)。

參見

MediaWiki官方文檔
魔術字
幫助:擴展:解析器函數
  1. 由於萌百使用了緩存,因此使用該函數檢測主站頁面可能不會被標記為高開銷,只有檢測多媒體文件(Media虛擬名字空間)會觸發,但仍應該避免在同一頁面中大量使用。
  2. User:東東君/從零開始的模板教程#循環語句