MediaWiki 使用者指南/模板
模板提供了一種在多個頁面上重複相同文字的方法。更高階的模板使用引數,甚至使用程式語言中的控制結構。也就是說,基本的模板非常容易建立,不需要任何程式設計知識。
模板有自己的“模板:”名稱空間。
要建立一個名為“header”的模板,請編輯頁面“模板:header”並將要重複的文字放入該模板中。
要在頁面中使用模板,請鍵入“{{header}}”。標記模板使用的字元是“{”和“}”,也稱為花括號。
要在文字儲存之前直接將模板名稱替換為其內容,請使用“{{subst:header}}”。
模板可以有無名引數和有名引數。無名引數自動編號。
要在模板中使用無名引數,請使用 {{{1}}}、{{{2}}} 等。注意,三個花括號。
要在模板中使用有名引數,請使用與數字相同的三個花括號和名稱,例如 {{{parameter_name}}}。
要在主名稱空間頁面中使用模板時傳遞引數
{{header|apple}}
{{header|parameter=apple}}
要在無名引數的值中傳遞等號 (=),你需要一個變通方法:對於引數編號 1,使用 {{template|1=text=with=equality=sign}}。
值得為許多使用者使用的模板編寫文件。一種選擇是在它們的討論頁面上記錄它們。另一種選擇是在其主文字中記錄它們,並將文件用 <noinclude> 標籤包圍。第二個選項的優點是,如果使用者想了解模板的工作原理,可以在實驗其程式碼時在與模板相同的檢視中看到其語法。
如果安裝了 MediaWiki 的 ParserFunctions 擴充套件,則可以使用諸如if 和switch 之類的控制結構。
| 關鍵字 | 語法 | 注意 |
|---|---|---|
| #SWITCH |
{{#switch: <comparison value>
| <value1> = <result1>
| <value2> = <result2>
| ...
| <valuen> = <resultn>
| <default result>
}}
|
|
| #IF |
{{ #if: <condition string> | <code if true> }}
{{ #if: <condition string> | <code if true>
| <code if false> }}
|
如果條件字串非空且不只包含空白符,則被視為真。 |
| #IFEQ |
{{ #ifeq: <text 1> | <text 2> | <code if equal> }}
{{ #ifeq: <text 1> | <text 2> | <code if equal>
| <code if not equal> }}
|
|
| #IFEXISTS |
{{ #ifexist: <page name>
| <wikitext if page exists>
| <wikitext if page does not exist> }}
|
進一步閱讀
- Help:Extension:ParserFunctions,mediawiki.org
上面你已經學習瞭如何使用模板,也就是說讓 MediaWiki 用模板的內容替換被花括號包圍的模板名稱。以類似的方式,你可以轉入任何頁面,而不僅僅是模板,方法是編寫以下內容
{{:Pagename}}
這適用於主名稱空間中的頁面。要包含任何名稱空間中的任何頁面,請使用
{{Namespace:Pagename}}
模板的使用實際上是這種使用的特例,只是因為你沒有指定任何名稱空間,所以模板名稱空間被用作預設名稱空間。
這對於某些名稱空間不起作用,例如 Special 和 Category 名稱空間。
在前面各節中描述的模板使用方法會導致模板的包含,這意味著頁面的源文字包含被花括號包圍的模板名稱,而不是其內容。但是,還有另一種模板的使用方法,其中模板的內容在頁面儲存之前直接寫入維基頁面。這種使用方法稱為替換,實現方法如下
{{subst:Template}}
在更高階的使用中,可能需要將替換模板中存在的 #if 等控制結構也進行替換,這似乎可以透過使用 {{subst:#if ...}} 來實現。但是,這會導致在儲存模板時進行替換,這是不可取的。解決方案:{{<includeonly></includeonly>subst:#if ...}}。
諸如獲取子字串或對字串執行替換之類的字串操作不屬於標準模板函式。但是,在安裝了 Scribunto 擴充套件的維基上,該擴充套件允許透過 Lua 進行指令碼編寫,可以為字串函式建立一個模組,以及使這些函式可供其他模板訪問的模板。這在英文維基百科中已經實現
使用示例
- {{replace|cat on the mat|cat|bat}} --> “bat on the mat”