說明:模板

幫助頁面

模板是MediaWiki軟件自帶的一項功能,用於在多個頁面顯示相同的內容。在條目頁面,你往往會看到一些消息框,

以及頁面右上角關於條目基本信息(如對於人物,有出生地、國籍等)的信息框,底部還會有導航框,這些都是利用了模板的功能。

模板的優點在於易於維護。當模板的內容改變之後,嵌入了該模板的頁面中的相應內容也將改變,不需要編輯這些頁面。

在wikitext中,嵌入一個模板的基本語法是{{模板名稱|參數}}。參數可以有多個,也可以沒有。模板名稱就是模板頁面的名稱,通常不含命名空間。

你可以在此頁面查看本站的所有模板。

概述

假設有個頁面叫做「Template:歡迎」,其頁面內容如下:

歡迎來到有獸檔案館!

那麼,在其他頁面,使用{{歡迎}}就可以得到「歡迎來到有獸檔案館!」的文字。如果「Template:歡迎」的內容被改變,那麼其他使用了該模板的頁面的內容也將會相應改變。

您所輸入的
{{歡迎}}
您所看到的

歡迎來到有獸檔案館!

一般地,在任何頁面,使用{{名稱}}即可嵌入包含該名稱的模板頁面,該模板對應頁面「Template:名稱」。如果該模板頁面內容被改變,那麼嵌入包含了該模板的頁面中相應的內容也將改變。

非模板命名空間的頁面也可以被嵌入包含。在嵌入包含頁面時,可以指定命名空間,主命名空間頁面可以在名稱前加上一個「:」。例如,{{:上海軌道交通7號線}}將會嵌入包含名為「上海軌道交通7號線」而非「Template:上海軌道交通7號線」的頁面。

參數

參數是指每次調用模板時都需要指定的變量。參數一般是在模板中定義的,並在每次調用模板時賦值。

例如,假如頁面「Template:歡迎」的內容改成如下內容,設定一個參數:

{{{1}}},您好,歡迎來到{{{2}}}!

那麼,在其他頁面,嵌入此模板時就需要提供參數。比如:

您所輸入的
{{歡迎|天祿|鹿人店}}
您所看到的

天祿,您好,歡迎來到鹿人店!

您所輸入的
{{歡迎|四不像|有獸茶談}}
您所看到的

四不像,您好,歡迎來到有獸茶談!

從上面的模板代碼中不難看出,三層花括號中的數字表示第幾個參數,例如 【四不像】 就是第一個參數,【有獸茶談】 則是代表第二個參數。

參數的名稱除了可以是數字之外,也可以是固定的文本。此外,參數還可以指定默認值,這樣當參數未被指定時,則取默認值。

編號參數

編號參數是指名稱為正整數的參數,在嵌入模板時,這些參數通常都是依次提供,不需要指定參數名稱,系統知道這是第幾個參數,因此也稱為匿名參數

調用模板時,如果傳入多個參數,則這多個參數用管道符|分隔。例如,在{{模板名稱|a|b|c}}中,a對應參數{{{1}}}b對應參數{{{2}}}c對應參數{{{3}}}

通常來說,編號參數是不指定名稱的,因為系統很清楚每個參數是第幾個參數。但是,你也可以為每個參數指定名稱,即「名稱=值」的形式。例如,{{模板名稱|a|b|c}}實際上也就相當於{{模板名稱|1=a|2=b|3=c}}。當參數名稱被明確指定時,參數的賦值順序就不再重要。例如,{{模板名稱|1=a|2=b|3=c}}{{模板名稱|1=a|3=c|2=b}}是同一個意思,儘管c排在了b的後面,但調用時很明確地指定了c是第3個參數,而b是第二個參數。

並不建議在同一個模板調用中混合隱式命名和顯式命名的形式,否則容易出錯。比如,在{{模板名稱|1=a|2=b|c|d}}中,a和c實質上都是第一個參數,b和d都是第二個參數。當同一個參數被賦值多次的時候,軟件會報出警告。

