Help:模版

如果你需要在多個頁面上包含同樣的文本的話, MediaWiki 的模板功能就起到作用了 (就像上面的幫助文檔都會有的標籤一樣)。 與插件和媒體文件不同的是,模板沒有管理中心。編輯者可以從頭編寫、複製現有模板或導入來自其他維基的模板頁面。

創建模板

模板其實也是一種 wiki 頁面,但它是主要是用於嵌入到其它頁面中。模板的頁面名稱最前面都有 Template: 將它分配到該名字空間。除此之外,像其他頁面一樣創建就可以了。

下面展示了模板的最簡單使用方法。如果你以如下一段爲內容,創建了一個名叫「Template:Welcome」的模板

您好!歡迎來到維基!

這樣,你就創建了你的第一個模板!如果你接下來插入:

{{Welcome}}

到其他任一頁面,當該頁面被訪問時,「您好!歡迎來到維基!」字樣就會代替{{Welcome}}而顯示。模板的內容會嵌入到其他頁面,例如:它已整合到剛剛的頁面。

你可以在任一頁面的任何位置添加 {{Welcome}} 來歡迎其他人。設想一下該模板被用在100個頁面中。如果你後來將模板內容變成:

嗨,您好!歡迎來到這個奇妙的維基。

並且重新訪問之前用到該模板的的100個頁面,你會看到新的文字而不是原先的。你用這個方法改變了100個頁面的內容,而不用手動修改它們,因爲模板是被嵌入這些頁面中的。

這只是模板的一個小應用。除此之外,模板還具有更多靈活易用的功能。

使用模板

模板除了作為普通的 wiki 頁面之外,還可以有以下三種使用方法:

  • {{模板名称}} 就像上面描述的那樣,這個連結在頁面上的模板連結被調用時將動態替換為[[Template:模板名称]]當前的內容。連結在頁面源文件中不會變化。
  • {{subst:模板名称}}當這個模板連結被使用時,將會一次性替換為[[Template:模板名称]]截止包含連結的頁面被保存時的內容:一份[[Template:模板名称]]內容的拷貝將替換模板連結。該內容成為包含頁面的一部分,可以向一般內容一樣被編輯,與源內容分開。注意:對原始模板頁面的日後更改將不會更新包含這種模板連結的頁面。
  • {{safesubst:模板名称}} 這種連結被解釋為允許不打破嵌入包含的替換。
  • {{msgnw:模板名称}} 會將模板的原始碼包含在頁面中,類似<nowiki>一樣。

事實上,在一個普通的維基的頁面也可以使用模板,只要指定它在命名空間:

  • {{Template:頁面名稱}} 包含 [[Template:頁面名稱]]
  • {{Talk:頁面名稱}} 包含 [[Talk:頁面名稱]]
  • {{:頁面名稱}} 包含 [[頁面名稱]]
  • {{subst::頁面名稱}} 把它的內容替換成 [[頁面名稱]]

若不存在這個名字空間,整個標題會被假定成模板的名稱:

  • {{Foo:欄位}} 包含 [[Template:Foo:欄位]]

參數

為豐富嵌入包含機制,MediaWiki允許對被嵌入包含的模板傳送參數。參數允許模板產生不同的內容或者行為。

感謝函包括感謝的原因(示例中的「你的努力」)和署名(「張三」)。您的目標是任何用戶可以感謝其他用戶,無論任何原因。

為了讓任何人可以因為任何原因感謝任何人,你需要創建一個感謝函模板,如Template:Thankyou。使用感謝函模板會讓所有感謝函看起來相似,但其中指定部分內容應該可以自定義(如感謝的原因和署名),所以你需要把這些內容設置為變量。感謝函模板的核心內容如下所示:

'''感谢你!'''
感谢 {{{1}}}。
来自 {{{2}}}

請注意{{{1}}}{{{2}}},這就是變量,它們可以隨著模板引入其他頁面。聲明變量的方法是使用三組花括號:{{{ }}}。這與模板名稱的花括號不同。

