allwiki首页  
天下维客 你可以修改的网络知识库
首页最近更改优秀条目专题展示电脑科技词典软件学习网络知识电脑安全明星时尚天下百科
 

Mediawiki的模板

天下维客,你可以修改的网络知识库

Jump to: navigation, search
mediawiki简明编辑教程 创建新页面 链接功能 使用图像 页面分类 公用模板
表格制作 特殊页面 一文多名处理 常见安装问题 mediawiki建站综述

MediaWiki中,模板(template)是指可被整体嵌入另外页面的公用内容。模板的名字以“template:”开头,引用模板的页面将在显示时自动调用模板中的内容。

用模板可以:

  • 在多个页面中显示相同的内容片段,修改模板后所有调用页面都会随之更新
(使用这个功能,可以公用内容)
  • 模板也能用来存放html样式代码,简化页面样式控制过程

通过模板技术,可以有效减轻重复内容的同步更新工作量,并便于对页面样式、内容导航进行集中控制。

本文提供天下维客模板的使用手册和指南,另外,

目录

基础使用

模板的基本使用很简单:

  • 建立模板:如普通条目一样建立一个条目页面,只是这个页面的名称必须为“Template:XXX”(XXX可以自行替换)。该模板页面的正文编辑没有任何不同。
  • 调用模板:在需要引用的条目中,编辑加入“Template:XXX”的文本,保存即可在相应位置看到模板中的内容。(条目中加入“Template:XXX”的文本作用相同,只是文本稍嫌繁琐)
  • 编辑模板:在编辑某个条目时,如果该条目引用了模板,则在编辑框下方会列出清单。点击相应的模板链接,就可以找到该模板,并象普通页面一样编辑它。

模板与页面引用的区别

实际上,mediawiki允许对任何页面进行页面引用(使用Template:页面名称即可)。但使用模板有以下独特的好处:

  • 所有被页面使用的模板都在页面编辑页显示出来。
  • 当模板改变时,所有使用模板页面的服务器缓存(相对于浏览器缓存)自动被刷新;而引用非模板页面的条目,其缓存往往要手工清空,否则无法预计调用页面能反应出相应变动。

而模板名字空间以外的页面一般在如下情况下作为模板使用:

模板引用的重名问题

如果“Template:模板名”不存在,{{模板名}}的作用就与[[Template:模板名]]相同,提供一个连接到不存在页面的链接。所以,一种创建模板的方法就是先放一个模板标签在页面里,然后点击它开始编辑模板。

如果一个页面不是以“Template:”开头,则不属于模板,但也可以使用模板标签,例如本文是对模板的简单介绍,更详细的内容请参考帮助:模板进阶帮助:模板名字空间

模板是在名字空间“模板”(Template)下的页面,即任何以“Template:”开头的页面。注意,这里的开头必须是英文单词“Template”,之后跟一个半角的冒号(:),而不能用“模板”二字。例如要定义一个叫做“我的模板”的模板,名字就应该是[[Template:我的模板]],编辑这个页面,就可以改变“我的模板”的内容和样式。如果要将该模板加入一个页面中,就可以通过加入{{我的模板}}来实现。

模板可以用来统一各页面重复部分的格式,增加提示消息,添加浏览边框,以及提供可跨语言的文字描述。

新建、修改和使用模板

您可以像新建一个普通页面一样新建一个模板,唯一的区别就是模板页面的开头必须是Template:。建立模板(例如:我的模板)之后,您就可以通过添加{{我的模板}}来使用它。所有使用该模板的页面都相当于增加了模板页面里的内容,当模板被修改以后,所有使用模板的页面也自动更新。新建模板后,请在allwiki:模板消息内添加您新建的模板的信息,并请对模板进行分类。模板分类的方法请参考Category:维基百科模板以及Category talk:维基百科模板中的相关内容。

另外,您也可以使用{{subst:我的模板}},这样系统就将模板的内容一次性加入页面中,而不是只加入一个使用模板的标识(像{{我的模板}}这样)。这就使页面的内容固定了下来,以后再有人修改“我的模板”,页面的内容就不会相应的改变了。

