Rolf b: HTML2PDF - PHP Schleife für neue Seite unterbrechen

Beitrag lesen

Hallo Sophie,

zwei Dinge sind da anzumerken:

(1) Ich hatte mit $ersteSeite als booleschen Wert vorgestellt, den du ANALOG zu $len füllen solltest. Nicht identisch wie $len, und zu $i addieren musst Du es auch nicht. Es geht ausschließlich darum, dass write_page() beim ersten Durchlauf für $ersteSeite den Wert true erhält, und für die Folgedurchläufe den Wert false.

(2) Du bist auf die Schachtelung der Funktionsaufrufe hineingefallen. write_page hatte in meinem ersten Vorschlag zwei Parameter: Die Startzeilennummer und die Tabelle mit den auszugebenden Zeilen. Den zweiten Parameter habe ich mittels array_slice bestimmt.

Du hast $ersteSeite jetzt als vierten Parameter an array_slice übergeben, das versteht diese Funktion aber nicht (bzw. sie versteht da was, aber nicht das, was Du willst. Siehst Du in der PHP Doku...). Ich verteile den Aufruf mal auf mehrere Zeilen, dann siehst Du den Unterschied:

   // Meine Ursprungsfassung:
   write_page(
        $i+1,
        array_slice($test_pdf_ausgabe, $i, $len)
   );

   // Deine erweiterte Fassung:
   write_page(
        $i+1,
        array_slice($test_pdf_ausgabe, $i, $len, $ersteSeite)
   );

   // Was Du aber brauchst:
   write_page(
        $i+1,
        array_slice($test_pdf_ausgabe, $i, $len),
        $ersteSeite
   );

Du musst da genau auf die Klammern achten, damit der Parameter an die richtige Funktion geht.

Und: Wenn Du es so machst, dass $ersteSeite hinten dran hängt, musst Du natürlich auch die Definition von write_page entsprechend machen. Mein Vorschlag war, $ersteSeite als ersten Parameter zu übergeben. Du wolltest ihn lieber hinten haben - ist ok - dann musst Du für die Funktion schreiben:

function write_page($zeilennr, $zeilen, $ersteSeite) {
...
}

weil Parameter ja per Position zugeordnet werden.

Es muss also so aussehen:

<?php 
  $test_pdf_ausgabe = test_pdf($mysqli);
  $zeilen = count($test_pdf_ausgabe);
  $i = 0;
  $len = 5;
  $ersteSeite = true;

  while ($i < $zeilen) {
     write_page($i+1, array_slice($test_pdf_ausgabe, $i, $len), $ersteSeite);
     $i += $len;
     $len = 15;
     $ersteSeite = false;
  }
?>

Man kann das verkürzen, dann wird es aber etwas abstrakter. $len==5 ist ein boolescher Ausdruck. Er vergleicht $len mit 5 und liefert true oder false zurück. Also eigentlich genau das, was Du für $ersteSeite brauchst. Das folgende Stück Code tut das Gleiche wie das vorige, braucht aber keine Variable für $ersteSeite. Der Wert wird mit einem Ausdruck bestimmt:

<?php 
  $test_pdf_ausgabe = test_pdf($mysqli);
  $zeilen = count($test_pdf_ausgabe);
  $i = 0;
  $len = 5;

  while ($i < $zeilen) {
     write_page($i+1, array_slice($test_pdf_ausgabe, $i, $len), $len==5);
     $i += $len;
     $ersteSeite = false;
  }
?>

Nimm die Variante, die Du verstehst.

Rolf