使用說明:模板

本页使用了标题或全文手工转换,现处于台湾繁体模式
說明頁面

模板(英語:Template)是MediaWiki軟體內建的一項功能,用於在多個頁面顯示相同的內容。所有的模板頁面都位於「模板」命名空間下。在條目頁面,你往往會看到一些訊息方塊,以及頁面右上角關於條目基本資訊(如對於人物,有出生地、國籍等)的資訊框,底部還會有導航框,這些都是利用了模板的功能。

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

在wikitext中,嵌入一個模板的基本語法是模板連結:{{模板名稱|參數}}。參數可以有多個,也可以沒有。模板名稱就是模板頁面的名稱,通常不含命名空間。例如。模板链接:{{colorbox|green}}呼叫的模板頁面就是Template:Colorbox

你可以在此頁面檢視本站的所有模板。

概述

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

歡迎來到求聞百科!

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

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

歡迎來到求聞百科!

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

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

參數

參數(英語:parameter)是指每次呼叫模板時都需要指定的變數。參數一般是在模板中定義的,並在每次呼叫模板時賦值。

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

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

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

您所輸入的
{{歡迎|Steve|Minecraft}}
您所看到的

Steve,您好,歡迎來到Minecraft!

您所輸入的
{{歡迎|Administrator|Windows XP}}
您所看到的

Administrator,您好,歡迎來到Windows XP!

從上面的模板代碼中不難看出,三層花括號中的數字表示第幾個參數,例如{{{1}}}就是第一個參數,{{{2}}}則是代表第二個參數。

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

編號參數

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

呼叫模板時,如果傳入多個參數,則這多個參數用管道符|分隔。例如,在{{模板名稱|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=鳳梨|2=荔枝|3=蓮霧}}
您所看到的
參見:鳳梨、​荔枝蓮霧
您所輸入的
{{參見|1=鳳梨|3=蓮霧|2=荔枝}}
您所看到的
參見:鳳梨、​荔枝蓮霧

並不建議在同一個模板呼叫中混合隱式命名和顯式命名的形式,否則容易出錯。比如,在模板連結:{{模板名稱|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,您好,歡迎來到求 聞 百 科!

命名參數

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

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

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

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

您所輸入的
{{歡迎|username=Example1|sitename=萌娘百科}}
您所看到的

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

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

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

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

您所輸入的
{{歡迎|username=Example1<nowiki>    </nowiki>|sitename=<nowiki>    </nowiki>萌娘百科}}
您所看到的

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

參數的預設值

在模板代碼中,每次定義參數都可以為參數提供一個預設值(英語:default value)或預設值

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

在上面的這個例子中,可以給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=}}

您所看到的

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

模板預設值可以用來達到參數別稱(英語:alias)的效果。例如,{{{username|{{{用户名|{{{用戶名|{{{使用者名稱|}}}}}}}}}}}}。但是,一般不建議使用參數別稱。

替換引用

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

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

嵌入包含

嵌入包含(英語:transclusion),簡稱嵌入,是指在頁面中顯示另一個頁面(通常是模板)的內容。假如,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>包含,這樣文件自身不會加入分類,但當模板嵌入包含該文件時,則會將模板加入這些分類。

參見