Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Template:If empty/doc: Difference between revisions

Template page
No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 3: Line 3:
<!----PLEASE ADD TEMPLATE CATEGORIES WHERE INDICATED AT THE BOTTOM OF THIS PAGE---->
<!----PLEASE ADD TEMPLATE CATEGORIES WHERE INDICATED AT THE BOTTOM OF THIS PAGE---->
{{Cascade-protected template}}
{{Cascade-protected template}}
{{used in system}}
{{Lua|Module:If empty}}
{{Lua|Module:If empty}}


Line 27: Line 26:


====Piping====
====Piping====
Parameters used with {{tlf|if empty}} must be piped&nbsp;– i.e. include the vertical bar (pipe) symbol {{nowrap|("{{thin space}}&#124;{{thin space}}")}} as a trailing character&nbsp;– so that empty or undefined parameters aren't treated as text and returned incorrectly. Hence, for example, <code><nowiki>{{{logo|}}}</nowiki></code>, <code><nowiki>{{{image|}}}</nowiki></code> and <code><nowiki>{{{picture|}}}</nowiki></code> rather than {{param|logo}}, {{param|image}} and {{param|picture}} in the above examples.
Parameters used with {{tlf|if empty}} must be piped&nbsp;– i.e. include the vertical bar (pipe) symbol {{nowrap|("&#124;")}} as a trailing character&nbsp;– so that empty or undefined parameters aren't treated as text and returned incorrectly. Hence, for example, <code><nowiki>{{{logo|}}}</nowiki></code>, <code><nowiki>{{{image|}}}</nowiki></code> and <code><nowiki>{{{picture|}}}</nowiki></code> rather than , and in the above examples.
 
===Examples===
{{Aligned table |class=wikitable
|cols=3 |col1style=padding-right:1.0em; |col2style=padding-left:0.5em;padding-right:1.0em; |col3style=padding-left:0.5em;
|row1style=background:whitesmoke;padding-left:0.5em;font-weight:bold;
| Code | Result |
| {{tlc|if empty}} | {{if empty}} | Returns an empty string.
| {{tlc|if empty|one}} | {{if empty|one}} | Returns the first parameter that is defined and not empty.
| {{tlc|if empty|one|two|three|four}} | {{if empty|one|two|three|four}} |
| <code><nowiki>{{if empty||two}}</nowiki></code> | {{if empty||two}} | The first parameter is empty/undefined, so is passed over.
| <code><nowiki>{{if empty||two||four}}</nowiki></code> | {{if empty||two||four}} |
| <code><nowiki>{{if empty||||||||||ten}}</nowiki></code> | {{if empty||||||||||ten}} | Unlike in previous versions, this template is no longer limited by 9 parameters.
| {{tlc|if empty{{!}}}} | {{if empty|}} | The only parameter is empty or undefined, so the template returns an empty string.
| {{tlc|if empty|{{!}}{{!}}{{!}}{{!}}}} | {{if empty||||}} | Returns an empty string.
| <code><nowiki>{{if empty|{{{1|}}}|{{{2|}}}|three}}</nowiki></code> | {{if empty|{{{1|}}}|{{{2|}}}|three}} | Neither 1 nor 2 are defined, so "three" is returned.
| <code><nowiki>{{if empty|{{{1}}}|{{{2}}}|three}}</nowiki></code> | {{if empty|{{{1}}}|{{{2}}}|three}} | No pipe-characters following the names of the first two parameters ("1" and "2"), so the first is returned as text ("{{{1}}}").
| <code><nowiki>{{if empty|{{{logo|}}}|two}}</nowiki></code> | {{if empty|{{{logo|}}}|two}} |
| <code><nowiki>{{if empty|{{{logo}}}|two}}</nowiki></code> | {{if empty|{{{logo}}}|two}} | No pipe-character following the parameter name "logo", so the text "{{{logo}}}" is returned.
| <code><nowiki>{{if empty|p=q}}</nowiki></code> | {{if empty|p=q}} | The template identifies the parameters it receives as parameters 1 to 9, not using names such as "p", etc.
}}
 
===See also===
* {{tl|if all}}
* {{tl|if either}}
* Help:Parameter default
* {{tl|Category see also if exists 2}}


<includeonly>{{Sandbox other|
<includeonly>{{Sandbox other|

Latest revision as of 18:11, 9 April 2025

This page uses Creative Commons Licensed content from Wikipedia (view authors).

This template is used inside other templates. It takes any number of parameters and returns the first found to be defined and non-empty. If none is found, nothing is returned. By writing {{if empty|a|b|c}} instead of {{#if:a|a|{{#if:b|b|c}}}}, expression a and b do not have to be repeated and evaluated twice. The template provides a fallback order, similar to a try catch based "It is easier to ask for forgiveness than permission" (EAFP) programming style.

Typical usage is like this:

{{If empty |{{{logo|}}} |{{{image|}}} |{{{picture|}}} |default.svg}}
— Return {{{logo|}}} if it has a value; else {{{image|}}} if it has a value; else {{{picture|}}} if it has a value; else return "default.svg".

This returns the first of the parameters logo, image and picture that is defined and non-empty, otherwise "default.svg".

Rationale

The MediaWiki parameter default function doesn't return the default value for empty parameters. That is, {{{logo|default.svg}}} does not return "default.svg" if the template was called like this: {{template|logo=}}.

The usual workaround for a single parameter is:

{{#if:{{{logo|}}} |{{{logo}}} |default.svg}}
— If {{{logo}}} has a value, return it, else return "default.svg".

But this becomes complex when several parameters are to be checked:

{{#if:{{{logo|}}} |{{{logo}}} |{{#if:{{{image|}}} |{{{image}}} |{{#if:{{{picture|}}} |{{{picture}}} |default.svg}} }} }}
— If {{{logo}}} has a value, return it; else if {{{image}}} has a value, return that; else if {{{picture}}} has a value, return that; else return "default.svg".

In these cases, {{if empty}} produces the simpler syntax (as above):

{{if empty |{{{logo|}}} |{{{image|}}} |{{{picture|}}} |default.svg}}

Piping

Parameters used with {{if empty}} must be piped – i.e. include the vertical bar (pipe) symbol ("|") as a trailing character – so that empty or undefined parameters aren't treated as text and returned incorrectly. Hence, for example, {{{logo|}}}, {{{image|}}} and {{{picture|}}} rather than , and in the above examples.