在調用模板時,需要為變量賦值,變量間用一個豎線符號(|)分隔。MediaWiki允許三種為變量賦值的方式:隱式賦值、按編號賦值、按名稱賦值。

隱式賦值

隱式賦值要求按變量聲明順序賦值:

{{Thankyou|你的努力|张三}}

例中{{Thankyou}}模板接收{{{1}}}=你的努力{{{2}}}=张三

注意:若想為變量隱式賦值,則該模板下所有變量必須全部隱式賦值。任何一個變量使用編號或名稱賦值後,該模板便不再接受隱式賦值。

注意:如果等號出現在匿名的模板參數中,它將被解釋為一個命名參數,將等號之前文本作為參數名稱,等號後面的文本是參數的值。

按編號賦值

使用編號賦值時,需要寫出變量的編號:

{{Thankyou|2=张三|1=你的友好}}

例中,雖然不是按變量的聲明順序賦值,但模板{{Thankyou}}接收到的是{{{1}}}=你的友好{{{2}}}=张三

按名稱賦值

與按編號賦值類似,第三種賦值方法只是把編號換成了名稱。為了演示,需要將模板內容改為:

'''感谢你!'''
感谢 {{{原因}}}。
来自 {{{署名}}}

例中用{{{原因}}}和{{{署名}}}而不是數字聲明了變量。賦值方法如下:

{{Thankyou|署名=张三|原因=你的一切}}

例中{{Thankyou}}模板接收{{{原因}}}=你的一切{{{署名}}}=张三

模板中使用命名參數的優點是,傳送參數時的順序可以靈活掌握,並且使有許多參數的模板的代碼更容易理解。

預設值

沒有為變量賦值的話,會直接輸出變量本身。此時,設置變量的預設值會方便許多。更改模板內容為:

'''感谢你!'''
感谢 {{{原因|一切}}}。
来自 {{{署名|张三}}}

{{{原因|一切}}}表示如果{{{原因}}}變量沒有被賦值,則輸出預設值一切。類似的,{{{署名|张三}}}{{{署名}}}變量預設輸出张三

控制模板嵌入

默認狀態,模板內容被顯示在實例中,無論被直接查看還是包含到其他頁面中。當然,你可以用 <noinclude><includeonly> 來控制模板的哪些部分會被嵌入。

任何在 <noinclude></noinclude> 之間的標記,都只會在直接查看模板頁面的時候顯示出來,而不會被包含在頁面中。當你不想讓包括在模板中的文本或代碼傳播到任何包括它頁面這各功能很有用,比如:

  • 為模板歸類請使用分類連結
  • 跨語言連結 可連接到其他語言版本中的類似模板
  • 關於如何使用該模板的解釋文字

與此相對的是 <includeonly>。在<includeonly></includeonly> 之間的文字只會在嵌入頁面的時候才會被處理或顯示,直接查看時不會顯示。比如:

  • 很明顯的一個使用方式是將所有有某個模板的頁面加入某個分類,而不將模板本身加入這個分類。注意 注意: 當你改變模板中的分類的時候,使用這個模板的分類可能不會立即改變;這會在工作排隊中處理。
  • 確認查看模板頁面本身時模板代碼沒有執行。典型地,這是因為它需要參數,並且沒有參數時執行會產生不想要的結果。

當模板頁面被直接查看和被其他頁面包含時,所有 <noinclude><includeonly> 之外的代碼都會被處理和顯示。 關鍵是這兩個標記之間的東東。

所有 <onlyinclude> 標記之外的代碼在嵌入時被棄置不用。 即使段落被標記為 includeonly ,在嵌入時一樣會棄用,除非她們也被標記為 onlyinclude。 關鍵在於標記之外的東西。

Nesting of these tags is also possible.

這三部分嵌入標記實現了處理和表達所有可能的組合。 評論也能起效。