假设我有一个这样的for循环:
{% for elem in arrMenu %}
<div class="topmenu-button">
<a href="{{ elem.url }}">{{ elem.name }}</a>
</div>
{% endfor %}
在该表格中,它会呈现如下内容:
<div class="topmenu-button"><a href="url">name</a></div>
<div class="topmenu-button"><a href="url">name</a></div>
<div class="topmenu-button"><a href="url">name</a></div>
<div class="topmenu-button"><a href="url">name</a></div>
twig如何帮助我添加div的第一个和最后一个类,这样我就会得到如下结果:
<div class="topmenu-button first"><a href="url">name</a></div>
<div class="topmenu-button"><a href="url">name</a></div>
<div class="topmenu-button"><a href="url">name</a></div>
<div class="topmenu-button last"><a href="url">name</a></div>
答案 0 :(得分:105)
您可以根据需要使用“特殊变量”loop.first
和loop.last
。
{% for elem in arrMenu %}
{% if loop.first %}
<div class="topmenu-button first">
{% elseif loop.last %}
<div class="topmenu-button last">
{% else %}
<div class="topmenu-button">
{% endif %}
<a href="{{ elem.url }}">{{ elem.name }}</a>
</div>
{% endfor %}
编辑:根据您对“一个案例”的关注程度,您可能需要这样的解决方案。
{% for elem in arrMenu %}
{% set classes = ["topmenu-button"] %}
{% if loop.first %}{% set classes = classes|merge(["first"]) %}{% endif %}
{% if loop.last %}{% set classes = classes|merge(["last"]) %}{% endif %}
<div class="{{ classes|join(" ") }}">
<a href="{{ elem.url }}">{{ elem.name }}</a>
</div>
{% endfor %}
答案 1 :(得分:8)
由于循环不能同时为first
和last
,我宁愿不使用elseif
并写入(DRY - 如果必须更改{{ 1}}将来?):
topmenu-button
或更简洁:
{% for elem in arrMenu %}
{% set append %}
{% if loop.first %}first{% endif %}
{% if loop.last %}last{% endif %}
{% endset %}
<div class="topmenu-button {{ append }}">
<a href="{{ elem.url }}">{{ elem.name }}</a>
</div>
{% endfor %}
编辑:这样你就可以在{% for elem in arrMenu %}
<div class="topmenu-button {% if loop.first %}first{% endif %} {% if loop.last %}last{% endif %}">
<a href="{{ elem.url }}">{{ elem.name }}</a>
</div>
{% endfor %}
属性中获得一些额外的空格(这非常好btw)。
Edit2 :这不会处理1个元素的数组(first = last)
答案 2 :(得分:2)
如果要管理标签的类属性,则三元条件会更好。
<span class="topmenu-button {{ (loop.first) ? 'first' : '' }}">{{ item.text }}</span>
答案 3 :(得分:0)
我在Drupal 8视图模板中使用它。感谢'elseif',如果你只有1个项目,那么第一个项目永远不会得到'last'类:
{% for row in rows %}
{% set parity = cycle(['odd', 'even'], loop.index0) %}
{% set row_classes = [ default_row_class ? 'views-row', ] %}
<div class="views-prerow {{parity}}{% if loop.first %} first{% elseif loop.last %} last{% endif %}">
<div{{ row.attributes.addClass(row_classes) }}>
{{ row.content }}
</div>
</div>
{% endfor %}