Help:Parser functions in templates

From eLinux.org
Revision as of 17:40, 27 August 2009 by Cherry2005 (Talk | contribs) (Difference between empty and unspecified, when it matters)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

When applying ParserFunctions to template parameters, a pipe symbol ("|") may be used to provide the empty string as default value, in order to indicate how to handle things if a parameter is or is not passed in.

  • {{{1}}}
Sample A
{{#if: {{{1}}} | Parameter 1 is not defined, or is defined and non-null/non-empty. | Parameter 1 is null. It contains only empty string(s) or breaking space(s) etc.}}
Result
Parameter 1 is not defined, or is defined and non-null/non-empty.
  • {{{1|}}}
Sample B
{{#if: {{{1|}}} | Parameter 1 is defined and non-null/non-empty. | Parameter 1 is not defined, or is defined but null. It contains only empty string(s) or breaking space(s) etc.}}
Result
Parameter 1 is not defined, or is defined but null. It contains only empty string(s) or breaking space(s) etc.
Comparison
Condition of parameter 1 Sample A: {{{1}}} Sample B: {{{1|}}}
not defined TRUE FALSE
defined but null/empty FALSE FALSE
defined and NOT null/empty TRUE TRUE

The second usage ({{{1|}}}) is often the desired way to handle situations where a parameter exists, but is comprised only of empty space.

One way to test whether a parameter was specified in a template call is thus: {{#ifeq:{{{v|}}}|{{{v|-}}}| v was specified (and may be empty) | v was not specified }}

In rare cases, a template behaves differently when a parameter is unspecified compared to when it is specified but empty. When this template is used by a wrapper template (which uses the same set of named parameters), one way to ensure undefined parameters remain undefined is as follows (the technique also works with numbered parameters):

<!-- wrapper template code -->
{{wrapped_template|
normal_parameter={{{normal_parameter|}}}|
sensitive_parameter{{#ifeq:{{{sensitive_parameter|}}}|{{{sensitive_parameter|-}}}||x}}={{{sensitive_parameter|}}}|
...
}}

Note that the wrapped_template receives a specified but empty normal_parameter in two cases: when normal_parameter is specified and empty, and when normal_parameter is unspecified (because the default empty value is then specified by the wrapper template).

By contrast, the wrapped_template receives a specified sensitive_parameter only when it is indeed specified, because the #ifeq changes the wrapped_template parameter name to « sensitive_parameterx » when sensitive_parameter is undefined. Note also that wrapped_template receives a specified and empty sensitive_parameter only when the wrapper template receives a specified and empty sensitive_parameter. Of course, one must make sure the suffixed wrapped_template parameter name is meaningless to the wrapped_template for this to work properly.

See also