編號的參數隱式賦值時有一個限制,就是內容不能包含等號,否則會被識別為命名參數。例如,設想被歡迎的人的名字叫做「x+y=z」,嵌入{{欢迎|x+y=z|有兽档案馆}}並不會得到「x+y=z,您好,歡迎來到有獸檔案館!」,因為這樣的模板調用中,會將x+y=z理解為:名稱為「x+y」的參數值為「z」,而非第一個參數的值為「x+y=z」。這種情況下,可以通過指定參數名稱或繞開等號的方式來解決:

您所輸入的
{{歡迎|x+y=z|有獸檔案館}}
您所看到的

{{{1}}},您好,歡迎來到有獸檔案館!

您所輸入的
{{歡迎|1=x+y=z|2=有獸檔案館}}
您所看到的

x+y=z,您好,歡迎來到有獸檔案館!

您所輸入的
{{歡迎|x+y<nowiki>=</nowiki>z|有獸檔案館}}
您所看到的

x+y=z,您好,歡迎來到有獸檔案館!

您所輸入的
{{歡迎|x+y{{=}}z|有獸檔案館}}
您所看到的

x+y=z,您好,歡迎來到有獸檔案館!

上面的第二種方法也適用於參數的值中含有管道符|的情形,假如你需要將|用作參數值的內容,而不是將其用來分隔參數,則可以用nowiki標籤或魔術字{{!}}。假如被歡迎的用戶名字叫做「A|B」:

您所輸入的
{{歡迎|A|B|有獸檔案館}}
您所看到的

A,您好,歡迎來到B!

您所輸入的
{{歡迎|A<nowiki>|</nowiki>B|有獸檔案館}}
您所看到的

A|B,您好,歡迎來到有獸檔案館!

您所輸入的
{{歡迎|A{{!}}B|有獸檔案館}}
您所看到的

A|B,您好,歡迎來到有獸檔案館!

此外,與明確指定參數名稱相比,隱式的參數名稱賦值還有一個特點就是,隱式的賦值保留首尾空格。當指定參數名稱賦值時,如果參數值的兩端有空格,這些空格就會被移除:

您所輸入的
{{歡迎|   User   | 有 獸 檔 案 館 }}
您所看到的

User ,您好,歡迎來到 有 獸 檔 案 館 !

您所輸入的
{{歡迎|1=   User   |2=   有 獸 檔 案 館  }}
您所看到的

User,您好,歡迎來到有 獸 檔 案 館!

命名參數

如果模板有很多參數,大量使用編號參數則很容易讓人弄暈,這時候可以為參數指定具體的名稱。命名參數是指名稱為其他任意字符的參數。在調用模板時,賦值參數時就必須明確指定參數名稱。

例如,將上述提到的「歡迎」模板的代碼改為:

{{{username}}},您好,歡迎來到{{{sitename}}}!

這樣,嵌入模板時,就需要提供參數名稱以及其值,例如:

您所輸入的
{{歡迎|username=Example1|sitename=嗶哩嗶哩}}
您所看到的

Example1,您好,歡迎來到嗶哩嗶哩!

您所輸入的
{{歡迎|username=ExampleX=Y|sitename=Media Wiki}}
您所看到的

ExampleX=Y,您好,歡迎來到Media Wiki!

由於命名參數在賦值時必須指定名稱,因此不會存在參數值被等號打斷的問題,參數值的首尾空格也將自動被截去。如果確實需要保留空格,可以使用nowiki標籤進行轉換,例如:

您所輸入的
{{歡迎|username=Example1<nowiki>    </nowiki>|sitename=<nowiki>    </nowiki>Media Wiki}}
您所看到的

Example1 ,您好,歡迎來到 Media Wiki!

參數的默認值

在模板代碼中,每次定義參數都可以為參數提供一個默認值缺省值

嵌入模板時,如果某個參數(無論是編號參數還是命名參數)被定義了但沒有提供值,則解析模板時使用該參數的默認值,如果沒有指定默認值,則不處理參數。

