Help:模板

来自滚动的天空Wiki

模板(template)是MediaWiki软件提供的“模板”命名空间中的页面,通常用于页面中被嵌入包含。模板的作用是让多个页面包含相同或者具有相同功能的文本。非模板命名空间内的页面也可以像模板一样被嵌入,但这种情况比较少。本页一并提供一些关于“嵌入包含”的用法帮助。

你可以在此页面查看本站的所有模板。

概述[编辑源代码]

假设有个页面叫做“Template:欢迎”,其页面内容如下:

欢迎您来到滚动的天空Wiki!

那么,在其他页面,使用{{欢迎}}就可以得到“欢迎您来到滚动的天空Wiki!”的文字。

如果“Template:欢迎”的内容被改变,那么其他使用了该模板的页面的内容也将会相应改变。

一般地,在任何页面,使用{{名称}}即可嵌入包含该名称的模板,该模板对应页面“Template:名称”。如果该模板页面内容被改变,那么嵌入包含了该模板的页面中相应的内容也将改变。

参数[编辑源代码]

参数(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标签。

此外,与明确指定参数名称相比,隐式赋值还有一个特点就是,隐式的赋值保留首尾空格。当指定参数名称赋值时,如果参数值的两端有空格,这些空格就会被移除。

命名参数[编辑源代码]

如果模板有很多参数,大量使用位次参数则很容易让人弄晕,这时候可以为参数指定具体的名称。命名参数(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!

参数默认值可以用来达到参数别称(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

参见[编辑源代码]