MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

帮助:模板:修订间差异

跳到导航 跳到搜索
无编辑摘要
标签移动版编辑 移动版网页编辑
标签移动版编辑 移动版网页编辑
现在假设我们创建了一个名为'''姓名'''的模板,即<code><nowiki>[[Template:姓名]]</nowiki></code>,内容为:
我是<nowiki>{{{姓}}}{{{名}}}。</nowiki>
如果用<code><nowiki>{{姓名}}</nowiki></code>调用这个模板,不写任何参数,我们会得到:
如果用<code><nowi
我是<nowiki>{{{姓}}}{{{名}}}。</nowiki>
如果用<code><nowiki>{{姓名|姓=张|名=飞}}</nowiki></code>调用,我们会得到:
我是张飞。
----
'''例2:含有编号参数的模板'''
 
再来一个例子,说明一下匿名参数的定义和调用。我们还是先要定义一个带参数的模板,例如模板<code><nowiki>[[Template:数数]]</nowiki></code>,内容是:
一二三<nowiki>{{{1|四五六}}}</nowiki>七八九
调用<code><nowiki>{{数数|六五四}}</nowiki></code>的结果是:
一二三六五四七八九
如果传递一个空值,<code><nowiki>{{数数|}}</nowiki></code>的结果是:
一二三七八九
如果省略了匿名参数,即调用默认值,<code><nowiki>{{数数}}</nowiki></code>的结果是:
一二三四五六七八九
 
===参数值的限制===
*如果参数值中含有等号(<code>=</code>),调用模板时则必须使用参数名,即使参数名只是一个编号也要使用。
*如果参数值中含有两个连续的右大括号(<code><nowiki>}}</nowiki></code>),调用参数时必须将其放入nowiki标记中,例如<code><nowiki><nowiki>}}</nowiki></nowiki></code>。
*如果参数值中含有竖线(<code><nowiki>|</nowiki></code>),调用参数时必须将其放入nowiki标记中,例如<code><nowiki><nowiki>|</nowiki></nowiki></code>。
*参数值可以很长。
*参数值中可以包含一对双方括号,用于链接一个条目,但不能含有半个右双方括号,然后再接半个左双方括号。模板参数内的方括号必须配对。
 
例如<code><nowiki>[[Template:数数]]</nowiki></code>中的内容是:
<nowiki>[[一二{{{1}}}六七]]</nowiki>
则调用<code><nowiki>{{数数|三]]四[[五}}</nowiki></code>并不视为调用了模板:
<nowiki>{{数数|三]]四[[五}}</nowiki>
 
===命名参数还是匿名参数?===
 
====匿名参数的优点====
#调用模板时不需要参数名和等号,从而节约打字和存储空间。
#数字看起来很直观,也可以被不懂中文的人理解。
 
====命名参数的优点====
*参数的顺序可以变化,模板的参数可以任意添加和修改,而不会对调用模板的页面产生致命影响。<del>然而一部分强迫症编辑者仍然会努力去统一模板的命名参数的顺序,以至于被认为浪费服务器空间和被怀疑刷编辑数。</del>
*参数的意义容易理解。
*匿名参数不可以直接使用HTML元素属性。
<!---*some special techniques use the fact that multiple assignments of values to the same parameter in the same template call is allowed and results in the last value being used; this implies that at least one parameter name is specified explicitly in the template call --->
 
====命名参数和匿名参数混合使用====
命名参数和匿名参数可以混合使用,此时所有的未命名参数根据位置被编号,命名参数不被编号。
 
'''例3:'''
 
模板<code><nowiki>[[Template:又数数]]</nowiki></code>的内容是
<nowiki>{{{1}}}、{{{2}}}、{{{3}}}</nowiki>
<code><nowiki>{{又数数|3=1|2|1=3|4|5|6|7}}</nowiki></code>的结果是
3、4、5
想想为什么?
{{Hide
|标题=原因
|内容=这是一个两种参数混用的情况。
 
首先忽略命名参数,五个匿名参数从1到5分别分配到了2、4、5、6、7。
 
之前说过,匿名参数可以视作名字为数字的命名参数。因此整个模板调用可以视为<code><nowiki>{{又数数|3=1|1=2|1=3|2=4|3=5|4=6|5=7}}</nowiki></code>。
 
这里有一个问题:当同一个参数被赋值两次怎么办?MediaWiki的解析器会保留最后一次的赋值,也就是最终结果为1=3,2=4,3=5,4=6,5=7。
 
然后在模板内容中调用了名为“1”、“2”、“3”的三个参数。因此得到如上结果。}}
 
