У меня следующая проблема. У меня есть таблица встреч в базе данных, включая id, guest, host, start_time, end_time и table_number. Я использую wkhtmltopdf и symfony 3 для генерации, простая генерация pdf не проблема, к сожалению, Twig не хочет сотрудничать со мной. Я хотел бы сделать это сначала для создания встреч для таблицы 1, затем для 2 и т. д. Весь процесс должен выглядеть так:
Проблема в том, что он генерирует мне pdf-файл для таблицы 1, затем добавляет одно собрание для таблицы 2. Он начинает генерировать pdf-файл для таблицы 2, в конце выдает мне 1 встречу из таблицы 3. Сгенерированный 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>






Я бы написал это так в 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>
Вы должны обрабатывать разрыв таблицы следующим образом:
{% 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 %}
Вы можете поиграть с ним в эта рабочая рабочий пример
Надеюсь на эту помощь
теперь все работает, проблема только в том, что в конце генерируется пустая страница.
Количество таблиц не фиксировано, иногда оно может быть максимум 20, в другой раз 5, поэтому цикл for выпадает, если я не передам в параметрах количество таблиц. С другой стороны, у меня может быть, например, 10 таблиц, но, например, 2 из них будут для других целей, и цикл for не пройдет экзамен.