帮助:解析函数/arraymaptemplate
{{#arraymaptemplate: 字符串 | 模板名 | 分隔符 | 输出分隔符 }}
- 官方文档:Extension:Page Forms
arraymaptemplate
分割字符串,用指定模板逐一输出。出自扩展 Page Forms。
比如把字符串 托奇、环理、辰纱 按顿号切分,并用模板 ListLine 渲染每个名字,最终生成带项目符号的列表。片段会作为参数 {{{1}}} 传入模板。
当元素需要复杂格式(多行结构、带条件判断、包含链接/图标/样式等)时,优先使用本函数,将"格式化逻辑"下放到模板中处理,避免在 #arraymap 中堆叠复杂 wikitext 造成"嵌套地狱"。
语法
{{#arraymaptemplate: 字符串 | 模板名 | 分隔符 | 输出分隔符 }}
参数
- 字符串
- 要拆分的原始文本
- 模板名
- 用于渲染每个片段的模板,片段作为
{{{1}}}(即参数1)传入模板
- 分隔符
- 用来切分字符串(非正则表达式)
- 留空时改为"逐字符切分"
- 输出分隔符
- 连接各次模板输出的文本
- 默认值:
,(英文逗号+空格) - 支持
\n表示换行
效果
- 输出:按"输出分隔符"连接所有模板渲染结果
- 效果:字符串拆分后,每个非空片段都会被传入指定模板进行展开,空片段会被跳过
示例
假设有“模板:Demo”,内容为 {{{1}}}
| 代码 | 输出 | 显示效果 |
|---|---|---|
{{#arraymaptemplate:托奇、环理、辰纱|Demo|、|\n\n}}
|
托奇
环理
辰纱
|
托奇 环理 辰纱 |
{{#arraymaptemplate:a;b;c|Demo|;|, }}
|
a,b,c
|
a,b,c |
{{#arraymaptemplate:红蓝绿|Demo||<br>}}
|
红<br>蓝<br>绿
|
红 |
使用场景
本函数行为类似 #arraymap,但把格式化逻辑封装到模板中。主要优势在于:
场景 1:复杂渲染逻辑
当需要对每个元素进行多行、带条件的复杂格式化时,使用模板比直接在 #arraymap 中编写 wikitext 更清晰:
{{#arraymaptemplate:角色A、角色B、角色C|角色信息卡片|、|\n}}
其中模板"角色信息卡片"可包含:查询 SMW 属性、显示头像、添加链接、应用 CSS 样式等复杂逻辑。
场景 2:逻辑复用
同一个渲染模板可在多处调用,便于统一维护:
<!-- 页面 A -->
{{#arraymaptemplate:物品1,物品2|物品图标|,}}
<!-- 页面 B -->
{{#arraymaptemplate:物品3,物品4|物品图标|,}}
修改"物品图标"模板即可统一更新所有使用处的显示效果。
场景 3:避免嵌套地狱
对比以下两种写法:
使用 #arraymap(嵌套复杂):
{{#arraymap:A,B,C|,|@@@|<div class="card">[[{{{@@@}}}|{{#show:{{{@@@}}}|?显示名}}]]... 省略十行card布局HTML ...</div>}}
使用 #arraymaptemplate(逻辑清晰):
{{#arraymaptemplate:A,B,C|卡片模板|,}}
底层代码
处理流程:
- 参数解析:提取字符串、模板名、分隔符和输出分隔符(默认值分别为空字符串、空字符串、逗号、逗号+空格)
- 分隔符处理:对分隔符执行
unstripNoWiki反转义;将\n字符串替换为真实换行符 - 字符串拆分:若分隔符为空则逐字符切分(使用正则
/(.)/u),否则按分隔符explode切分 - 遍历片段:对每个片段去除首尾空白,跳过空字符串
- 模板展开:为每个非空片段构造
{{模板名|1=片段}}并调用解析器展开 - 结果连接:用输出分隔符连接所有展开结果
- 返回输出:返回最终拼接的字符串
实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
- 模板:抽卡结果 - 白夜极光
- 模板:道具图鉴 - 白夜极光
- 模板:道具图鉴/行 - 白夜极光
- 模板:活动兑换商店 - 深空之眼
- 模板:活动消耗计算器表格 - 深空之眼
- 模板:道具 - 千年之旅
- 模板:卡池一览 - 复苏的魔女
- 模板:抽卡结果 - 复苏的魔女
- 模板:抽卡结果-武器 - 复苏的魔女
- 模板:通用抽卡模拟器/文档 - 复苏的魔女
- 模板:英雄/推荐技能 - 梦幻模拟战
- 模板:英雄/推荐技能/列 - 梦幻模拟战
- 模板:英雄/推荐技能/技能图标 - 梦幻模拟战
- 模板:通用配装/列 - 梦幻模拟战
- 模板:攻略展示 - 赛尔计划

沪公网安备 31011002002714 号