Erweiterung:LoopFunctions

This page is a translated version of the page Extension:LoopFunctions and the translation is 8% complete.
Other languages:
MediaWiki-Erweiterungen
OOjs UI icon advanced-invert.svg
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
Ü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, but may be increased by variable $egLoopsCounterLimit, which you can add into file LocalSettings.php .

#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 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 der LocalSettings.php 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";

Siehe auch