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

MediaWiki中#arraymap在模板调用中失效问题求助

问题描述

我有一个数组courant,值为:Gothique,Néo-roman,Ottonien。尝试使用#arraymap转换格式,代码如下:

{{#if: {{{courant|}}} |
{{#vardefine:num|0}}
{{#arraymap:{{{courant|}}}|,|@@@|{{#vardefine:num|{{#expr:{{#var:num}}+1}}}}<nowiki>|</nowiki>courant{{#var:num}}=@@@|
}}
|}}

直接在<p>标签中输出时结果正常:|courant1=Gothique|courant2=Néo-roman|courant3=Ottonien,但将该代码嵌入Bouton_recherche_avancée模板调用时无任何输出,怀疑与<nowiki>标签有关。相关页面包括:Modèle:Recherche avancée、Recherche avancée、Modèle:Bouton-recherche-avancée。

解决方法

方法1:替换<nowiki>|</nowiki>为{{!}}

在MediaWiki模板语境中,<nowiki>标签可能干扰参数解析,导致输出被当作纯文本而非可解析内容。使用MediaWiki内置的{{!}}魔法词输出竖线,避免解析冲突:

{{#if: {{{courant|}}} |
{{#vardefine:num|0}}
{{#arraymap:{{{courant|}}}|,|@@@|{{#vardefine:num|{{#expr:{{#var:num}}+1}}}}{{!}}courant{{#var:num}}=@@@|
}}
|}}

方法2:用变量存储分隔符

先将竖线定义为变量,再在arraymap中引用,进一步规避解析问题:

{{#if: {{{courant|}}} |
{{#vardefine:num|0}}
{{#vardefine:sep|{{!}}}}
{{#arraymap:{{{courant|}}}|,|@@@|{{#vardefine:num|{{#expr:{{#var:num}}+1}}}}{{#var:sep}}courant{{#var:num}}=@@@|
}}
|}}

方法3:使用#explode替代#arraymap

如果#arraymap仍存在问题,可尝试用#explode(需确保ParserFunctions扩展启用)拆分数组并循环处理:

{{#if: {{{courant|}}} |
{{#vardefine:num|0}}
{{#explode:{{{courant|}}}|,|@@@|
  {{#vardefine:num|{{#expr:{{#var:num}}+1}}}}
  {{!}}courant{{#var:num}}=@@@
}}
|}}

额外检查点

  • 确认Bouton_recherche_avancée模板是否对传入内容有特殊处理(如转义、过滤),导致生成的输出被忽略。
  • 验证courant参数是否正确传递到模板中,避免因参数未正确传递导致无输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:55:09