Jump to content

Extension:Variables(变量)

本頁使用了標題或全文手工轉換
From mediawiki.org
This page is a translated version of the page Extension:Variables and the translation is 99% complete.


MediaWiki扩展手册
Variables
发行状态: 稳定版
实现 解析器函数
描述 引入用于处理单页可用的变量的解析器函数。
作者
维护者 MGChecker
最新版本 2.6.0-beta (2023-12-05)
MediaWiki 1.29+
PHP 5.5+
数据库更改
  • $wgVariablesAreVolatile
  • $wgVariablesDisabledFunctions
许可协议 ISC授權條款
下載
README
RELEASE-NOTES
前往translatewiki.net翻譯Variables扩展
Vagrant角色 variables
問題 开启的任务 · 报告错误
警告 警告: This extension is incompatible with plans to parallelize parsing, as is intended by the use of Parsoid . Therefore, the future of this extension is uncertain, and it is expected to become incompatible with the standard MediaWiki parser within a few years. For further information, see T250963 and No support for sequential, in-order processing of extension tags .
为避免MediaWiki 1.35 - MediaWiki 1.38 中关于InternalParseBeforeSanitize钩子的弃用警告,或在MediaWiki 1.39 +中#var_final解析器函数失效,请更新到最新版本(目前为master分支)。 参见T276627T250963以获取更多信息。

变量(Variables)扩展允许您在页面中定义变量,然后在同一页面或包含的模板中使用、改变它的值,可以是按照表达式根据旧值计算得来等。

它很像模板,只是占用内存非常少并且作用只能在1个页面,所以你可以在1个页面使用很多个变量,不会出现因使用大量的模板导致维基运行缓慢的问题。结合ParserFunctions(解析器函数) 扩展以达到最好的结果。

維基媒體基金會(WMF)運行的維基將不會啟用此擴充功能。[1][2][3][4] 參見替代選項

给变量赋值

#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' );
    
  • 按需配置
  • Yes 完成 – 請导航至您的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版本进行测试。


替代選項

由于这个扩展不被维基媒体基金会(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.


参见

参考资料