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”