From EncyclopAtys
Variables is a very simple MediaWiki extension that allows you to define a variable on a page, use it later in that same page, change its value, possibly to a value given by an expression in terms of the old value, etc.
It's much like a template, only very lightweight and scoped to only a single page, so you can use many variables on a page without polluting the wiki with huge numbers of templates. Combine with the ParserFunctions extension for best results.
Contents
Assigning a value to a variable
#vardefine
- {{#vardefine:variablename|specifiedvalue}}
assigns the value specifiedvalue to the (already existing or hereby introduced) variable variablename.
#vardefineecho
- {{#vardefineecho:variablename|specifiedvalue}}
works exactly as #vardefine, but the affected value is printed.
Retrieving the value of a variable (#var)
The value of the variable variablename is produced by
- {{#var:variablename}}
If undefined, this produces the empty string; it does not give an error message.
It's possible to define a value for the case that the variable is undefined or void:
- {{#var:variablename |defaultvalue}}
This is equivalent to:
- {{#if: {{#var:variablename}} |{{#var:variablename}} |defaultvalue}}
but it's much shorter and better arranged.
The value can be used in parser functions, etc.
#varexists
- {{#varexists:variablename}} returns 1 if the variable is already defined (also when the value is a void string). If the variable is not defined the return value is void.
Examples
- Note that the ParserFunctions extension must also be installed to use #expr
Compute 2*a + b:
- {{#expr:2*{{#var:a}}+{{#var:b}}}}
Add one to n:
- {{#vardefine:n|{{#expr:{{#var:n}}+1}}}}
Variables and conditional parser functions
This section only applies to MediaWiki versions below 1.12.
ParserFunctions
It must be noted that everything in conditional parser functions such as #ifexpr gets executed (though only one result gets displayed), regardless of the condition, see m:ParserFunctions#Code_execution. This applies also to #vardefine. Thus:
{{#ifexpr:..| {{#vardefine:a|b}}| {{#vardefine:a|c}} }}
first assigns b and then c (hence effectively just c) regardless of the condition, while
{{#vardefine:a | {{#ifexpr:..|b|c}} }}
assigns only the applicable value.
Similarly
{{#ifexpr:..| {{#vardefine:a|b}}|}}
assigns b regardless of the condition, while
{{#vardefine:a | {{#ifexpr:..|b|{{#var:a}} }} }}
conditionally assigns value b to variable a (a dummy assignment of the value of a to a is done if the condition is not fulfilled).
Control Structure Functions
Another way around the aforementioned limitation is to use the Control Structure Functions extension, which allows one to delay the parsing of wiki markup through the use of character escape sequences. So, the first above example becomes this:
{{#ifexpr:..| \o#vardefine:a\pb\c| \o#vardefine:a\pc\c }}
Alternatively, the Character Escapes extension can be used to automate the escape sequences:
{{#ifexpr:..| <esc>{{#vardefine:a|b}}</esc>| <esc>{{#vardefine:a|c}}</esc> }}
The Control Structure Functions extension also has loop functions that support character escape sequences. The wiki markup:
{{ #vardefine: i | 0 }}{{ #while: expr | <esc>{{ #var: i }} < 3</esc> | <esc> * {{ #var: i }}{{ #vardefine: i | {{ #expr: {{ #var: i }} + 1 }} }}</esc> }}
produces the following:
- 0
- 1
- 2
Links
For more info see the extension page.