维基百科,自由的百科全书
| 此模板被引用于约693,000个页面,占全部页面的9%。 为了避免造成大规模的影响,所有对此模板的编辑应先于沙盒、测试样例或您的沙盒上测试。 测试后无误的版本可以一次性地加入此模板中,但是修改前请务必于讨论页发起讨论。
模板引用数量会自动更新。 |
| 本模板不能替换引用嵌入。由于技术限制,在替换引用(subst)阶段时nowiki的行为与非替换引用时不同,因此替换引用本模板将会导致其行为无法预期或者导致未定义行为。
- 如需将本模板替换引用须经由下列两项程序进行(否则可能出现未定义行为):
- 将code参数中的内容改成使用跳脱字符(如
{{ 改成\{\{ ),并移除nowiki和msgnw等调用。
- 将模板调用改成{{subst:虚拟模板/auto}}完成替换引用。
- 若因技术原因无法完成以上操作,请使用{{softsubst}},并依照预览模式下的指示操作。
|
本模板通过解析器函数,可在不创建一个新的模板的情况下,动态生成一个“虚拟的”临时模板,并传入参数进去,类似于C++或java的匿名函数、Closure或者JavaScript中的立即调用函数表达式。
- 用途:在部分说明文档示范模板语法,或解协助解析条目中无法顺利被解析的模板语法。
- 用法:由于需要先回避模板语法在生成一个“虚拟的”临时模板前就被解析,因此
{{{}}}
与{{}}
皆要先由跳脱字符切割成如{\{\{}\}\}
与{\{}\}
的形式。
参数及使用方法
{{虛擬模板 | code= 填入模板語法 | ... | ... 傳入模板參數、當正常模板使用 }}
模板数据
模板参数[编辑模板数据]
此模板首选参数不换行的行内格式。
参数 | 描述 | 类型 | 状态 |
---|
1 | 1 | 传入"code"参数的的第1个参数 - 示例值
- 测试
| 字符串 | 可选 |
---|
code | code | 模板语法 - 示例值
- {{{1}}}
| 字符串 | 可选 |
---|
code语法为nowiki | delnowiki | 解析code内容中位于nowiki标签内的部分
| 布尔 | 可选 |
---|
code语法为msgnw | delmsgnw | 解析code内容中位于msgnw内的部分
| 布尔 | 可选 |
---|
示例
- 一般用法
- 输入
{{虛擬模板|code=在{{{1}}}中,{{{2}}}是一門{{{3}}}。 | 數學 | 微積分 | 重要的議題 }}
- 显示为“在数学中,微积分是一门重要的议题。”
- 强制注入参数
- 输入
{{虛擬模板|code=在{{{1}}}中,{{{2}}}是一門{{{3}}}。|args={{虛擬模板|參數 | \1=物理學 | 數學 | 重要的議題 }} }}
- 显示为“在物理学中,数学是一门重要的议题。”
- ※注:如果{{虚拟模板}}的第一参数已经数入了“参数”来指定模式,那么如果需要传入真正的第一参数到模板里的话,就需要使用跳脱字符的第一参数表示法:
|\1=
。
- 防止提前解析
- 方法一,使用跳脱字符
- 输入
{{虛擬模板|code={\{#tag:math{{!}}\\frac{ {{{1}}} }{ {{{2}}} } }\} | 16 | 25 }}
- 显示为“”
- 方法二,使用
- 输入
{{虛擬模板|delnowiki=yes|code= | 16 | 25 }}
- 显示为“”
- 测试间接参数传递时,特定模板语法的行为
- 输入
{{虛擬模板|delnowiki=yes|code=| lang=維基數據 | lang-code=d | Minecraft世界 | Q26945014 }}
- 显示为“Minecraft世界”
- 说明:虚拟模板内的语法为“
{{#invoke:ilh|main}}
”,当这个内容是一个独立的模板时,结果为输入参数“| lang=維基數據 | lang-code=d | Minecraft世界 | Q26945014
”的行为。
- 作为空模板
- 与匿名函数原理类似,同样可以仅宣告但不提供内容
- 此时则与{{void}}相同
- 输入
{{虛擬模板|void}}
- 显示为“”;展开为“
”
- 还原跳脱字符
- 输入
{{虛擬模板|code=\n**:#第甲項\tAA\b\n**:#第乙項\tBB\b}}
- 显示为“
- 第甲项 AA�
- 第乙项 BB�”
- {{虚拟模板}}的传递与使用(仅在单次页面渲染有效)
- 照顺序摆放代码将有以下效果:
{{變數|set|臨時模板1=虛擬模板{{!}}code=順利地執行了{\{\{1}\}\}的臨時模板{\{\{2}\}\}。}}
$VAR_DEF 臨時模板1=虛擬模板|code=順利地執行了{\{\{1}\}\}的臨時模板{\{\{2}\}\}。 ;
{{變數|call|臨時模板1| 1號 | 引用 }}
→“顺利地执行了1号的临时模板引用。”
- 延伸用法(让模板可以自己产生内容,又能让外部调用)
- 模板内:
{{虚拟模板|code={\{#invoke:Fullurl|fullurl}\}|args={{虚拟模板|參數|\1=Template:虚拟模板}}{{#invoke:参数|虚拟模板扩展参数}}}}
- 模板显示:Template:虚拟模板
- 调用
{{模板名|Module:TemplateParameters2}}
- 显示:Module:TemplateParameters2
技术限制
由于MediaWiki禁止模板迭代调用,因此在虚拟模板的code中使用其他虚拟模板可能会出现问题,例如
- 输入
{{虛擬模板|code=一次,{{虛擬模板{{!}}code=二次}} }}
- 显示为“一次,检测到模板循环:Template:虚拟模板”
但若避免递回地传入参数则没有问题,如:
- 输入
{{虛擬模板|code=一次,{{虛擬模板|code=二次}} }}
- 显示为“一次,二次”
此显示的效果与普通模板雷同,此处以{{模板1}}做示范:
重定向
注意事项
模板编辑说明
参见