我需要一个语义查询结果表模板,在该模板中,我可以为同一表中的某些列和逗号分隔的列提供换行分隔的单元格结果。
例如,如果我使用标准的format=broadtable,则结果在所有列的表单元格内用换行符分隔:
{{#ask:[[Category:Items]]
|?Description
|?Models
|?Addons
|format=broadtable
}}
如果我创建了一个模板,我所能完成的就是一个逗号分隔的结果:
<includeonly>
{| class="wikitable sortable"
! style="width: 30%;" | Page
!! style="width: 30%;" | Description
!! style="width: 20%;" | Models
!! style="width: 20%;" | Addons
|-
</includeonly>
{{#ask:[[Category:Items]]
|?Description
|?Models
|?Addons
|format=template
|template=QResTemplate
}}
<includeonly>
|}
</includeonly>
这是QResTemplate:
<includeonly>
| {{{1}}} || {{{2}}} || {{{3}}} || {{{4}}}
|-
</includeonly>
每个Item都有多个Model和Addon,所以表中的第3列和第4列需要其中一个以逗号分隔,而另一个以换行符分隔。
如果我在{{{3}}}之后添加一些东西,比如换行符,它会添加在表行的最后一个Model之后,而不是我希望的每个Model之后。
使用扩展:数组根据需要格式化逗号分隔的输出:
<includeonly><!--
store arrays
-->{{#arraydefine:models|{{{3}}}}}<!--
-->{{#arraydefine:addons|{{{4}}}}}<!--
print row
-->
| {{{1}}} || {{{2}}} || {{#arrayprint:models|<br/>}} || {{#arrayprint:addons|, }}
|-
</includeonly>
首先,将两个列表都存储为数组。arraydefine
假设您的列表是逗号分隔的,除非您指定了其他内容。然后使用#arrayprint
再次打印数组,但这一次您可以决定如何分离这些值。
如果您不能使用逗号(例如,因为某个值包含逗号,您可以将例如sep=¤
添加到您的请求查询中,然后执行{{#arraydefine:models|{{{3}}}|¤}}
来告诉arraydefine您正在使用不同的分隔符。