Help:替换引用
维基百科使用手册 |
修饰符“subst:”(“substitute”,“替换引用”)位于模板、变量、解析函数的“{{”之后。但subst对参数的“{{{”不起作用。
它能在引用页面保存时,将维基代码自动替换,分别为:
- 模板的维基代码,而不是引用模板的维基代码(例如{{template1}}),参数被替换成参数的值;
- 变量的值;
- 解析函数的值。
对模板的替换引用不会显示在页面历史和模板的链入页面等中。
模板
样例:
Template:t2(討論 - 鏈入頁面 - 编辑),包含<noinclude>{{Sample}}[[Category:辅助模板]]</noinclude>start_{{{1}}}_middle_{{{2}}}_end
,以{{subst:t2|[[a]]|{{x2|b}}}}
方式引用,得到源代码start_[[a]]_middle_{{x2|b}}_end
,显示为start_a_middle__end。
注意到这种对模板的替换不会自动重复进行:如果被替换引用的模板又引用了其他模板,那个模板不会被替换引用。你可以随后加上subst,做手动转换。这种逐步的替换引用对于分析模板调用原理很有用。但是,复杂的是:
- 如果参数名取决于另一个参数的默认值,那么替换引用时这不会被计算。
如果你想修改替换引用生成的目标代码,你必须先保存,因为预览时替换引用还没发生,替换引用只在保存时发生。
另一种方式就是手动替换,复制模板的源代码再编辑。另一种方式是使用“msgnw:”修饰符(参见:Help:模板#msgnw)。
对“~~~~”进行替换引用没有效果。
变量
对变量替换引用与对模板的类似。比如时间戳:
{{subst:CURRENTDAY}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}, {{subst:CURRENTTIME}} (UTC)
得到:
4 5月 2006, 14:07 (UTC)
解析函数
对解析函数的替换引用与模板一样,但是“subst:”与“#”之间不能有分隔。
nowiki与pre
如果某模板包含位于nowiki或pre标记之内的签名或替换引用,他们将被解释并展开,但nowiki或pre标记仍保留。
条件替换技术
是否进行替换可由特定参数决定,由此还可进行多重替换。原理如下:
- 页面A包含{{subst:B|subst={{{subst|}}}|参数...}}
- template:B包含{{{{{subst|}}}C|subst={{{subst|}}}|参数...}}
- template:C包含{{{{{subst|}}}D|subst={{{subst|}}}|参数...}}
- 以此类推
当页面A对template:B的引用包含“subst={{{subst|}}}”时,template:B对template:C的引用也是替换引用,template:C对template:D也是。若页面A不含“subst={{{subst|}}}”时,便不会替换,且不会出现错误。由此,条件替换和多重替换可以实现。
基于引用的替换
在被替换的模板中使用“仅包含”和“不包含”标签,可以实现魔术般的技巧。
代码~<includeonly>~</includeonly>~~
显示为~~~,当被引用时显示为~~~~,当被替换引用时展开为用户签名。
仅包含标签可被用于专门被替换引用的模板,即在subst:前后加上仅包含标签。
参见:Help:模板。