访问Twig循环中的下一个值

时间:2013-05-23 10:32:27

标签: loops symfony twig

我有一个问题是使用Twig在循环中显示结果的下一行:

// Arkiglass/ProduitBundle/Controller/DefaultController.php
<?php
public function produitAction()
{
$em = $this->getDoctrine()->getManager();
        $query = $em->createQuery('SELECT p FROM ArkiglassProduitBundle:Produit p');
        $produit = $query->getResult();
        if (!$produit)
        {
            throw $this->createNotFoundException('no such Product !');
        }
return $this->render('ArkiglassSiteBundle:Site:produit.html.twig', array(
            'produit' => $produit
        ));;
}

这是我的模板

{# produit.html.twig #}

{% for pr in produit %}
<table>
    <tr>
        <td>
            {{ pr.description }}
        </td>
        <td>
            {# display the next pr.description #}
        </td>

    </tr>
 {% endfor %}
 </table>

我尝试使用{{ pr[loop.index+1].description }},但它对我不起作用。

2 个答案:

答案 0 :(得分:8)

这是连续打印两个循环运行的一种可能解决方案。循环索引(首先是基于1,然后是基于0)以2为模,因此在第一次运行中,前导<tr>被渲染,在第二次运行中,尾随</tr>被渲染。等等。
第一个loop.last条件是显示第二个空列,如果最后一个循环运行在第一列中结束。第二个条件是正确关闭行。

<table>
    {% for pr in produit %}
        {% if (loop.index % 2) %}<tr>{% endif %}
            <td>
                {{ pr.description }}
            </td>
            {% if (loop.index % 2) and loop.last %}
                <td>&nbsp</td>
            {% endif %}
        {% if (loop.index0 % 2) or loop.last %}</tr>{% endif %}
    {% endfor %}
 </table>

答案 1 :(得分:1)

这看起来有点不太优雅,但会避开你的两个循环。

        <tbody>
            {% set previousOption = false %}
            {% set nextIterator = 1 %}
            {% for option in options %}
                {% if options[nextIterator] is defined %}
                    {% set nextOption = options[nextIterator] %}
                {% else %}
                    {% set nextOption = false %}
                {% endif %}
                <tr>
                    <td>
                        {{ option.label }}
                    </td>
                    <td>
                        {{ option.type }}
                    </td>
                    <td colspan>
                        <a href="{{ path('option_delete', {'questionId': question.id, 'optionId': option.id }) }}">Delete option</a>
                    </td>
                    <td>
                        {% if previousOption %}
                            <a href="{{ path('do_swap', {'optionId': option.id, 'optionId2': previousOption.id }) }}">&laquo; Boost up</a>
                        {% endif %}
                    </td>
                    <td>
                        {% if nextOption %}
                            <a href="{{ path('do_swap', {'optionId': option.id, 'optionId2': nextOption.id }) }}">Shut down &raquo;</a>
                        {% endif %}
                    </td>
                </tr>
                {% set previousOption = option %}
                {% set nextIterator = (nextIterator + 1) %}
            {% endfor %}
        </tbody>