Erweiterung:LoopFunctions
![]() Freigabestatus: stabil |
|
---|---|
Einbindung | Parser-Funktion |
Beschreibung | Provides limited looping functionality in wikitext |
Autor(en) | |
Letzte Version | 2020-03-26 |
MediaWiki | 1.35+ |
PHP | 5.3+ |
Datenbankänderungen | Nein |
Lizenz | GNU General Public License 2.0 oder neuer |
Herunterladen | |
Quarterly downloads | 7 (Ranked 133rd) |
Übersetze die LoopFunctions-Erweiterung, wenn sie auf translatewiki.net verfügbar ist | |
The LoopFunctions extension will enable limited looping functionality in the wikitext, where a variable ($n$
by default) is replaced by the current iteration number of the loop.
The variable can be used in a plain text or link.
Also the result of the whole loop can be put in an expression, e.g. to compute a factorial.
However, the loop body is evaluated before replacing the variable, so e.g. a computation inside the loop body, depending on the value of the variable, is not possible.
Functions
#for
{{#for: n | text }}
Where n is the count of iteration and the text is the text to be repeated.
{{#for: n | text | replacement parameter }}
If, after expansion of templates, parser functions, and variables, the text contains the text $n$
or what is defined by the third parameter, that will be replaced by the current iteration, starting with 1.
Watch out for gaps, because code But same code with spaces |
Using in templates
Calling the template {{foo | n=4 | list1=a | list3=c | list4=d }}
, if template foo containing: {{#for: {{{n}}} | {{{list$n$}}}<br/>}}
, will result in the wikitext: a<br/>b<br/>c<br/>d<br/>
Using for calculations
Sum of squares 1^2 through 5^2: {{#expr:{{#for:5|+$n$*$n$}}}}
gives 55
Factorial 6 (6!): {{#expr:1{{#for:6|*$n$}}}}
gives 720
Compare, using m:Template:for and m:Template:plus square: {{#expr:{{for|call=plus square|pv=1|1|2|3|4|5}}}}
gives 55
for
, not #for
.Limitation
In the loop body, templates, parser functions, and variables are expanded before replacing the index variable by its values, i.e.:
- Parameter of a parser function depending on the index variable
-
Code {{#for:3|{{lc:Ab$n$}}}}
gives ab1ab2ab3
; the result is in this case the same as when the repetition was done first, and then the evaluation of each item.
Code {{#for:3|{{uc:Ab$n$}}}}
gives AB$N$AB$N$AB$N$
; the result is in this case not the same, because $n$
is changed to $N$
, and therefore not treated as index variable.
Applying #expr to an expression containing the index variable does not work: expansion of #expr in e.g. {{#expr:2*$n$}}
gives the text so this text will be repeated:
Expression error: Unrecognised punctuation character "$"
- Template name depending on the index variable
-
Code {{#for:3|{{a$n$}}}}
gives:
- if the template with the literal name
Template:a$n$
does not exist: Template:a1 Template:a2 Template:a3 (the loop body is evaluated as Template:a$n$, after which the loop function repeats that, substituting$n$
).
- if the template with the literal name
if the template with the literal name Template:a$n$
does exist: the result of {{a*$n$}}{{a*$n$}}{{a*$n$}}
, i.e., the content is repeated unchanged.
- Limitation in combination with Erweiterung:Variables
- Within the loop a variable can be assigned a value depending on the loop variable, and the value of this variable can be retrieved.
- However, it seems that within the loop the variable cannot be assigned a new value depending on its own current value. Instead the value on entering the loop is taken.
#foreach
Function only for template use.
{{#foreach: mask | text }}
{{#foreach: mask | text | replacement parameter }}
The mask is a string in the format prefix$n$suffix where $n$
can be changed via the replacement parameter.
The function #foreach, called inside a template, will produce the text for $n$ = 1, 2, 3,... as long as prefix$n$suffix is a template parameter defined in the template call.
If the text contains the text $n$
or what is defined by the third parameter, that will be replaced by the current value of $n$
.
It seems that the whole call of #foreach is ignored if the loop body contains a template call or a parser function call, or if the loop body does not contain {{{$n$}}}.
Beispiel
Calling the template {{foo | foo2_bar=a | foo1_bar=b | a=12 | 6 | foo4_bar=c }}
using the template foo, containing: {{#foreach: foo$n$_bar | foo$n$_bar = {{{foo$n$_bar}}}<br/>}}
will result in the expanded wikitext foo1_bar = b<br/>foo2_bar = a<br/>
and hence the output:
- foo1_bar = b
- foo2_bar = a
Since foo3_bar
is not defined, foo4_bar
is not listed either; neither are a and 1
, the parameter names which exist but do not match the pattern.
Using without prefix or suffix
The code {{showpars | abc | de | w=fgh | ijk}}
call Template:Showpars containing {{#foreach: $n$ | $n$ = {{{$n$}}}<br/>}}
and gives:
- 1 = abc
- 2 = de
- 3 = ijk
Content of a template that links to the pages given by the values of the unnamed parameters:
{{#foreach:$n$|[[{{{$n$}}}]]<nowiki> </nowiki>}}
Installation
- Die Erweiterung herunterladen und die Datei(en) in ein Verzeichnis namens
LoopFunctions
im Ordnerextensions/
ablegen.
Entwickler und Code-Beitragende sollten stattdessen die Erweiterung von Git installieren, mit:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/LoopFunctions - Folgenden Code am Ende deiner LocalSettings.php -Datei einfügen:
wfLoadExtension( 'LoopFunctions' );
- Erledigt – Navigiere zu Special:Version in deinem Wiki, um zu überprüfen, ob die Erweiterung erfolgreich installiert wurde.