在上面的這個例子中,可以給sitename參數添加默認值「有獸檔案館」,即:

{{{username}}},您好,歡迎來到{{{sitename|有獸檔案館}}}!

這樣,{{歡迎|username=User114514}}將等價於{{歡迎|sitename=有獸檔案館|username=User114514}}

需要注意的是,不提供值與提供空值是不同的。例如,{{歡迎|sitename=|username=User114514}}將直接產生「User114514,您好,歡迎來到!」。

另外,參數的默認值也可以設為空字符串,然後使用解析器函數進行處理。這裏,將「歡迎」模板再進行一些增強:如果username沒有指定,或者為空,則不顯示username,「您好」一詞之前也沒有顯示逗號;如果sitename沒有指定,或者為空,則顯示為「有獸檔案館」。代碼如下:

{{#if:{{{username|}}}|{{{username}}},}}您好,歡迎來到{{#if:{{{sitename|}}}|{{{sitename}}}|有獸檔案館}}!

上面的模板調用效果如下:

您所輸入的
{{歡迎|username=User114514}}
您所看到的

User114514,您好,歡迎來到有獸檔案館!

您所輸入的

{{歡迎|sitename=|username=User114514}}

您所看到的

User114514,您好,歡迎來到有獸檔案館!

您所輸入的

{{歡迎|sitename=萌娘百科!}}

您所看到的

您好,歡迎來到萌娘百科!

您所輸入的

{{歡迎|sitename=萌娘百科|username=}}

您所看到的

您好,歡迎來到萌娘百科!

模板默認值可以用來達到參數別稱的效果。但是,一般不建議使用參數別稱。

替換引用

替換引用是指使用該模板的頁面被保存時,相關代碼就會被替換為模板的內容。替換引用有三種形式:

  • subst:頁面被保存時,調用模板的代碼將被一次性替換為保存時的模板內容,這些內容將成為頁面的一部分,可以像一般內容一樣被編輯,與原來的內容分開。如果此後原模板頁面被更改,被替換後的內容將不受影響。
  • safesubst:允許替換而不打破嵌入包含。當模板遇到非替換的展開(嵌入包含)時,subst的替換會保持不被解析,而safesubst則會視為像沒有safesubst修飾符存在一樣,因此子模板會被嵌入包含,變量和解析器函數會被求值。
  • msgnw:以作為原始wiki語法的形式顯示包含模板。

嵌入包含

嵌入包含,簡稱嵌入,是指在頁面中顯示另一個頁面(通常是模板)的內容。假如,A頁面中有代碼{{B}},則頁面「A」嵌入包含了「Template:B」,頁面A稱為目標頁,頁面B稱為來源頁。

控制被嵌入包含的部分

  • <noinclude>...</noinclude>內的部分,在源頁面自身會顯示,但是在目標頁面嵌入時不會顯示。
  • <includeonly>...</includeonly>內的部分,在源頁面自身不會顯示,但是在目標頁面嵌入時會顯示。
  • <onlyinclude>...</onlyinclude>若存在,則該標籤以外的部分在目標頁面嵌入時都不會顯示。

這裏舉個例子(假設模板名稱為hw):

源頁面 目標頁面的模板調用 源頁面效果 目標頁面效果
Hello<noinclude> world</noinclude>!
{{hw}}
Hello world! Hello!
Hello<includeonly> world</includeonly>!
{{hw}}
Hello! Hello world!
Hello <onlyinclude>world</onlyinclude>!
{{hw}}
Hello world! world

控制嵌入包含內容的最典型的例子就是模板文檔。模板代碼中,往往會出現<noinclude>{{doc}}</noinclude>,這樣在模板頁面自身會出現模板文檔,但是其他頁面嵌入該模板時,不會將整個文檔嵌入包含進去。類似的,文檔中的模板分類連結也會被<includeonly>...</includeonly>包含,這樣文檔自身不會加入分類,但當模板嵌入包含該文檔時,則會將模板加入這些分類。