Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]wkhtmltopdf oraz twig
Forum PHP.pl > Forum > PHP > Frameworki
PawelC
Witam,
Mam następujący problem. Posiadam w bazie danych tabele meeting, w niej id, guest,host, start_time,end_time oraz table_numer. Do generowania używam wkhtmltopdf oraz symfony 3, samo generowanie pdf to żaden problem, niestety Twig nie chce ze mną współpracować. Chciałbym zrobić tak, aby najpierw wygenerowało spotkania dla stolika 1, później dla 2 itd. Cały proces powinien wyglądać tak:
- Początek generowania pdf dla stolika 1
- Zmienia się stolik z 1 na 2, następuje page break i zaczyna generować nową stronę ze spotkaniami dla stolika 2 itd

Problem polega na tym, że generuje mi pdf dla stolika 1, po czym dorzuca 1 spotkanie dla stolika 2. Zaczyna generować pdf dla stolika 2, na koniec wrzuca mi 1 spotkanie ze stolika 3. Tak wygenerowany pdf wygląda tak: http://cyrklaf.eu/table.pdf
Nie mam pojęcia gdzie jest błąd, że zawsze pobiera jedno spotkanie z innego stolika. Mój kod Twig bo w nim leży problem:
  1. <!doctype html>
  2.  
  3. <html lang="pl">
  4. <meta charset="utf-8">
  5. body {
  6. background: #FFF;
  7. }
  8.  
  9. .page {
  10. page-break-after: always;
  11. }
  12. </style>
  13. </head>
  14. {% set last_table = 1 %}
  15. {% for meeting in meetings %}
  16. <div class="page">
  17. {{ meeting.guest }} {{ meeting.host }} stolik obecny {{ meeting.tableNumber }} stolik poprzedni {{ last_table }}
  18.  
  19. {% if meeting.tableNumber != last_table %} // Jeżeli obecny stolik jest inny od ostatniego powinien zakończyć generowanie i rozpocząc dla kolejnego stolika
  20. {% set last_table = meeting.tableNumber %}
  21. </div>
  22. {% endif %}
  23.  
  24. {% endfor %}
  25. </body>
  26. </html>

Chciałbym aby po skończeniu generowania spotkań dla stolika 1, zaczął generować kolejną stronę ale dla stolika 2 itd
Neutral
Musisz napisać w skrypcie, aby pętla jechała od iteracji drugiej (stolika drugiego), a nie od nowa od pierwszego (pierwszej iteracji).

Musisz chyba dodać warunek w tym for, przykład z doc.:

Kod
{% for user in users if user.active %}
// ...
{% endfor %}


Czy nie powinno być:
Kod
{% for meetings in meeting %}

?

Pokaż jakie masz wartości w tym meetings, meeting, itd.. (pokaż tylko 2-3 początkowe wartości).

A może po prostu tak napisz:

PSEUDO-CODE:
Kod
{% set last_table++ %}

Zinkrementuj zmienną, żeby liczyła od drugiego stolika, a nie od pierwszego.

Gdzie w poniższym kodzie masz break'a, czy coś:
Kod
{% if meeting.tableNumber != last_table %}

?
PawelC
Jak zrobię tak jak napisałeś tzn
  1. for meetings in meeting
to dostaję Variable "meetings" does not exist.

Zrzut bazy danych z tą tabelą: cyrklaf.eu/Dump20180613.sql
Baza wygląda tak:

Pyton_000
Kod
<div class="page">
{% for meeting in meetings %}
    {{ meeting.guest }} {{ meeting.host }} stolik obecny {{ meeting.tableNumber }} stolik poprzedni {{ last_table }}

    {% if meeting.tableNumber != last_table %} // Jeżeli obecny stolik jest inny od ostatniego powinien zakończyć generowanie i rozpocząc dla kolejnego stolika
        {% set last_table = meeting.tableNumber %}
        </div>
        <div class="page">
    {% endif %}

{% endfor %}
</div>

l
Teraz musisz tylko sobie dodać warunek żeby nie generowało Ci ostatniej pustej strony.
PawelC
Niestety efekt jest ten sam cyrklaf.eu/table2.pdf sad.gif
Pyton_000
Wypluj to co twig generuje do HTML i pokaż
PawelC
  1. """
  2. <!doctype html>\n
  3. \n
  4. <html lang="pl">\n
  5. <head>\n
  6. <meta charset="utf-8">\n
  7. <style>\n
  8. body {\n
  9. background: #FFF;\n
  10. }\n
  11. \n
  12. .page {\n
  13. page-break-after: always;\n
  14. }\n
  15. </style>\n
  16. </head>\n
  17. <body>\n
  18. <div class="page">\n
  19. ipsum lorem stolik obecny 1 stolik poprzedni 1\n
  20. <br/>\n
  21. \n
  22. dolor sit stolik obecny 1 stolik poprzedni 1\n
  23. <br/>\n
  24. \n
  25. lorem puszek stolik obecny 1 stolik poprzedni 1\n
  26. <br/>\n
  27. \n
  28. laura karolina stolik obecny 1 stolik poprzedni 1\n
  29. <br/>\n
  30. \n
  31. sit laura stolik obecny 2 stolik poprzedni 1\n
  32. <br/>\n
  33. \n
  34. \n
  35. </div>\n
  36. <div class="page">\n
  37. dolor reverse stolik obecny 2 stolik poprzedni 2\n
  38. <br/>\n
  39. \n
  40. reverse pawel stolik obecny 2 stolik poprzedni 2\n
  41. <br/>\n
  42. \n
  43. puszek lorem stolik obecny 2 stolik poprzedni 2\n
  44. <br/>\n
  45. \n
  46. pawel pysia stolik obecny 3 stolik poprzedni 2\n
  47. <br/>\n
  48. \n
  49. \n
  50. </div>\n
  51. <div class="page">\n
  52. pysia laura stolik obecny 3 stolik poprzedni 3\n
  53. <br/>\n
  54. \n
  55. </div>\n
  56. </body>\n
  57. </html>
  58. """
Pyton_000
No to już powinieneś widzieć rozwiązanie. Najpierw wyświetlasz a potem wstawiasz separator strony wink.gif
PawelC
Przyznam szczerze,  że nie widzę rozwiązania ;/ długo się już z tym bawię i nadal nic
Pyton_000
No przecież ci napisałem gdzie masz błąd.
LowiczakPL
Ja używam w Symfony i w Laravelu TCPDF-a zainstaluj sobie paczkę i będziesz miał po problemie.

TCPDF pozwala generować PDF-y z kodu HTMLa, więc masz pole do popisu.

TCPDF HTML

XHTML + CSS

Git TCPDF

Pyton_000
@LowiczakPL naucz się czytać w końcu i albo odpowiadaj na pytanie które zostało zadane albo nie odpowiadaj wcale bo twoja odpowiedź NIC nie wniosła do tematu. BA nawet nie rozwiąże problemu bo nie jest on związany z programem którego używa a z KODEM HTML.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.