幫助:模板中的解析器函数

From mediawiki.org
This page is a translated version of the page Help:Parser functions in templates and the translation is 100% complete.
PD 注意:當您編輯本頁面時,即同意以CC0協議授權您的貢獻。您可以在公有領域帮助页面找到更多信息。 PD

当在模板参数中使用解析器函数时,可以使用一个管道符号(|)来提供一个默认值,会在没有参数填写时被使用。 在 #if 解析器函数中使用时,来自未定义参数的未扩展文本将解析为真,可能造成意想不到的结果。

有默认值和没有默认值的测试参数
参数 {{{1}}}, {{{param}}} {{{1|}}}, {{{param|}}} {{#if:<参数>|True|False}}
说明 命名和未命名的示例 {{{1}}}, {{{param}}} {{{1|}}}, {{{param|}}}
未定义。更适合在命名参数中使用。 {{template}} {{{1}}} True False
已定义,但为空。 {{template|}}, {{template|1=}}, {{template|param=}} False False
已定义,且非空。 {{template|value}}, {{template|1=value}}, {{template|param=value}} value value True True
  • {{{1}}}
例 A
{{#if: {{{1}}} | 参数 1 未定义,或已定义且非空。 | 参数 1 为空。它仅包含空字符串或空格等。}}
结果
参数 1 未定义,或已定义且非空。
  • {{{1|}}}
列 B
{{#if: {{{1|}}} | 参数 1 已定义且非空。 | 参数 1 未定义,或已定义但为空。它仅包含空字符串或空格等。}}
结果
参数 1 未定义,或已定义但为空。它仅包含空字符串或空格等。

提供空默认值的第二种用法({{{1|}}},例 B)通常是参数存在,但仅由空值组成的情况下的理想处理方式。

测试和传输未定义参数

要区分可能为空的参数和未指定的参数,请使用 {{#ifeq:}} 和“不同的默认值”将其与自身进行比较。 默认值是什么并不重要,只要它们不同即可,因此通常选择较短的值。 以下所有例子都奏效:

{{#ifeq:{{{v|+}}}|{{{v|-}}}| v已定義(可以為空) | v未定義 }}
{{#ifeq:{{{v|}}}|{{{v|-}}}| v已定義(可以為空) | v未定義 }}
{{#ifeq:{{{v|}}}|{{{v}}}| v已定義(可以為空) | v未定義 }}

在极少数情况下,模板在未指定参数时与指定参数但为空时的行为不同。 当包裹模板(使用同一组命名参数)使用此模板时,确保未定义参数保持未定义的一种方法如下(该技巧也适用于编号参数):

{{wrapped_template|
normal_parameter={{{normal_parameter|}}}|
sensitive_parameter{{#if:{{{sensitive_parameter|}}}||NULL}}={{{sensitive_parameter}}}
}}

wrapped_template 在所有情况下都会收到定义的“normal_parameter”。 当normal_parameter 已定义但为空且未定义时,wrapped_template 会收到一个空的normal_parameter

相比之下,wrapped_template 在确实定义时“仅”接收定义的“sensitive_parameter”; 当“sensitive_parameter”未定义时,#if 将参数名称更改为“sensitive_parameterNULL”。 后缀参数名称必须对 wrapped_template 无意义才能正常工作。

參見