Extension:Variables(变量)
发行状态: 稳定版 |
|
|---|---|
| 实现 | 解析器函数 |
| 描述 | 引入用于处理单页可用的变量的解析器函数。 |
| 作者 |
|
| 维护者 | MGChecker |
| 最新版本 | 2.6.0-beta (2023-12-05) |
| MediaWiki | 1.29+ |
| PHP | 5.5+ |
| 数据库更改 | 否 |
|
|
| 许可协议 | ISC授權條款 |
| 下載 | README RELEASE-NOTES |
| 前往translatewiki.net翻譯Variables扩展 | |
| Vagrant角色 | variables |
| 問題 | 开启的任务 · 报告错误 |
InternalParseBeforeSanitize钩子的弃用警告,或在MediaWiki 1.39+中#var_final解析器函数失效,请更新到最新版本(目前为master分支)。 参见T276627和T250963以获取更多信息。变量(Variables)扩展允许您在页面中定义变量,然后在同一页面或包含的模板中使用、改变它的值,可以是按照表达式根据旧值计算得来等。
它很像模板,只是占用内存非常少并且作用只能在1个页面,所以你可以在1个页面使用很多个变量,不会出现因使用大量的模板导致维基运行缓慢的问题。结合ParserFunctions(解析器函数)扩展以达到最好的结果。
给变量赋值
#vardefine
{{#vardefine:变量名称 | 指定值 }}
将值指定值分配给(已存在或由此引入的)变量变量名。
- 示例:
{{#vardefine:iconwidth|25}}使iconwidth = 25
#vardefineecho
{{#vardefineecho:变量名称 | 指定值 }}
与#vardefine完全相同,但会打印受影响的值。
- 例如: 使得
iconwidth = {{#vardefineecho:iconwidth|25}}
检索变量的值
#var
变量“变量名称“的值的产生:
{{#var:变量名称}}
如果未定义,会产生空字符串,不会抛出错误。
变量未定义或为空时可以取得默认值:
{{#var:变量名称 | 默认值 }}
相当于:
{{#if: {{#var:变量名称 }} | {{#var:变量名称 }} | 默认值 }}
但这样更加简短。在版本2.0之前,默认值会自动展开。从版本2.0开始,默认值只会在真正用到时展开。
值可用于解析器函数。
#varexists
{{#varexists:变量名称 }}如果变量已经定义返回1。如果没有定义则返回空。
它支持第二个和第三个参数来替换这些值。
{{#varexists:变量名称 | if值 | else-value }}
这相当于:
{{#if: {{#varexists: 变量名称 }} | if值 | else-value }}
但它更短,更好地安排。在2.5版之前,两者都是扩展的。 从2.5以后的if和else值只有在实际输入案例时才会展开。
#var_final
变量2.0中引入了实验新功能。 此函数将输出变量在页面渲染结束时具有的最后一个最后一个值。 当然,在解析器遍历整个wiki标记之后将插入该值,因此该函数不能用于其他函数,期望正在使用正确的值。 例:
{{#var_final:变量名称 | 默认值 }}
如果变量在最终页面呈现阶段不存在或者其值为空字符串,则将使用默认值。 默认值将在使用函数的位置展开,因此即使不需要参数,也会扩展参数。
示例
ParserFunctions(解析器函数)扩展必须已安装以使用#expr。
计算x = 2*a + b:
{{#vardefine:x|{{#expr:2*{{#var:a}}+{{#var:b}}}}}}
令变量n加1:
{{#vardefine:n|{{#expr:{{#var:n}}+1}}}}
安装
- 下载文件,并解压
Variables文件夹到extensions/目录中。
开发者和代码贡献人员应改从Git安装此扩展,输入:cd extensions/ git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Variables
- 請新增下列代码到您的LocalSettings.php文件的底部:
wfLoadExtension( 'Variables' );
- 按需配置
完成 – 請导航至您的wiki上的Special:Version,以验证此扩展已成功安装。
配置
該擴充功能提供了兩個配置參數:
$egVariablesAreVolatile- Allows to disable the parser frame being marked as volatile by the extension, i.e. disable template caching.
- 默认值:
true; $egVariablesDisabledFunctions- 允許指定停用此擴充功能提供的解析器功能。
- 默认值:
[]; - 示例:
[ 'var_final', 'vardefineecho' ];
兼容性
下面列出了最近MediaWiki版本的Variables扩展的推荐版本。较旧版本的扩展可能也可以正常工作,但未针对新的MediaWiki版本进行测试。
| MediaWiki version | Variables version |
|---|---|
| 1.19–1.22 | 2.1.x |
| 1.23–1.28 | 2.2.x |
| 1.29–1.34 | 2.5.x |
| 1.35–1.43 | master branch (2.6.0-beta) |
| 1.44+ | master branch, untested |
替代選項
由于这个扩展不被维基媒体基金会(WMF)启用,以下是一些替代选择:[1][2][3][4]
- 如果将变量用作高开销操作的缓存,你可以将需要它们的代码段转换为模板,并通过模板参数传递所需信息来实现替代方案。 在达到扩展深度限制之前,这种方法都有效。如有需要,可以增加该限制。
- 若需进行比简单Extension:ParserFunctions(解析器函数)更复杂的模板操作,且拥有足够的服务器权限,可使用Scribunto的Lua功能替代。请注意共享主机可能无法安装Scribunto,且该方案不会增加对全局变量的支持。 然而,Extension:VariablesLua为变量存储添加了一个Scribunto接口。
- 不要使用变量,而是将所需信息复制为变量。如果该信息是通过高消耗的模板调用获取的,可能会影响性能。这种方法在达到节点数限制之前都是有效的。
- 如果你只需要用于自动编号的变量,可以考虑使用Extension:NumerAlpha。 Note that this extension is not compatible with the future of parsing as envisaged by Parsoid.
参见
- Extension:MyVariables – 在MediaWiki创建新变量
- Extension:Loops(循环) – 提供执行循环的解析器函数
- Extension:数组 – 创建一个数组并提供数组函数(比如搜索、分离、排序)以及集合操作 (如交集、并集、差集)
- Extension:HashTables – 用于处理MediaWiki的哈希表的新解析器函数
参考资料
- ↑ 1.0 1.1 phab:T9865
- ↑ 2.0 2.1 phab:T65324
- ↑ 3.0 3.1 phab:T113859
- ↑ 4.0 4.1 phab:T151192
| 此扩展在以下wiki农场/托管网站和/或软件包中提供: |
- Stable extensions/zh
- Parser function extensions/zh
- ParserClearState extensions/zh
- ParserFirstCallInit extensions/zh
- ISC licensed extensions/zh
- Extensions in Wikimedia version control/zh
- All extensions/zh
- Pages using deprecated NoteTA template
- Extensions included in BlueSpice/zh
- Extensions included in Canasta/zh
- Extensions included in Fandom/zh
- Extensions included in Miraheze/zh
- Extensions included in Open CSP/zh
- Extensions included in ProWiki/zh
- Extensions included in semantic::core/zh
- Extensions included in Telepedia/zh
- Extensions included in wiki.gg/zh
- Modifiable variables extensions/zh
