本頁不屬於有獸檔案館的條例或規則;若本頁內容與相關條例不一致的,以條例內容為準。
命名空間 |
---|
基本命名空間 |
討論命名空間 |
虛擬命名空間 |
未啟用命名空間 |
|
模板是MediaWiki軟件自帶的一項功能,用於在多個頁面顯示相同的內容。所有的模板頁面都位於「模板」命名空間下。在條目頁面,你往往會看到一些消息框,以及頁面右上角關於條目基本信息(如對於人物,有出生地、國籍等)的信息框,底部還會有導航框,這些都是利用了模板的功能。
模板的優點在於易於維護。當模板的內容改變之後,嵌入了該模板的頁面中的相應內容也將改變,不需要編輯這些頁面。
在wikitext中,嵌入一個模板的基本語法是{{模板名稱|參數}}
。參數可以有多個,也可以沒有。模板名稱就是模板頁面的名稱,通常不含命名空間。
你可以在此頁面查看本站的所有模板。
概述
假設有個頁面叫做「Template:歡迎」,其頁面內容如下:
歡迎來到有獸檔案館!
那麼,在其他頁面,使用{{歡迎}}
就可以得到「歡迎來到有獸檔案館!」的文字。如果「Template:歡迎」的內容被改變,那麼其他使用了該模板的頁面的內容也將會相應改變。
{{歡迎}}
歡迎來到有獸檔案館!
一般地,在任何頁面,使用{{名稱}}
即可嵌入包含該名稱的模板頁面,該模板對應頁面「Template:名稱」。如果該模板頁面內容被改變,那麼嵌入包含了該模板的頁面中相應的內容也將改變。
非模板命名空間的頁面也可以被嵌入包含。在嵌入包含頁面時,可以指定命名空間,主命名空間頁面可以在名稱前加上一個「:」。例如,{{:有獸雜談}}
將會嵌入包含名為「有獸雜談」而非「Template:有獸雜談」的頁面。
{{AABBCC:test}}
將會嵌入包含名為「Template:AABBCC:test」的頁面,而{{:AABBCC:test}}
則會嵌入包含名為「AABBCC:test」的主命名空間頁面。參數
參數是指每次調用模板時都需要指定的變量。參數一般是在模板中定義的,並在每次調用模板時賦值。
例如,假如頁面「Template:歡迎」的內容改成如下內容,設定一個參數:
{{{1}}},您好,歡迎來到{{{2}}}!
那麼,在其他頁面,嵌入此模板時就需要提供參數。比如:
{{歡迎|Steve|Minecraft}}
Steve,您好,歡迎來到Minecraft!
{{歡迎|Administrator|Windows XP}}
Administrator,您好,歡迎來到Windows XP!
從上面的模板代碼中不難看出,三層花括號中的數字表示第幾個參數,例如{{{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是第二個參數。以Template:參見為例:
並不建議在同一個模板調用中混合隱式命名和顯式命名的形式,否則容易出錯。比如,在{{模板名稱|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>萌娘百科}}
Example1 ,您好,歡迎來到 萌娘百科!
參數的默認值
在模板代碼中,每次定義參數都可以為參數提供一個默認值或缺省值。
嵌入模板時,如果某個參數(無論是編號參數還是命名參數)被定義了但沒有提供值,則解析模板時使用該參數的默認值,如果沒有指定默認值,則不處理參數。
在上面的這個例子中,可以給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=}}
您好,歡迎來到萌娘百科!
{{#ifeq:|{{{username|1}}}|{{{username|0}}}|提供了「username」參數|未提供參數「username」參數}}
模板默認值可以用來達到參數別稱的效果。例如,{{{username|{{{用户名|{{{用戶名|{{{使用者名稱|}}}}}}}}}}}}
。但是,一般不建議使用參數別稱。
替換引用
替換引用是指使用該模板的頁面被保存時,相關代碼就會被替換為模板的內容。替換引用有三種形式:
- subst:頁面被保存時,調用模板的代碼將被一次性替換為保存時的模板內容,這些內容將成為頁面的一部分,可以像一般內容一樣被編輯,與原來的內容分開。如果此後原模板頁面被更改,被替換後的內容將不受影響。
- safesubst:允許替換而不打破嵌入包含。當模板遇到非替換的展開(嵌入包含)時,subst的替換會保持不被解析,而safesubst則會視為像沒有safesubst修飾符存在一樣,因此子模板會被嵌入包含,變量和解析器函數會被求值。
- msgnw:以作為原始wiki語法的形式顯示包含模板。
嵌入包含
嵌入包含,簡稱嵌入,是指在頁面中顯示另一個頁面(通常是模板)的內容。假如,A頁面中有代碼{{B}}
,則頁面「A」嵌入包含了「Template:B」,頁面A稱為目標頁,頁面B稱為來源頁。
控制被嵌入包含的部分
被嵌入包含的頁面中,<noinclude>
、<includeonly>
和<onlyinclude>
可以用來控制哪些內容需要被嵌入包含。
<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>
包含,這樣文檔自身不會加入分類,但當模板嵌入包含該文檔時,則會將模板加入這些分類。