2017-08-30 144 views
1

一个行跨度我有这个表中的数据:枝条上创建循环

Name | Score | Remarks 
john | 80 | pass 
jane | 85 | pass 

如何使它看起来像这样:

Name | Score | Remarks 
john | 80 | pass 
jane | 85 | 

备注表头应该创造的2行跨度,但我有如何使用树枝模板实施的概率。下面是我的代码:

{% for name in names %} 
     <tr> 
      <td class="text-center">{{name.name}}</td> 
      <td class="text-center">{{name.score}}</td> 
      <td class="text-center" rowspan="2">{{name.remarks}}</td> 
     </tr> 
{% endfor %} 

这段代码的输出是:

Name | Score | Remarks | 
john | 80 | pass | 
jane | 85 |   | pass 

回答

1

尝试是这样的:

{% if loop.index0 % 2 == 0 %} 
    <td class="text-center" rowspan="2">{{name.remarks}}</td> 
{% endif %} 

% 2对应rowspan="2"

+0

非常感谢! – zluj

+0

不客气,谢谢你的回复:) – doydoy44

+0

我发布了一个解决方案,可以处理任何数据(例如多于2个) – mykiwi

2

你可以这样做这个:

{% for name in names %} 
    <tr> 
     <td class="text-center">{{name.name}}</td> 
     <td class="text-center">{{name.score}}</td> 
     {% set rowspan = new_rowspan(names, loop.index0, 'remarks') %} 
     {% if rowspan %} 
      <td class="text-center" rowspan="{{ rowspan }}">{{name.remarks}}</td> 
     {% endif %} 
    </tr> 
{% endfor %} 

,并添加一个枝杈伸展:

class YourTwigExtension extends Twig_Extension 
{ 
    public function getFunctions() 
    { 
     return array(
      new Twig_Function('new_rowspan', [$this, 'calculateRowspan']), 
     ); 
    } 

    public function calculateRowspan($names, $from, $column) 
    { 
     // check if previous column has the same value 
     if ($from > 0 && $names[$from - 1][$column] === $names[$from][$column]) { 
      return; 
     } 

     for ($to = $from + 1; isset($names[$to]) && $names[$to][$column] === $names[$from][$column]; $to++); 

     return $to - $from; 
    } 
} 
+0

谢谢!这将帮助我在未来:) – zluj