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
相关产品推荐
相关产品推荐

