我是Twig和Symfony2的新手。我想知道如何用Twig创建一个3列表。我的数据来自数据库
到目前为止,我已经尝试了一切,但仍然没有效果。我在Stackoverflow上发现了这个关于制作一个2列表的问题,除了我之外它完美无缺。我想要3列。
<table>
{% for var in var1 %}
{% if (loop.index % 2) %}<tr>{% endif %}
<td>
<div class="bloc">
<a href="{{ path('xxxxxxx', {'id':var.id}) }}">
<span>{{ var.name}} </spann></a></div>
<img src="{{ asset(var.image ) }}" />
</div>
</td>
{% if (loop.index % 2) and loop.last %}
<td> </td>
{% endif %}
{% if (loop.index0 % 2) or loop.last %}</tr>{% endif %}
{% endfor %}
</table>
ex: var1 contains names and pictures from database.
name1 name2 name3
name4 name5 name6
...
这就是我的ATM
name1 name2
name3 name4 name5
name6 name7 name8
答案 0 :(得分:5)
我的解决方案适用于任意数量的列:
{% set columns = 3 %}
{% for name in names %}
{% if loop.first or loop.index0 is divisibleby(columns) %}
<tr>
{% endif %}
<td>{{ name }}</td>
{% if loop.last and loop.index is not divisibleby(columns) %}
{% for n in range(low=columns - (loop.index % columns), high=1, step=-1) %}
<td> </td>
{% endfor %}
{% endif %}
{% if loop.last or loop.index is divisibleby(columns) %}
</tr>
{% endif %}
{% endfor %}
答案 1 :(得分:5)
正确的方法是使用batch(array_chunk):
{% for batchResults in result.items|batch(result.total_results / columns) %}
<div class="{{cycle(['left', 'left', 'right'], loop.index)}}">
{% for item in batchResults %}
<div class="{% if loop.last %}last{% endif %}">
{{item}}
</div>
{% endfor %}
</div>
{% endfor %}
答案 2 :(得分:1)
Peekmo的解决方案是正确的,但在树枝中使用批量过滤器可能有一种更简洁的方法。此过滤器将列表分成较小的子集。您可以控制大小并使用嵌套for循环来显示行及其内容。文档中的示例是对此问题的准确答案。过滤器也可以整齐地处理空单元格。即你在一个数组中有8个值,你想要一个3列表,最后一个单元格将是emtpy
答案 3 :(得分:0)
你应该尝试类似的东西:
<table>
{% for var in var1%}
<tr>
<td>Title1<td>
<td>Title2<td>
<td>Title3<td>
</tr>
<tr>
<td>{{ var.attr1 }}<td>
<td>{{ var.attr2 }}<td>
<td>{{ var.attr3 }}<td>
</tr>
{%endfor%}
</table>
答案 4 :(得分:0)
<table>
<tr>
{% for var in var1%}
{% if loop.index0 is divisibleby(3) %}
</tr>
<tr>
{% endif %}
<td>{{ var }}</td>
{% if loop.last %}
</tr>
{% endif %}
{%endfor%}
</table>
我认为这可以解决您的问题,您必须每3次迭代打开标记,并且不要忘记在循环终止时关闭最后一个。
答案 5 :(得分:0)
未经测试,但应打印干净的桌子。
<table>
{% for var in var1 %}
{% if not (loop.index0 % 3) %}<tr>{% endif %}
<td>
<div class="bloc">
<a href="{{ path('xxxxxxx', {'id':var.id}) }}">
<span>{{ var.name}} </spann></a></div>
<img src="{{ asset(var.image ) }}" />
</div>
</td>
{% if (loop.index % 2) and loop.last %}
<td> </td>
{% endif %}
{% if (loop.index % 3) and loop.last %}
<td> </td>
{% endif %}
{% if not (loop.index % 3) or loop.last %}</tr>{% endif %}
{% endfor %}
</table>