Jump to content

Extension:LoopFunctions

From mediawiki.org
This page is a translated version of the page Extension:LoopFunctions and the translation is 12% complete.
MediaWiki 拡張機能マニュアル
LoopFunctions
リリースの状態: 安定
実装 パーサー関数
説明 Provides limited looping functionality in wikitext
作者
最新バージョン 2020-03-26
MediaWiki 1.35+
PHP 5.3+
データベースの変更 いいえ
ライセンス GNU 一般公衆利用許諾書 2.0 以降
ダウンロード
四半期ごとのダウンロード数 4 (Ranked 131st)
translatewiki.net で翻訳を利用できる場合は、LoopFunctions 拡張機能の翻訳にご協力ください

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.

関数

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

制限

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 Extension: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$}}}.

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>}}

インストール

  • ダウンロードして、ファイルをextensions/フォルダー内のLoopFunctionsという名前のディレクトリ内に配置します。
    開発者とコード寄稿者は、上記の代わりに以下を使用してGitからインストールします:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/LoopFunctions
  • 以下のコードを LocalSettings.php ファイルの末尾に追加します:
    wfLoadExtension( 'LoopFunctions' );
    
  • Yes 完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。

関連項目