Help:模板
模板(template)是MediaWiki软件提供的“模板”命名空间中的页面,通常用于页面中被嵌入包含。模板的作用是让多个页面包含相同或者具有相同功能的文本。非模板命名空间内的页面也可以像模板一样被嵌入,但这种情况比较少。本页一并提供一些关于“嵌入包含”的用法帮助。
你可以在此页面查看本站的所有模板。
概述[编辑源代码]
假设有个页面叫做“Template:欢迎”,其页面内容如下:
欢迎您来到滚动的天空Wiki!
那么,在其他页面,使用{{欢迎}}
就可以得到“欢迎您来到滚动的天空Wiki!”的文字。
如果“Template:欢迎”的内容被改变,那么其他使用了该模板的页面的内容也将会相应改变。
一般地,在任何页面,使用{{名称}}
即可嵌入包含该名称的模板,该模板对应页面“Template:名称”。如果该模板页面内容被改变,那么嵌入包含了该模板的页面中相应的内容也将改变。
{{:电子迷宫}}
将会嵌入包含名为“电子迷宫”而非“Template:电子迷宫”的页面,{{Talk:电子迷宫}}
将会嵌入包含名为“Talk:电子迷宫”的页面。如果是使用不存在的命名空间,则仍会补上“Template:”前缀,例如,{{Level:电子迷宫}}
将会嵌入包含名为“Template:Level:命名空间”的页面,而{{:Level:电子迷宫}}
则会嵌入包含名为“Level:电子迷宫”的主命名空间页面。参数[编辑源代码]
参数(parameter)是指每次调用模板时都需要指定的变量。通常,参数在模板中定义,在调用模板时赋值。
例如,页面“Template:欢迎”的内容改成如下内容:
{{{1}}},您好,欢迎来到滚动的天空Wiki!
那么,在其他页面,嵌入此模板时就需要提供参数。例如,{{欢迎|User114514}}
就可以得到如下内容“User114514,您好,欢迎来到滚动的天空Wiki!”
通常来说,参数分为位次参数和命名参数,其中位次参数的参数名称是正整数,命名参数的名称则可以是自定义的。在模板代码中,参数是通过三重花括号来定义(define)的,嵌入包含时,这个三重花括号将被替换为参数的值,如果没有给定参数,则替换为默认值(若有默认值)或不替换(若无默认值)。
位次参数可以隐式(implicitly)赋值,也可以明确(explicitly)赋值。
在上面的这个例子中,模板“欢迎”定义了位次参数“1”,嵌入此模板时隐式地提供了参数1,其值为“User114514”。上面这个例子对应的明确赋值的用法是:{{欢迎|1=User114514}}
。
位次参数[编辑源代码]
位次参数(positional parameter)是指名称(name)为正整数的参数,在赋值时,这些参数通常都是依次提供。位次参数也称为匿名参数。
例如,在{{模板名称|a|b|c}}
中,a
对应参数{{{1}}}
,b
对应参数{{{2}}}
,c
对应参数{{{3}}}
。
位次参数通常是隐式赋值(implicitly assigned)的,多个参数用管道符|
隔开,并依次对应所属的序号。
位次参数也可以明确指定参数名称。例如,{{模板名称|a|b|c}}
也可以写成{{模板名称|1=a|2=b|3=c}}
。
当参数名称被明确指定时,参数的赋值顺序就不重要了。例如,{{模板名称|1=a|2=b|3=c}}
和{{模板名称|1=a|3=c|2=b}}
是同一个意思。
参数隐式赋值时有一个限制,就是内容不能包含等号,否则会被识别为命名参数。例如,设想被欢迎的人的名字叫做“x+y=z”,嵌入{{欢迎|x+y=z}}
并不会得到“x+y=z,您好,欢迎来到滚动的天空Wiki!”,因为这样的模板调用中,会将x+y=z
理解为:名称为“x+y”的参数值为“z”,而非第一个参数的值为“x+y=z”。这种情况下,可以通过以下方法解决:
- 明确指定参数名称,如
{{欢迎|1=x+y=z}}
。 - 使用nowiki包裹等号,如
{{欢迎|x+y<nowiki>=</nowiki>z}}
。
上面的第二种方法也适用于参数的值中含有管道符|
的情形,假如你需要将|
用作参数值的内容,而不是将其用来分隔参数,则可以用nowiki标签。
此外,与明确指定参数名称相比,隐式赋值还有一个特点就是,隐式的赋值保留首尾空格。当指定参数名称赋值时,如果参数值的两端有空格,这些空格就会被移除。
{{模板名称|1=a|b|c}}
这是无效的,因为由于“a”使用了明确赋值,“b”仍是第一个隐式赋值的参数,上方的调用就会被理解为
{{模板名称|1=a|1=b|2=c}}
命名参数[编辑源代码]
如果模板有很多参数,大量使用位次参数则很容易让人弄晕,这时候可以为参数指定具体的名称。命名参数(named parameter)是指名称为其他任意字符的参数。在调用模板时,赋值参数时就必须明确指定参数名称。
例如,将上述提到的“欢迎”模板的代码改为:
{{{username}}},您好,欢迎来到{{{sitename}}}!
这样,嵌入模板时,就需要提供参数名称以及其值,例如:
{{欢迎|sitename=滚动的天空Wiki|username=User114514}}
会产生:- User114514,您好,欢迎来到滚动的天空Wiki!
{{欢迎|sitename=跳舞的线Wiki|username=User1919}}
会产生:- User1919,您好,欢迎来到跳舞的线Wiki!
由于命名参数在赋值时必须指定名称,因此不会存在参数值被等号打断的问题,参数值的首尾空格也将自动被截去。
参数的默认值[编辑源代码]
在模板代码中,每次定义参数都可以为参数提供一个默认值(default)或缺省值。
嵌入模板时,如果某个参数(无论是位次参数还是命名参数)被定义了但没有提供值,则解析模板时使用该参数的默认值,如果默认值不存在,则不处理参数。
在上面的这个例子中,可以给sitename参数添加默认值“滚动的天空Wiki”,即:
{{{username}}},您好,欢迎来到{{{sitename|滚动的天空Wiki}}}!
这样,{{欢迎|username=User114514}}
将等价于{{欢迎|sitename=滚动的天空Wiki|username=User114514}}
。
另外,参数的默认值也可以设为空字符串,然后使用解析器函数进行处理。这里,将“欢迎”模板再进行一些增强:如果username没有指定,或者为空,则不显示username,“您好”一词之前也没有显示逗号;如果sitename没有指定,或者为空,则显示为“滚动的天空Wiki”。代码如下:
{{#if:{{{username|}}}|{{{username}}},}}您好,欢迎来到{{#if:{{{sitename|}}}|{{{sitename}}}|滚动的天空Wiki}}!
上面的模板调用效果如下:
模板调用代码 | 效果 |
---|---|
{{欢迎|username=User114514}} {{欢迎|sitename=|username=User114514}}
|
User114514,您好,欢迎来到滚动的天空Wiki! |
{{欢迎|sitename=跳舞的线Wiki}} {{欢迎|sitename=跳舞的线Wiki|username=}}
|
您好,欢迎来到跳舞的线Wiki! |
{{#ifeq:|{{{username|1}}}|{{{username|0}}}|提供了“username”参数|未提供参数“username”参数}}
参数默认值可以用来达到参数别称(alias)的效果。例如,{{{username|{{{用户名|{{{用戶名|{{{使用者名稱|}}}}}}}}}}}}
。但是,一般不建议使用参数别称。如果确实需要使用参数别称,多次使用时,建议使用变量存储参数的值以简化代码。
替换引用[编辑源代码]
替换引用是指保存页面时,那么使用该模板的页面被保存时,相关代码就会被替换为模板的内容。替换引用有三种形式:
- subst:页面被保存时,调用模板的代码将被一次性替换为保存时的模板内容,这些内容将成为页面的一部分,可以像一般内容一样被编辑,与原来的内容分开。如果此后原模板页面被更改,被替换后的内容将不受影响。
- safesubst:允许替换而不打破嵌入包含。当模板遇到非替换的展开(嵌入包含)时,subst的替换会保持不被解析,而safesubst则会视为像没有safesubst修饰符存在一样,因此子模板会被嵌入包含,变量和解析器函数会被求值。
- msgnw:以作为原始wiki语法的形式显示包含模板。
嵌入包含[编辑源代码]
嵌入包含(transclusion)是指在页面中显示另一个页面(通常是模板)的内容。假如,A页面中有代码{{B}}
,则页面“A”嵌入包含了“Template:B”,页面A称为目标页,页面B称为来源页。
控制被嵌入包含的部分[编辑源代码]
<noinclude>
、<includeonly>
和<onlyinclude>
可以用来控制哪些内容被嵌入包含。
<noinclude>...</noinclude>
内的部分,在源页面自身会显示,但是在目标页面被嵌入包含时不会显示。<includeonly>...</includeonly>
内的部分,在源页面自身不会显示,但是在目标页面被嵌入包含时会显示。<onlyinclude>...</onlyinclude>
若存在,则该标签以外的部分在目标页面被嵌入包含时都不会显示,且其外部的<includeonly>...</includeonly>
将会无效。
这里举个例子(假设模板名称为hw):
源页面 | 目标页面的模板调用 | 源页面效果 | 目标页面效果 |
---|---|---|---|
Hello<noinclude> world</noinclude>! |
{{hw}} |
Hello world! | Hello! |
Hello<includeonly> world</includeonly>! |
{{hw}} |
Hello! | Hello world! |
Hello <onlyinclude>world</onlyinclude>! |
{{hw}} |
Hello world! | world |
<noinclude>{{doc}}</noinclude>
,这样在模板页面自身会出现模板文档,但是嵌入包含该模板时,不会将整个文档嵌入包含进去。类似的,文档中的模板分类链接也会被<includeonly>...</includeonly>
包含,这样文档自身不会加入分类,但当模板嵌入包含该文档时,则会将模板加入这些分类。