如果在某个页面中,您发现使用了模板{{某模板}},要修改它,您就要去“Template:某模板”。您可以在搜索框中输入“Template:某模板”找到它,之后的修改同修改普通页面一样。但是在修改的时候,您一定要注意,因为您的修改可能影响很多使用了该模板的页面。

常见问题

我可以在多个语言维基百科中使用同一个模板吗?

不能。如果你要这么做,只能在各个天下维客中分别创建该模板。

开头是“Template:”,还是“template:”?

都行。不过之后的内容如果是英文是区分大小写的,如果是中文,是繁简自动转换的。

我可以使用参数吗?

可以。请参阅帮助:模板

一个页面中最多可以使用多少模板?

无限多个。一个模板也可以被使用无限多次。

我已经修改了模板,但为什么页面不更新呢?

有很多原因。第一、你可能没有刷新页面。在你的浏览器里使用刷新(Refresh)功能。第二、系统可能存在缓存漏洞(bug)。一种解决方法是编辑使用模板的页面,然后什么也不修改就保存,这样你就强制该页面进行刷新了。这一操作不会在历史中留下记录。

我可以修改模板的名字吗?

可以。移动模板跟移动普通页面一样。模板也可以重定向。

我可以在一个模板中使用另一个模板吗?

可以。但不能使用诸如{{一个模板{{另一个模板}}}}这样的语句,所以只能在一个模板的内容中调用另一个模板。

参见


一个模板可以调用另一个模板,它也可以调用它自己(自我调用),但只有一层自我调用有效。例如:[[Template:模板1]]的内容编辑内容是“一次,{{模板1}}”,在[[Template:模板1]]中将显示:“一次,一次,{{模板1}}”,如果其他条目调用该模板,所加入的文字将是“一次,{{模板1}}”。

模板中变量在模板被加入某页面后才被赋值,而不是之前。因此,如果一个模板中含有Mediawiki的模板,该模板被某页面调用,相应的位置显示的将是调用页面的名称,而不是被调用模板的名称。

一个页面所调用的所有模板都在该页编辑页面中列出,并提供相应的链接,而且:

  • 只列出以“Template:”开头的真正模板(位于模板名字空间的页面),其他被调用的页面则不列出;
  • 一个段落的编辑页面列出的是所有被调用的模板,包括其他段落调用的模板;
  • 编辑旧版本的页面,这个列表仍然是当前最新的;
  • 如果不真正提交编辑,仅仅在预览中使用的模板不被列出。

请注意,如果页面结尾没有换行,编辑页面中总是在结尾添加一个换行,但这并不影响模板的某些效果,即这个换行不真正起作用。例如:

Template:编号演示Template:编号演示
Template:编号演示

的结果是: Template:编号演示Template:编号演示 Template:编号演示

参数

模板可以使用参数,通过参数命名或者编号可以区分各个参数。

参数的定义和调用

在模板页面中,用三个大括号可以调用参数,例如:参数1的默认值可以调用参数1,如果在模板调用中参数1没有赋值,则使用参数1的默认值作为参数1的赋值。在调用带参数的模板的时候,语法是:

  • 如果在模板页面中参数使用是名称形式,即诸如{{{参数1}}}...{{{参数2}}}...,则调用是使用{{甲模板|参数1=参数1的赋值|参数2=参数2的赋值}};
  • 如果在模板页面中参数使用是编号形式,即诸如{{{1}}}...{{{2}}}...,则调用是使用{{甲模板|参数1的赋值|参数2的赋值}}。

注意:参数默认值同参数赋空值是不同的。

例1:含有命名参数的模板

我们可以创建一个名为姓名的模板,即Template:姓名,内容为:

我是{{{姓}}}{{{名}}}。

如果用Template:姓名调用这个模板,我们会得到:

我是{{{姓}}}{{{名}}}。

如果用{{姓名|姓=张|名=飞}},我们则得到:

我是张飞。

例2:含有编号参数的模板

再来一个例子,说明一个编号参数的定义和调用:我们还是先要定义一个带参数的模板,例如模板Template:数数的内容是

