You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在简易MediaWiki模板中程序化分配变量?

解决方案

标准MediaWiki原生支持情况

标准MediaWiki(无额外扩展)不支持直接创建或修改临时变量。ParserFunctions仅提供逻辑判断、字符串处理和简单运算能力,没有变量赋值的语法,没法直接把计算结果存成临时变量复用。

替代方案1:ParserFunctions嵌套赋值技巧

虽然没有直接的变量赋值,但可以通过#ifeq、#switch等函数结合空值判断,实现类似“临时存储”的效果——本质是利用函数返回值传递结果,而非真正的变量。

举个BMI计算复用的例子:

{{#ifeq: {{#expr: {{{weight|0}}} / ({{{height|0}}}/100)^2 }} | {{#var: bmi}} | 
  <!-- 复用BMI结果的逻辑 -->
  {{#expr: {{#var: bmi}} * 1.2 }}
|
  <!-- 首次计算并传递结果 -->
  {{#expr: {{{weight|0}}} / ({{{height|0}}}/100)^2 }}
}}

这种方式可读性一般,仅适合简单场景。

替代方案2:优化子模板传参

你已经尝试把公式移到子模板但传参太长,可以通过两种方式简化:

  • 子模板使用和主模板一致的参数名,调用时直接传递对应参数,比如{{CalculateWeight|height={{{height|}}}|weight={{{weight|}}}|sex={{{sex|}}}}},虽然仍需写参数,但编辑器的模板自动补全功能能减少重复输入。
  • 把多个参数打包成字符串传递,子模板内拆分。比如主模板里写:
{{CalculateWeight|params={{{height|}}},{{{weight|}}},{{{sex|}}}}}

子模板CalculateWeight用#explode拆分参数:

{{#expr: {{#explode: {{{params|}}}|,|1}} / ({{#explode: {{{params|}}}|,|0}}/100)^2 }}

这种方式能减少传参行数,但需要处理拆分逻辑,适合参数较多的场景。

关于Variables扩展

虽然有说法称Variables扩展被弃用,但截至2024年它仍是MediaWiki官方维护的扩展,只是复杂场景下可能有性能问题。如果你的维基是自行管理的,安装这个扩展是最直接的解决方案——它允许用{{#set: X=计算结果}}创建临时变量,用{{#get: X}}调用,完全匹配你的需求。若担心弃用风险,可关注官方扩展更新日志,目前无明确移除计划。

内容的提问来源于stack exchange,提问作者user182238

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:13:13