帮助:模版

来自活字社
跳到导航 跳到搜索

如果你需要在多个页面上包含同样的文本的话, 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.

这三部分嵌入标记实现了处理和表达所有可能的组合。 评论也能起效。