Template:If empty
This is the {If empty} template.
- Update 2014 Dec 23: This template used to only take 9 parameters. This limit has been removed.
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. 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 {logo}, {image} and {picture} in the above examples.
Examples
| Code | Result | |
{if empty} | Returns an empty string. | |
{if empty|one} | one | Returns the first parameter that is defined and not empty. |
{if empty|one|two} | one | |
{if empty|one|two|three|four} | one | |
{if empty|two} | two | The first parameter is empty/undefined, so is passed over. |
{if empty|two|three|four} | two | |
{if empty|two|four} | two | |
{if empty||||||||||ten} | ten | Unlike in previous versions, this template is no longer limited by 9 parameters. |
{if empty} | The only parameter is empty or undefined, so returns an empty string. | |
{if empty} | Returns an empty string. | |
{if empty|{1|}|{2|}|three} | three | |
{if empty|{1}|{2}|three} | {1} | No pipe-characters following the names of the first two parameters ("1" and "2"), so the first of these returned as text ("{1}"). |
{if empty|{logo|}|two} | two | |
{if empty|{logo}|two} | {logo} | No pipe-character following the parameter name "logo", so the text "{logo}" returned. |
{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
- {if all}
- {if either}
- Help:Parameter default