Extension:迴圈
Loops 发行状态: 稳定版 |
|
---|---|
实现 | 解析器函数 |
描述 | 为执行循环提供解析器函数 |
作者 | |
最新版本 | 0.5.2 (2019-08-05) |
MediaWiki | 1.34+ |
PHP | 5.6+ |
数据库更改 | 否 |
许可协议 | GNU通用公眾授權條款2.0或更新版本 |
下載 | README RELEASE-NOTES |
示例 | sandbox.semantic-mediawiki.org |
|
|
季度下載量 | 33 (Ranked 107th) |
前往translatewiki.net翻譯Loops扩展 | |
問題 | 开启的任务 · 报告错误 |
Loops扩展提供解析器函数 来执行循环。
目前,这个扩展由MGChecker基本维护。
用法
#while
{{#while}}
performs a loop (i.e. it repeatedly parses a given wiki markup block statement) so long as the condition mark-up evaluates to non-whitespace.
{{#while: | <condition text> | <block statement> }}
- 示例
The wiki markup:
{{#vardefine: i | 0 }}{{#while: | {{#ifexpr: {{#var: i }} < 5 | true }} | <nowiki /> * {{#var: i }}{{#vardefine: i | {{#expr: {{#var: i }} + 1 }} }} }}
produces the following:
- 0
- 1
- 2
- 3
- 4
{{#while}}
can also be used in a template to simulate a numbered array.
If the page "Template:Loops Test" contains
{{#vardefine: i | 0 }}{{#while: | {{{arg{{#var: i }} |}}} | <nowiki /> * {{{arg{{#var: i }} }}}{{#vardefine: i | {{#expr: {{#var: i }} + 1 }} }} }}
then the wiki-markup
{{Loops Test |arg0=zero |arg1=one |arg2=two |arg3=three |arg4=four }}
produces
- zero
- one
- two
- three
- four
It's important to note that whitespace, including newlines, tabs, and spaces, is stripped from the beginning and end of all the arguments of these parser functions.
If this is not desirable, adding any non-whitespace characters (including the HTML encoding for a whitespace character  
) will prevent further stripping (hence the <nowiki>
tags in the above examples).
#dowhile
{{#dowhile}}
performs exactly like {{#while}}
, with the exception that the block statement is guaranteed to be parsed and displayed (if it results in displayable text) at least once.
This is done before the condition text is evaluated.
#loop
{{#loop: <variable name> | <starting value> | <number of loops to be performed> | <wiki markup> }}
{{#loop}}
repeatedly parses and displays <wiki markup> a number of times equal to the absolute value of <number of loops to be performed>.
<Starting value> is placed in a variable (accessible by Variables extension's {{#var:}}
parser function) using the name <variable name>.
After each loop, the variable is incremented by one if <number of loops to be performed> is positive, or decremented by one if <number of loops to be performed> is negative.
#loop
should have the best performance since there is no condition which has to be expanded and validated for each cycle.- Examples
The following code:
{{#loop: varname | 4 | 4 | <nowiki /> * This is round {{#var: varname }} and we have {{#expr: 7 - {{#var: varname }} }} more to go }}
produces
- This is round 4 and we have 3 more to go
- This is round 5 and we have 2 more to go
- This is round 6 and we have 1 more to go
- This is round 7 and we have 0 more to go
#forargs
(experimental)
{{#forargs}}
is to be used in templates.
It takes arguments that are passed to the template and puts them in variables accessible by Variables extension's {{#var:}}
parser function.
{{#forargs: <prefix> | <key> | <value> | <block statement> }}
This function iterates through each argument whose name begins with <prefix>.
With each iteration it puts the argument name minus <prefix> into <key> as if calling {{#vardefine: <key> }}
.
It then takes the value of the argument and puts it into <value> in a similar method.
The block statement is then expanded.
The block statement may contain {{#var: <key> }}
and {{#var: <value> }}
to access the stored arguments.
- Example
If the page "Template:Loops Test" contains
{{#forargs: arg | key | value | <nowiki /> * {{#var: key }} = {{#var: value }} }}
then the wiki markup
{{Loops Test | arg1=val1 | spam=spammity | arg5=val5 | argument=value }}
produces
- 1 = val1
- 5 = val5
- ument = value
#fornumargs
(experimental)
{{#fornumargs: <key> | <value> | <block statement> }}
{{#fornumargs}}
performs similarly to {{#forargs}}
with two major differences: It doesn't take a prefix argument, and it only works on numbered arguments whether they're explicitly numbered,
{{Template | 1=one | 2=two }}
or implicitly numbered.
{{Template | one | two }}
Mixing these methods in a single template call may cause values to get overwritten, so be careful.
- Examples
If "Template:Loops Test" is edited to contain:
{{#fornumargs: number | value | <nowiki /> * {{#var: number }} = {{#var: value }} }}
then
{{Loops Test | Apricot | B = Bolognese | Caramel slice | 5 = Eclair }}
will result in
- 1 = Apricot
- 2 = Caramel slice
- 5 = Eclair
Installation
- 下载文件,并将解压后的
Loops
文件夹移动到extensions/
目录中。
开发者和代码贡献人员应从Git安装扩展,输入:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Loops - 将下列代码放置在您的LocalSettings.php 的底部:
wfLoadExtension( 'Loops' );
- Configure at your convenience
- 完成 – 在您的wiki上导航至Special:Version,以验证已成功安装扩展。
Configuration
These configuration variables have to be set in the LocalSettings.php
file after the inclusion of this extension.
$egLoopsCountLimit
- This parameter sets the maximum number of loops a page is allowed to perform (default
100
). Setting it to-1
lets the loops run within the limits of phps environment. This parameter affects neither the{{#forargs:}}
nor{{#fornumargs:}}
parser functions.
$egLoopsEnabledFunctions
- Configuration variable (array) to define which Loops functions should be enabled. By default, all functions are enabled if the Variables extension is installed as well. If the Variables extension is not installed,
#loop
,#forargs
and#fornumargs
will be disabled since they do not work without it being installed. To enable the#fornumargs
and#forargs
functions only, one can use:
$egLoopsEnabledFunctions = array_diff(
$egLoopsEnabledFunctions, [
'forargs', 'fornumargs'
]
);
參見
- Extension:LoopFunctions - Another extension for loops
- Module:Loops
此扩展在以下wiki农场/托管网站和/或软件包中提供: 這不是一份權威名單。 即使某些wiki农场/托管网站和/或软件包未在这里列出,它们也可能提供此扩展。 请检查你的wiki农场/托管网站或软件包以确认提供情况。 |