如何在Twig模板中对父级与子级字段进行分组展示?
实现方案
你的视图返回的每一行都同时携带一级分组(HLG)和对应的二级子组数据,重复出现的一级分组信息不需要重复输出,因此先做数据聚合分组再渲染即可实现需求。
完整Twig实现代码
{# 第一步:初始化分组数组,将相同一级组的子组合并 #} {% set grouped_hlg = {} %} {% for row in rows %} {% set level1_title = row.field_hlg_level1_title %} {% set level1_abstract = row.field_hlg_level1_Abstract %} {% set subgroup = { 'title': row.field_hlg_level2_title, 'abstract': row.field_hlg_level2_Abstract } %} {# 如果当前一级组还未加入分组数组,先初始化一级组基础信息 #} {% if level1_title not in grouped_hlg|keys %} {% set grouped_hlg = grouped_hlg|merge({ (level1_title): { 'abstract': level1_abstract, 'subgroups': [] } }) %} {% endif %} {# 将当前二级子组加入对应一级组的子组列表 #} {% set grouped_hlg = grouped_hlg|merge({ (level1_title): grouped_hlg[level1_title]|merge({ 'subgroups': grouped_hlg[level1_title].subgroups|merge([subgroup]) }) }) %} {% endfor %} {# 第二步:渲染分组后的数据 #} {% for level1_title, level1_data in grouped_hlg %} <div class="group_hlglevel1"> <p>field_hlg_level1_title : {{ level1_title }}</p> <p>field_hlg_level1_Abstract : {{ level1_data.abstract }}</p> {# 遍历当前一级组下的所有二级子组 #} {% for subgroup in level1_data.subgroups %} <div class="group_hlglevel2" style="margin-left: 2em;"> <p>field_hlg_level2_title : {{ subgroup.title }}</p> <p>field_hlg_level2_Abstract: {{ subgroup.abstract }}</p> </div> {% endfor %} </div> {% endfor %}
代码说明
- 先遍历所有原始行,以一级组标题为唯一标识做聚合,把相同一级组下的所有二级子组都归到同一个分组下,避免一级组信息重复输出
- 渲染的时候先输出一级组的标题和摘要,再循环输出该组下的所有二级子组内容,二级组的缩进效果可以通过调整CSS实现,示例中用
margin-left做了基础演示
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