一二三{{{1|四五六}}}七八九

赋值调用{{数数|六五四}}的结果是:

一二三六五四七八九

赋空值调用{{数数|}}的结果是:

一二三七八九

未赋值调用,即调用默认值,{{数数}}的结果是:

一二三四五六七八九

参数值的限制

  • 如果参数值中含有等号(=),调用模板时则必须使用参数名,即使参数名只是一个编号也要使用。
  • 如果参数值中含有两个连续的右大括号(}}),调用参数时必须将其放入nowiki标记中,例如<nowiki>}}</nowiki>。
  • 如果参数值中含有竖线(|),调用参数时必须将其放入nowiki标记中,例如<nowiki>|</nowiki>。
  • 参数值可以很长,英文帮助中有一个长参数的例子:例子
  • 参数值中可以包含一对双方括号,用于链接一个条目,但不能含有半个右双方括号,然后再接半个左双方括号。例如Template:数数中的内容是:
[[一二{{{1}}}六七]]
调用{{数数|三]]四[[五}}的结果是:
{{数数|三]]四[[五}}

命名?还是编号?

编号参数的优点

  • 调用模板是不需要参数名和等号,从而节约打字和存储空间。
  • 阿拉伯数字是世界性的,在翻译的时候省事,也可以被不懂中文的人理解。

命名参数的优点

  • 参数的顺序可以变化,模板的参数可以任意添加和修改,而不会对调用模板的页面产生致命影响。
  • 参数的意义容易理解。

命名参数和编号参数混合使用

命名参数和编号参数可以混合使用,此时的未命名参数根据位置被编号,命名参数不被编号。


例3:模板Template:又数数的内容是

{{{1}}}、{{{2}}}、{{{3}}}

{{又数数|3=1|2|1=3|4|5|6|7}}的结果是

3、4、5

想想为什么...

未赋值并且没有默认值的参数

例如:模板Template:再数数的内容是

一{{1}}三{{2}}五

调用Template:再数数的结果是

一--三--五

调用Template:再数数的结果是

一-二-三--五

调用Template:再数数的结果是

一--三-二-五

调用Template:再数数的结果是

一-二-三{{1}}五

调用Template:再数数的结果是

一{{1}}三-四-五

调用Template:再数数的结果是

一{{1}}三{{2}}五

参数赋值中包含参数

如果一个参数未赋值,则在三个大括号中的参数名在模板调用是不起参数的作用。如果要它其作用,一定要赋值。

例4:

Template:再数数
调用Template:数数1的结果是:
<nowiki>一-二-三{{2}}五
Template:再数数
调用Template:数数2的结果是:
<nowiki>一-二-三-四-五
Template:再数数
调用Template:数数3的结果是:
<nowiki>一-二-三-四-五

最简单的参数迭代办法就是在模板中用同样的参数名。


例5:模板Template:姓名国籍中使用

Template:姓名{{{国籍}}}人。

进一步的讨论

Template:再数数这样的调用将空值赋给参数1,而不是没有赋值,所以结果是

一--三-四-五

如果我们希望参数1不赋值,则应该将参数2用命名参数形式赋值,如

Template:再数数

结果则是

一{{1}}三-四-五

如果这样的参数值被赋给如<font size>这样的标记,会使编码错误,但这些错误会被系统(MediaWiki)忽略,而不产生奇怪的结果。请参看英文的例子:字体大小

参数“02”和参数“2”是不同的,例如模板Template:例5的内容是

{{{1}}}{{{2}}}{{{02}}}

调用Template:例5的结果是

34{{{02}}}

注意:维基系统名字空间的参数名是不同的,它们是$1,$2,...,参见Help:名字空间英文维基系统名字空间文本帮助

模板页

维基系统在生成模板页面时,实际上相当于一次没有参数赋值的模板调用,因此如果参数有默认值,将被显示。例如:模板Template:数一数的内容是

一二三四五六七八九

模板页面的内容是

一二三四五六七八九

讨论页