'''实际情况中请不要使用上述例子中的写法,无论是将参数名命名为数字,还是多次赋值,都是十分不安全的行为。'''
 
===未赋值并且没有默认值的参数===
例如:模板<code><nowiki>[[Template:再数数]]</nowiki></code>的内容是
<nowiki>一-{{{1}}}-三-{{{2}}}-五</nowiki>
调用<code><nowiki>{{再数数||}}</nowiki></code>的结果是
一--三--五
调用<code><nowiki>{{再数数|二|}}</nowiki></code>的结果是
一-二-三--五
调用<code><nowiki>{{再数数||二}}</nowiki></code>的结果是
一--三-二-五
调用<code><nowiki>{{再数数|二|{{{1}}}}}</nowiki></code>的结果是
一-二-三-<nowiki>{{{1}}}</nowiki>-五
调用<code><nowiki>{{再数数|{{{1}}}|四}}</nowiki></code>的结果是
<nowiki>一-{{{1}}}-三-四-五</nowiki>
调用<code><nowiki>{{再数数|{{{1}}}|{{{2}}}}}</nowiki></code>的结果是
<nowiki>一-{{{1}}}-三-{{{2}}}-五</nowiki>
 
===参数赋值中包含参数===
如果一个参数未赋值,则在三个大括号中的参数名在模板调用是不起参数的作用。如果要它其作用,一定要赋值。
 
'''例4:'''
模板<code><nowiki>[[Template:数数1]]</nowiki></code>的内容是
<nowiki>{{再数数|二}}</nowiki>
调用<code><nowiki>{{数数1|四}}</nowiki></code>的结果是:
一-二-三-<nowiki>{{{2}}}</nowiki>-五
模板<code><nowiki>[[Template:数数2]]</nowiki></code>的内容是
<nowiki>{{再数数|二|{{{1}}}}}</nowiki>
调用<code><nowiki>{{数数2|四}}</nowiki></code>的结果是:
一-二-三-四-五
模板<code><nowiki>[[Template:数数3]]</nowiki></code>的内容是
<nowiki>{{再数数|二|2={{{1}}}}}</nowiki>
调用<code><nowiki>{{数数3|四}}</nowiki></code>的结果是:
一-二-三-四-五
 
最简单的参数迭代办法就是在模板中用同样的参数名。
 
'''例5:'''
 
模板<code><nowiki>[[Template:姓名国籍]]</nowiki></code>中使用
<nowiki>{{姓名|姓={{{姓}}}|名={{{名}}}}}{{{国籍}}}人。</nowiki>
 
'''进一步的讨论'''
 
像<code><nowiki>{{再数数||四}}</nowiki></code>这样的调用将空值赋给参数1,而不是没有赋值,所以结果是
一--三-四-五
如果我们希望参数1不赋值,则应该将参数2用命名参数形式赋值,如
<nowiki>{{再数数|2=四}}</nowiki>
结果则是
一-<nowiki>{{{1}}}</nowiki>-三-四-五
 
