# Erweiterung:LoopFunctions

This page is a translated version of the page Extension:LoopFunctions and the translation is 8% complete.
MediaWiki-Erweiterungen
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
Ü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.

Per standard the number of iterations is limited to 100 iterations per session.

## 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.

#### 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 a list of squares it seems that we can only use `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 `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 Ordner `extensions/` ablegen.
• Folgenden Code am Ende deiner LocalSettings.php-Datei einfügen:
```wfLoadExtension( 'LoopFunctions' );
```
•  Erledigt – Zu Special:Version in dem Wiki (bei Einstellung auf deutsch nach Spezial:Version) navigieren, um die erfolgreiche Installierung der Erweiterung zu überprüfen.

Für Benutzer, die MediaWiki in der Version 1.30 und früher betreiben:

Die oben stehenden Anweisungen beschreiben die neue Installationsanweisung für diese Erweiterung unter der Verwendung von `wfLoadExtension()`. Wird diese Erweiterung in einer dieser früheren Versionen (MediaWiki 1.30 und früher)  – an Stelle von `wfLoadExtension( 'LoopFunctions' );` – installiert, benutze:

```require_once "\$IP/extensions/LoopFunctions/LoopFunctions.php";
```