【问题标题】:Symfony Twig and for loopSymfony Twig 和 for 循环
【发布时间】:2018-11-23 12:18:14
【问题描述】:

我有以下问题。我在数据库中有一个会议表,包括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 代码,因为问题在于它:

我的树枝代码:

<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>

【问题讨论】:

    标签: php symfony pdf twig


    【解决方案1】:

    我会在 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>
    

    【讨论】:

    • 表的数量不固定,有时最多20个,有时5个,所以for循环退出了,除非我将参数传递给有多少个表。另一方面,我可以有例如 10 个表,但例如其中 2 个将用于其他目的,并且 for 循环不会通过考试。
    【解决方案2】:

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

    {% 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玩它

    希望有帮助

    【讨论】:

    • 现在一切正常,唯一的问题是它最后会生成一个空白页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2019-03-18
    • 1970-01-01
    • 2014-01-17
    • 2016-11-16
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多