使用者:墨埜谷/儲藏室
萌娘百科自帶的幫助看得讓人眼花,因此我把自己暫時要學的放在這裡。
解析器函數
| “ | 解析器函數是由一個MediaWiki擴展zhwp:mw:Extension:ParserFunctions提供,包含多個解析函數解釋器。本擴展的典型語法是:
目前有預定義的函數:expr,if,ifeq,ifexpr,switch(rand暫時被廢除)。 各函數名都對大小寫不敏感。 語句中的空格、換行等空白字符將被省略。 |
” |
| ——zhwp:Help:解析器函數 | ||
expr
- 參見:Help:計算。
expr函數,計算數學表達式。語法為:
{{#expr: ''表达式'' }}
表達式支持的運算符有:
| 運算符 | 名稱 | 優先級 | 元數 | 結合性 | 樣例 |
|---|---|---|---|---|---|
| + | 正 | 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 | 捨入(最大9) | 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 |
round運算對運算數正負,位數正負都有不同的表現,參見下例。
邏輯運算符把假映射為0,把真映射為非0,且返回值只有0或1。
同一表達式中先計算高優先級運算。括號優先級高於一切。
if
if函數是一個if-then-else(如果-那麼-否則)結構,和Excel的if函數類似。語法是:
{{#if: <判断字符串> | <那么字符串> | <否则字符串> }}
{{#if: <判断字符串> | <那么字符串> |}}
若判斷字符串為非空字符串(忽略前導或後綴空格),則函數返回那麼字符串;若判斷字符串不是非空,則返回否則字符串。否則字符可被省略而不會造成錯誤,但函數在判斷字符串為空時便會返回空字符串。
ifeq
ifeq比較兩個字符串,返回比較結果。語法為:
{{#ifeq: <字符串1> | <字符串2> | <相等时返回的字符串> | <不相等时返回的字符串> }}
注意:兩個空字符串是相等的。
示例:
假設模板Ifeq test的內容是
{{#ifeq:{{{lang}}}|zh|我使用中文|I don't use Chinese}}
則{{Ifeq test|lang=zh}}的結果是我使用中文;而{{Ifeq test|lang=en|I prefer English}}的結果是I don't use Chinese。
ifexist
ifexist根據指定名稱的頁面是否存在,返回兩個參數中的一個。用法:
{{#ifexist: <待測頁面標題> | <存在文字> | <不存在文字> }}
注意不能跨維基使用
示例:
首先,我們已經知道test頁面不存在,User:Sex不存在,維基百科頁面存在,英文維基百科的頁面en:Minecraft存在,維基詞典裡面wikt:fuck存在。
- {{#ifexist:test|有test頁面|無test頁面}} 得到無test頁面
- {{#ifexist:User:Sex|該用戶頁存在|該用戶頁不存在}} 得到 該用戶頁不存在
- {{#ifexist:維基百科|√|×}} 得到 √
- {{#ifexist:en:Minecraft|1|0}} 得到 0
- {{#ifexist:wikt:fuck|1|0}}} 得到 0
ifexpr
ifexpr計算數學表達式,並根據計算結果返回字符串。
{{ #ifexpr: <表达式> | <表达式不为0的结果> | <表达式为0的结果> }}
表達式語法與expr相同。
switch
switch將一個值與多個預設值比較,若有匹配時則返回指定字符串,即雙射。語法是:
{{ #switch: <比较值>
| <预设值1> = <结果1>
| <预设值2> = <结果2>
| ...
| <预设值n> = <结果n>
| #default = <缺省结果>
}}
switch將從左往右逐一嘗試,直到出現匹配。函數將返回第一個匹配值對應的結果,而忽略後面的匹配值。如果沒有匹配,函數將返回預設結果。預設結果是指的#default=後面的內容。其中#default=在結果不包含等號時是可以省略的。如果預設結果沒有設置,函數將返回空串。
注意:「預設結果」是最後一個沒有等號的預設值或「#default」預設值對應的結果;如果期望把一個包含「=」號的字符串作為預設結果,則必須採用「#default」預設值形式。例如:
#default = <span style="color:red;">red</span>
switch也可用作滿射(多對一,避免重複設置結果)。即某預設值後未設置結果,這樣如果該預設值與比較值匹配,則函數返回第一個有結果的預設值的結果。例如:
{{ #switch: <比较值>
| <预设值1>
| <预设值2>
| <预设值3> = <结果3>
| <缺省结果>
}}
如果比較值與預設值1、預設值2或預設值3匹配,都將返回結果3。注意:「#default」後必須有「=」,但其他預設值可以使用「#default」的結果。
time
time是一個時間日期格式化函數,它的語法為:
{{ #time: 格式参数 }}
或者
{{ #time: 格式参数 | 时间参数 }}
如果時間參數未指定,則使用該條目被轉換為HTML的時間(值)。注意到由於緩存的緣故,這與條目被瀏覽的時間可能會有高達1星期的偏差。因此可能需要手工更新,方法是加上action=purge參數訪問頁面。
格式參數是一種格式字符,與在PHP的date中的用法相似。
下列格式代碼與在PHP中的意義一樣。所不同的是...
如果時間未被指定,則顯示文章最後一次被轉換成HTML的時間。由於緩存的關係,此時間和你瀏覽文章的時間可能有最長一個星期的差別。所以有時可能需要人工更新數據,方法是編輯文章但不做任何修改即保存。
參數format是表示格式的字符串,類似於PHP的時間格式.
以下格式代碼和PHP中date()函數意義相同。除了國際化(主要是語言)造成的差別以外,所有和PHP的不同點都應當作為軟體的錯誤進行報告。其中所有的數字輸出都會被替換成當地語言的時間格式,可以使用xn(見下文)恢復成顯示原來的數字。
| 代碼 | 描述 | 輸出 |
|---|---|---|
| d | 一個月中的第 n 天,不足兩位補充0 | 15 |
| D | 星期的縮寫,通常不國際化 | 一 |
| j | 一個月中的第 n 天,不足兩位不補0 | 15 |
| l | 星期的全稱,通常不國際化 | 星期一 |
| F | 月份的的全稱,通常需要國際化 | 12月 |
| m | 數字表示的月份,不足兩位補充0 | 12 |
| M | 月份的的縮寫,通常需要國際化 | 12月 |
| n | 數字表示的月份,不足兩位不補0 | 12 |
| Y | 四位年份 | 2025 |
| y | 二位年份 | 25 |
| H | 小時,不足兩位補充0 | 06 |
| i | 分鐘,不足兩位補充0 | 45 |
| s | 秒,不足兩位補充0 | 04 |
以下代碼是對PHP作出的擴展:
| 代碼 | 描述 |
|---|---|
| xn | 將接下來的數字代碼恢復成ASCII中的阿拉伯數字例如,在印地語中,{{ #time:H, xnH}}輸出०६, 06。 |
| xr | 將接下來的數字代碼顯示成羅馬數字 |
| xg | 輸出月份名字的屬格,只針對那些區分主格和屬格的語言。 |
| xx | 輸出"x" |
任何其他字符都將不做處理直接輸出。你也可以用引號來輸出未經處理的字符串。
- 引號中的字符直接輸出(但不輸出引號),沒有配對的引號也直接輸出。例如:
{{; #time: "现在是" F}}→ 現在是 12月{{ #time:i's"}}→ 45'04"
- 像PHP的date()函數一樣的反斜槓轉義也是支持的。 \H 直接輸出 H , \" 直接輸出 " 。
未來可能會增加更多格式代碼,可能是完善PHP中已有功能,也可能是增加新功能。
參數time的格式參照PHP的strtotime()函數。它同時支持相對時間,如"+10 hours",用來表示時區轉換。更多信息參見the GNU tar manual。
下表以國際協調時間(UTC)2025年12月15日(星期一)06時45分04秒(北京時間2025年12月15日(星期一)14時45分04秒)為例說明各格式參數的作用。
| 格式參數 | 說明 | 顯示結果 |
|---|---|---|
| A | 顯示AM或PM | AM |
| a | 顯示am或pm | am |
| c | 顯示長日期 | 2025-12-15T06:45:04+00:00 |
| D | 星期數,以一個漢字顯示 | 一 |
| d | 日期日數,有0補齊, | 15 |
| F或M | 月份 | 12月 |
| G或g | 當前UTC時間小時數,1位或2位數字 | 6 |
| H或h | 小時數,2位數字 | 06 |
| i | 分鐘數,2位數字 | 45 |
| j | 日數,2位數字 | 15 |
| L | 日期星期數,1位數字,星期日為1,星期六為7 | 0 |
| l | 日期星期數,3位漢字 | 星期一 |
| m | 月份數,2位數字 | 12 |
| N | 星期數,星期一為1,星期日為7 | 1 |
| n | 月份數,1位或2位數字 | 12 |
| r | 英文長日期格式 | Mon, 15 Dec 2025 06:45:04 +0000 |
| s | 秒數 | 04 |
| t | 該月天數 | 31 |
| U |
|
1765781104 |
| W | 日期周數,顯示日期為當年第幾周 | 51 |
| w | 星期數,星期日為0,星期六為6 | 1 |
| Y | 日期年份,4位數字 | 2025 |
| y | 日期年份,2位數字 | 25 |
| z | 顯示日期為當年第幾日 | 348 |
系統默認的時間參數為當前UTC+0時間,可以使用{{#time:参数|+8 hours}}得到當前北京時間(UTC+8時間)。
時間參數可以使用絕對時間,如「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
使用xr可以在其後顯示羅馬數字,如{{#time:xrY年xrm月xrd日|2008-12-31}}顯示為MMVIII年XII月XXXI日。
invoke
invoke vt. 調用
(調用位於Scribunto中的模塊;見維基百科:Lua)什麼鬼啊!!!
{{#invoke: module | function | arg1 | arg2 | ... }}
Eg.1
{{#invoke: Math | random | 1 | 10 }}
→
3
Eg.2
{{#invoke: Math | random | 1 | 10 }}
→
1
Eg.3
{{#invoke: Math | random | 1 | 10 }}
→
9
備註1:min value&max value的值可以填寫字母和unicode,但還沒有搞清楚是怎麼轉換的。大概是編碼之類的
備註2:維基百科的模板:zhwp:分類:基於Lua程式語言的模板,那麼萌娘百科有哪些模板?
變量
這是一個「變量」的列表,變量可被用於維基語法。變量的返回值可以根據時間、維基項目、引用頁面而變化。
以下的列表中,變量都在左邊,右邊是它的在此時、此項目、此頁面返回值。
變量名是一組所謂的「魔術字」的一部分。
常變量
{{ns:-2}} {{ns:Media}}
|
Media Media |
{{ns:-1}} {{ns:Special}}
|
Special Special |
{{ns:0}} (主命名空間)
|
(空字符串) |
{{ns:1}} {{ns:Talk}}
|
Talk Talk |
{{ns:2}} {{ns:User}}
|
User User |
{{ns:3}} {{ns:User_talk}}
|
User talk User talk |
{{ns:4}} {{ns:Project}}
|
萌娘百科 萌娘百科 |
{{ns:5}} {{ns:Project_talk}}
|
萌娘百科 talk 萌娘百科 talk |
{{ns:6}} {{ns:Image}}
|
File File |
{{ns:7}} {{ns:Image_talk}}
|
File talk File talk |
{{ns:8}} {{ns:MediaWiki}}
|
MediaWiki MediaWiki |
{{ns:9}} {{ns:MediaWiki_talk}}
|
MediaWiki talk MediaWiki talk |
{{ns:10}} {{ns:Template}}
|
Template Template |
{{ns:11}} {{ns:Template_talk}}
|
Template talk Template talk |
{{ns:12}} {{ns:Help}}
|
Help Help |
{{ns:13}} {{ns:Help_talk}}
|
Help talk Help talk |
{{ns:14}} {{ns:Category}}
|
Category Category |
{{ns:15}} {{ns:Category_talk}}
|
Category talk Category talk |
{{SITENAME}}
|
萌娘百科 |
{{SERVER}}
|
https://moegirl.icu |
{{SERVERNAME}}
|
moegirl.icu |
{{localurl:页面完整名}}
|
/%E9%A1%B5%E9%9D%A2%E5%AE%8C%E6%95%B4%E5%90%8D |
{{localurl:a&b!}}
|
/A%26b! /A%26b! |
{{localurl:页面|query=x}}
|
/index.php?title=Page&query=x |
{{fullurl:页面完整名}}
|
https://moegirl.icu/%E9%A1%B5%E9%9D%A2%E5%AE%8C%E6%95%B4%E5%90%8D |
{{fullurl:a&b!}}
|
https://moegirl.icu/A%26b! https://moegirl.icu/A%26b! |
偽模板localurl將空格替換為下劃線,對特殊字符進行編碼。比如{{localurl:a !}}得到/A_!。
注意到localurl不會將「|」後的「查詢」字符串編碼。這個問題可以借把查詢字符串移至左邊解決。比如,Special:Contributions和Special:Recentchangeslinked數據可以在「/」後出現:
{{fullurl:Special:Contributions/墨埜谷|limit=10}}得到:- https://moegirl.icu/index.php?title=Special:Contributions/%E5%A2%A8%E5%9F%9C%E8%B0%B7&limit=10;
- 但
{{fullurl:Special:Contributions|target=墨埜谷&limit=10}}會得到不正確的結果: - https://moegirl.icu/index.php?title=Special:Contributions&target=墨埜谷&limit=10
localurle及其副本fullurle可以執行更多字符編碼,但只用於Mediawiki內部,而其存在是為了保證向前兼容性。
偽模板{{fullurl}}是一個新近添加的{{SERVER}}{{localurl}}的縮略。
隨時間變化
{{CURRENTYEAR}} |
2025 | {{CURRENTMONTH}} |
12 |
{{CURRENTMONTHNAME}} |
12月 | {{CURRENTMONTHABBREV}} |
12月 |
{{CURRENTMONTHNAMEGEN}} |
12月 | {{CURRENTWEEK}} |
51 |
{{CURRENTDAY}} |
15 | {{CURRENTDAY2}} |
15 |
{{CURRENTDAYNAME}} |
星期一 | {{CURRENTDOW}} |
1 |
{{CURRENTTIME}} |
06:45 | {{REVISIONID}} |
- |
{{NUMBEROFARTICLES}} |
132,203 | ||
{{NUMBEROFFILES}} |
0 | ||
{{NUMBEROFUSERS}} |
72,541 |
NUMBEROFARTICLES:在主命名空間內的包含至少一個連結且不是重新導向的頁面,包括小作品及消歧義頁面。
返回結果也與系統變量$wgUseCommaCount有關。如果該變量為真,條目統計將僅依據文章是否包含逗號(「,」)來統計,否則就會只統計有內部連結(「[[」)的條目。在DefaultSettings.php的默認設置為假。
時間變量並非隨頁面的每一次被打開而變化。由於條目的HTML文本有緩存機制,因此時間變量有可能誤差達24小時,所以它們並不是可信的。
- CURRENTWEEK從1到54 (上一年最後一周如果跨到了今年也算是第一周,在這種情況下如果今年最後一周跨到了下一年,則為第54周);
- CURRENTMONTHNAMEGEN是月份名稱屬格語法形式,用於芬蘭語;
- CURRENTDAY2在日期1到9前加上前導0,從而可以得到ISO格式日期:2025-12-15T06:45Z。
隨頁面變化
{{PAGENAME}} |
墨埜谷/儲藏室 | {{NAMESPACE}} |
User |
{{PAGENAMEE}} |
%E5%A2%A8%E5%9F%9C%E8%B0%B7/%E5%82%A8%E8%97%8F%E5%AE%A4 | {{NAMESPACEE}} |
User |
{{FULLPAGENAME}} |
User:墨埜谷/儲藏室 | {{SUBPAGENAME}} |
儲藏室 |
{{FULLPAGENAMEE}} |
User:%E5%A2%A8%E5%9F%9C%E8%B0%B7/%E5%82%A8%E8%97%8F%E5%AE%A4 | {{SUBPAGENAMEE}} |
%E5%82%A8%E8%97%8F%E5%AE%A4 |
{{TALKSPACE}} |
User talk | {{SUBJECTSPACE}} |
User |
{{TALKSPACEE}} |
User_talk | {{SUBJECTSPACEE}} |
User |
{{TALKPAGENAME}} |
User talk:墨埜谷/儲藏室 | {{SUBJECTPAGENAME}} |
User:墨埜谷/儲藏室 |
{{TALKPAGENAMEE}} |
User_talk:%E5%A2%A8%E5%9F%9C%E8%B0%B7/%E5%82%A8%E8%97%8F%E5%AE%A4 | {{SUBJECTPAGENAMEE}} |
User:%E5%A2%A8%E5%9F%9C%E8%B0%B7/%E5%82%A8%E8%97%8F%E5%AE%A4 |
{{ARTICLESPACE}} |
User | {{ARTICLEPAGENAME}} |
User:墨埜谷/儲藏室 |
{{ARTICLESPACEE}} |
User | {{ARTICLEPAGENAMEE}} |
User:%E5%A2%A8%E5%9F%9C%E8%B0%B7/%E5%82%A8%E8%97%8F%E5%AE%A4 |
在主命名空間(條目的命名空間){{NAMESPACE}}和{{NAMESPACEE}}都返回空字符串。
PAGENAMEE顯示經編碼的頁面標題,即空格變為下劃線,特殊字符編碼,所以可用來組成URL。例如,某頁面叫"Grand café",PAGENAMEE會返回"Grand_caf%C3%A9"。不要在localurl系列變量的第一部分使用此變量,都則會造成結果的紊亂。
當被用於模板中時,這些變量返回的都是引用模板的頁面相應值,而不是被引用模板的相應值。
隨修改版本變化
{{REVISIONID}}得到-
REVISIONID返回一個特殊的值,以顯示當前頁面的當前版本在所有頁面的所有版本中的編號。在URL中可以採用添加「&oldid=123456」的方法引用此頁面的該版本,無論是否為最新版本。這在討論頁、文章引用都十分有用。
{{REVISIONTIMESTAMP}}得到20220808044330,即最後一次編輯的時間戳(TIMESTAMP)。
多變量結合的樣例
{{fullurl:{{FULLPAGENAME}}|action=edit}}
{{fullurl:Special:Whatlinkshere|target={{NAMESPACE}}:{{PAGENAME}}}}
{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}}
{{fullurl:Special:Whatlinkshere|target={{NAMESPACE}}:{{PAGENAME}}}}
[[{{NAMESPACE}}:{{PAGENAME}}_1]]
{{fullurl:{{NAMESPACE}}:{{PAGENAME}}_1}}
{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|oldid={{REVISIONID}}}}
{{SERVER}}{{localurl:頁面 }}與{{fullurl:頁面 }}等效,不過後者在Mediawiki(1.5以上)版本中才可用。
最後一個樣例對頁面本身用處不大,但可作為一種「永久連結」在複製件中發揮功用。
參見
- Help:替換引用:應用替換引用技巧。
- MagicWord.php
2025
12月 15
14:45
