Symfony Twig和for循环

时间:2018-06-13 19:59:37

标签: php symfony pdf twig

我有以下问题。我在数据库中有一个会议表,包括idguesthoststart_timeend_timetable_number。我使用wkhtmltopdf和symfony 3生成,仅仅生成pdf就没问题了,不幸的是Twig不想和我合作。我想首先为表1生成会议,然后为2等生成会议。整个过程应如下所示:

  • 开始为表1生成pdf
  • 表从1更改为2,发生分页并开始生成包含表2等会议的新页面。

问题是它为表1生成了一个pdf,然后为表2添加了一个会议。它开始为表2生成pdf,最后从表3中抛出1个会议。生成的pdf看起来像这个:http://cyrklaf.eu/table.pdf

我不知道错误在哪里,他总是从另一张桌子开会。我的Twig代码因为问题在于它:

我的Twig代码:         

<html lang="pl">
<head>
    <meta charset="utf-8">
    <style>
        body {
            background: #FFF;
        }

        .page {
            page-break-after: always;
        }
    </style>
</head>
<body>
{% set last_table = 1 %}
{% for meeting in meetings %}
    <div class="page">
    {{ meeting.guest }} {{ meeting.host }} stolik obecny {{ meeting.tableNumber }} stolik poprzedni {{ last_table }}

    {% if meeting.tableNumber != last_table %} // 
        {% set last_table = meeting.tableNumber %}
        </div>
    {% endif %}

{% endfor %}
</body>
</html>

2 个答案:

答案 0 :(得分:1)

您应该按照以下方式处理表格中断:

{% set previous_table_number = 1 %}
{% for meeting in meetings %}
    {# This handle table break close old div if is changed #}
    {% if meeting.tableNumber != previous_table_number and not loop.first %} 
      </div>
    {% endif %}
    {# This handle table break #}
    {% if meeting.tableNumber != previous_table_number or loop.first %} 
      <div class="page">
    {% endif %}

    {{ meeting.guest }} {{ meeting.host }} stolik obecny {{ meeting.tableNumber }} stolik poprzedni {{ previous_table_number }}

    {% if loop.last %}
      </div>
    {% endif %}


{% set previous_table_number = meeting.tableNumber %}


{% endfor %}

您可以在this working fiddle

中使用它

希望这个帮助

答案 1 :(得分:0)

我会像在Twig那样写它:

<html lang="pl">
<head>
    <meta charset="utf-8">
    <style>
        body {
            background: #FFF;
        }

        .page {
            page-break-after: always;
        }
    </style>
</head>
<body>
{% for i in 1..4 %}
  {% for meeting in meetings %}
    {% if meeting.tableNumber == i %}

      <div class="page">
        {{ meeting.guest }} {{ meeting.host }} stolik obecny {{ meeting.tableNumber }} stolik poprzedni {{ last_table }}
      </div>

    {% endif %}
  {% endfor %}
{% endfor %}

</body>
</html>