模板页面同其他条目页面是不同的,它的目的不是将知识传递给读者,而仅仅是为系统定义模板。因此,其讨论页跟普通条目页面的讨论页也不同,主要有两个功能:


  • 第一部分要解释模板的作用和相关参数
  • 最好给出例子,调用模板的形式以及结果。
  • 第二部分则是普通的对模板的讨论。

跨语言链接

模板可以含有跨语言链接,但结果是所有调用模板的条目页面都含有了该跨语言链接,这通常是非常糟糕的事情。为了仅仅让模板本身拥有跨语言链接,而不包括使用模板的条目,我们必须使用<noinclude>标识。例如:

<noinclude>
en:Template:Europe
zh:Template:欧洲
</noinclude>


注意:在模板中使用<noinclude>标识时要小心!不要在<noinclude>之前或者</noinclude>之后加空行,否则空行将被当作模板的一部分反映在调用模板的条目中。系统会自动忽略</noinclude>之后的单个空行。

<nowiki>标识的后果

如果在例1中的模板Template:姓名加入跨语言链接

我是{{{姓}}}{{{名}}}。
<noinclude>
en:Template:Name
</nocinlude>

Template:姓名国籍调用例5中的模板Template:姓名国籍时,结果是:

我是张飞。
蜀国人。

如果希望得到的结果是:

我是张飞。蜀国人。

Template:姓名加入跨语言链接应该不含有换行:

我是{{{姓}}}{{{名}}}。<noinclude>en:Template:Name</nocinlude>

注意:我们推荐您使用后面一种方式使用<noinclude>标识。

模板分类

模板也要进行分类,目的是为了更好的整理模板,以便更好的使用和管理模板。模板的分类同条目的分类相似,可以参阅有关条目分类的帮助文件,如Help:分类等,不同之处在于对于模板的分类需要使用<noinclude>标识,如果不加<noinclude>标识,则不仅模板被分类,所有使用该模板的条目也被分入同一类。


所有模板的根目录(即分类)是,所有模板分类名最后一定要含有“模板”二字,以区别于普通条目的分类。

例7:模板分类方法

将例1中的模板Template:姓名分为,需要加入:

我是{{{姓}}}{{{名}}}。<noinclude></noinclude>

标识

注意:以下内容只限于模板中使用的情况,在其他名字空间使用的情况请参考相关帮助文挡。

<noinclude>

前面已经提到,<noinclude>标识的作用是将<noinclude>和</noinclude>之间的文本加入所在的模板页中,而不加入调用模板的条目或模板中,针对模板的说明、分类和跨语言连接都可以置于该标识之间。


例8:针对Template:网球男单世界第一模板的分类就可以置于<noinclude>和</noinclude>之间,而对于调用该模板条目的分类Category:网球运动员可以置于标识之外:

Category:网球运动员<noinclude></noinclude>

<includeonly>

<includeonly>标识的作用跟<noinclude>标识的作用正好相反,是将<includeonly>和</includeonly>之间的文本加入所在的模板页中,而加入调用模板的页面中。

上面的例8中针对调用该模板的条目的分类Category:网球运动员实际上应该置于<includeonly>和</includeonly>之间:

<includeonly>Category:网球运动员</includeonly>

这样,在Category:网球运动员分类中就不会出现Template:网球男单世界第一模板了。

subst

subst的用法是:{{subst:模板名}}。它的作用是一次性将模板内容编译成维基文挡,加入到页面中去,而不是每次显示页面的时候调用有关模板。这样可以按模板当前的形式编辑条目,并使条目免受模板变化的影响。

作用

如果想将同一段文本复制到两个或者多个页面,我们可以考虑使用模板,但也并不是一定要用模板。如果使用模板,要修改这段文本时,不需要针对每一个页面进行逐个修改,而只需要修改模板的内容,所有使用该模板的页面都自动被修改。由于有参数存在,所以模板文本并不需要完全一样,对于不同页面,我们可以赋不同值,从而生成不同的文本。模板不仅仅是使用方便,它有时候还可以起到控制页面统一格式的作用。

模板的一般用法有:

参见

中文

英文

Personal tools
工具
金银币拍卖 金币拍卖预展  金银币网店 熊猫金银币 生肖金银币