如果这样的参数值被赋给如<code><nowiki><font size></nowiki></code>这样的标记,会使编码错误,但这些错误会被系统(MediaWiki)忽略,而不产生奇怪的结果。请参看英文的例子:[http://meta.wikimedia.org/wiki/Template_talk:Fontsize 字体大小]。
 
参数“02”和参数“2”是不同的。例如模板<code><nowiki>[[Template:例5]]</nowiki></code>的内容是
<nowiki>{{{1}}}{{{2}}}{{{02}}}</nowiki>
调用<code><nowiki>{{例5|3|4|5|6}}</nowiki></code>的结果是
<nowiki>34{{{02}}}</nowiki>
 
'''注意:'''维基系统名字空间的参数名是不同的,它们是<code><nowiki>$1, $2, ...</nowiki></code>,参见[[萌娘百科:名字空间]]和[http://meta.wikimedia.org/wiki/Meta-Wikimedia:MediaWiki_namespace_text 英文维基系统名字空间文本帮助]。
 
==模板页==
维基系统在生成模板页面时,实际上相当于一次没有参数赋值的模板调用,因此如果参数有默认值,将被显示。例如:模板<code><nowiki>[[Template:数一数]]</nowiki></code>的内容是
<nowiki>一二三{{{1|四五六}}}七八九</nowiki>
模板页面的内容是
一二三四五六七八九
 
===讨论页===
模板页面同其他条目页面是不同的,它的目的不是将知识传递给读者,而仅仅是为系统定义模板。因此,其讨论页跟普通条目页面的讨论页也不同,主要有两个功能:
#解释模板的作用和相关参数(最好给出例子,调用模板的形式以及结果)。
#普通的对模板的讨论。<!--In complicated cases, "subst:" can be very helpful in the explanation, see below.
You can use {{doctl}} for this task.-->
 
===跨语言链接===
模板可以含有跨语言链接,但结果是所有调用模板的条目页面都含有了该跨语言链接,这通常是非常糟糕的事情。为了仅仅让模板本身拥有跨语言链接,而不包括使用模板的条目,我们必须使用<nowiki><noinclude></nowiki>标识。例如:
<nowiki><noinclude></nowiki>
<nowiki>[[en:Template:Europe]]</nowiki>
<nowiki>[[zh:Template:欧洲]]</nowiki>
<nowiki></noinclude> </nowiki>
 
'''注意:'''在模板中使用<code><nowiki><noinclude></nowiki></code>标识时要小心!不要在<code><nowiki><noinclude></nowiki></code>之前或者<code><nowiki></noinclude></nowiki></code>之后'''加空行''',否则空行将被当作模板的一部分反映在调用模板的条目中。系统会自动忽略<code><nowiki></noinclude></nowiki></code>之后的单个空行。
 
'''例6:使用<nowiki><noinclude></nowiki>标识的后果'''
 
如果在例1中的模板<code><nowiki>[[Template:姓名]]</nowiki></code>加入跨语言链接
<nowiki>我是{{{姓}}}{{{名}}}。</nowiki>
<nowiki><noinclude></nowiki>
<nowiki>[[en:Template:Name]]</nowiki>
<nowiki></nocinlude></nowiki>
用<code><nowiki>{{姓名国籍|姓=张|名=飞|国籍=蜀汉}}</nowiki></code>调用例5中的模板<code><nowiki>[[Template:姓名国籍]]</nowiki></code>时,结果是:
我是张飞。
蜀汉人。
 
如果希望得到的结果是:
我是张飞。蜀汉人。
在<nowiki>[[Template:姓名]]</nowiki>加入跨语言链接应该不含有换行:
<nowiki>我是{{{姓}}}{{{名}}}。<noinclude>[[en:Template:Name]]</nocinlude></nowiki>
'''注意:'''我们推荐您用后面一种方式使用<code><nowiki><noinclude></nowiki></code>标识。
 
===模板分类===
模板也要进行分类,目的是为了更好的整理模板,以便更好的使用和管理模板。模板的分类同条目的分类相似,可以参阅有关条目分类的帮助文件,如[[帮助:条目分类]]等。不同之处在于对于模板的分类需要使用<code><nowiki><noinclude></nowiki></code>标识,如果不加<code><nowiki><noinclude></nowiki></code>标识,则不仅模板被分类,所有使用该模板的条目也被分入同一类。
 
所有模板的根目录(即分类)是[[:Category:页面模板]]。所有模板分类名最后一定要含有“模板”二字,以区别于普通条目的分类。
 
'''例7:模板分类方法'''
 
将例1中的模板<code><nowiki>[[Template:姓名]]</nowiki></code>分为<code><nowiki>[[:Category:人物模板]]</nowiki></code>,需要加入:
<nowiki>我是{{{姓}}}{{{名}}}。<noinclude>[[Category:人物模板]]</nocinlude></nowiki>
[[File:Include.png|frame|关于<nowiki><noinclude>和<includeonly></nowiki>也许这张图可以帮助你理解]]
 
===标识===
'''注意:'''以下内容只限于模板中使用的情况,在其他名字空间使用的情况请参考相关帮助文挡。
 
====<nowiki><noinclude></nowiki>====
前面已经提到,<code><nowiki><noinclude></nowiki></code>标识的作用是将<code><nowiki><noinclude></nowiki></code>和<code><nowiki></noinclude></nowiki></code>之间的文本加入所在的模板页中,而不加入调用模板的条目或模板中,针对模板的说明、分类和跨语言连接都可以置于该标识之间。
 
'''例8:'''
 
针对<code><nowiki>[[Template:网球男单世界第一]]</nowiki></code>模板的分类<code><nowiki>[[:Category:体育模板]]</nowiki></code>就可以置于<code><nowiki><noinclude></nowiki></code>和<code><nowiki></noinclude></nowiki></code>之间,而对于调用该模板条目的分类<code><nowiki>[[:Category:网球运动员]]</nowiki></code>可以置于标识之外:
<nowiki>[[Category:网球运动员]]<noinclude>[[Category:体育模板]]</noinclude></nowiki>
 
====<nowiki><includeonly></nowiki>====
<code><nowiki><includeonly></nowiki></code>标识的作用跟<code><nowiki><noinclude></nowiki></code>标识的作用正好相反,是将<code><nowiki><includeonly></nowiki></code>和<code><nowiki></includeonly></nowiki></code>之间的文本'''不'''加入所在的模板页中,而加入调用模板的页面中。
 
上面的'''例8'''中针对调用该模板的条目的分类<code><nowiki>[[:Category:网球运动员]]</nowiki></code>实际上应该置于<code><nowiki><includeonly></nowiki></code>和<code><nowiki></includeonly></nowiki></code>之间:
<nowiki><includeonly>[[Category:网球运动员]]</includeonly></nowiki>
这样,在<code><nowiki>[[:Category:网球运动员]]</nowiki></code>分类中就不会出现<code><nowiki>[[Template:网球男单世界第一]]</nowiki></code>模板了。
 
====<nowiki><onlyinclude></nowiki>====
<code><nowiki><onlyinclude></nowiki></code>标识与<code><nowiki><noinclude></nowiki></code>和<code><nowiki><includeonly></nowiki></code>标识均有所差别,是将<code><nowiki><onlyinclude></nowiki></code>和<code><nowiki></onlyinclude></nowiki></code>之间的文本'''加入'''所在的模板页中,其他的文本'''不'''加入。如果页面中还存在<code><nowiki><noinclude></nowiki></code>和<code><nowiki><includeonly></nowiki></code>两种标识,那么它们将会'''被忽略'''。
 
====<nowiki>subst</nowiki>与<nowiki>safesubst</nowiki>====
'''subst'''和'''safesubst'''的用法是:<code><nowiki>{{subst:模板名}}</nowiki></code>或<code><nowiki>{{safesubst:模板名}}</nowiki></code>。它的作用是'''直接'''或'''间接'''地一次性将模板内容编译成维基文档,加入到页面中去,而不是每次显示页面的时候调用有关模板。这样可以按模板当前的形式编辑条目,并使条目免受模板变化的影响,并减轻服务器负担。参见[[Help:替换引用]]。
{{clear}}
 
==作用==
如果想将同一段文本复制到两个或者多个页面,我们可以考虑使用模板,但也并不是一定要用模板。如果使用模板,要修改这段文本时,不需要针对每一个页面进行逐个修改,而只需要修改模板的内容,所有使用该模板的页面都自动被修改。
 
由于有参数存在,所以模板文本并不需要完全一样。对于不同页面,我们可以赋不同值,从而生成不同的文本。模板不仅仅是使用方便,它有时候还可以起到控制页面统一格式的作用。
 
模板的一般用法有:
*[[:Category:提示模板|提示模板]],例如:[[Template:妹妹不完整]]传递“不完整”的消息。
*[[:Category:导航模板|导航模板]]和[[:Category:大家族模板|大家族模板]],用于给读者提供类似的条目,例如:[[Template:galgame公司]]。
*[[:Category:信息模板|信息模板]]和[[:Category:人物信息模板|人物信息模板]],用于同一类条目中提供统一格式的信息,例如:[[Template:人物信息]]在条目右边绘制信息框,提供人物的相关信息。
*提供跨语言文本。
*提供合成图片,例如:围棋棋谱[[enwiki:Template:Game_of_Go_Position]]和国际象棋棋谱和[[enwiki:Template:Chess_position]]。
*或者以上几种的组合。
 
==参见==
*[[帮助:模板入门]]
*[[萌娘百科:名字空间#“模板”名字空间|萌娘百科:名字空间]]
*[[mw:Help:Templates/zh|Mediawiki:帮助:模板]]
{{萌娘百科帮助}}
[[分类:帮助]]