Inhalte auf mehrere Seiten aufteilen - Ausgabe der Datensätze
Nun wird an diesem Punkt erklärt, wie dann passend zur aktuell aufgerufenen Seite die Datensätze ausgelesen werden. Diese Funktion fungiert eigentlich nur als Filter, der zwischen meine MySQL Klasse und der Ausgabe geschaltet wird.
| 1 2 3 4 5 6 7 8 | // Ausgabe des Inhals function reg_anzeige($aktivepage, $ipp, $query) { // Query ausfuehren $this->mysqlConnect(); $query = $this->mysqlQuery($query); $this->mysqlDisconnect(); |
Bei Aufruf der Funktion müssen wie beim Register eineige Werte übergeben werden. Und zwar auf welcher Seite man sich gerade befindet, wie viele Einträge eine Seite haben darf und das SQL Statement. Danach wird ganz normal meine MySQL Klasse aufgerufen und das Statement abgesendet.
| 1 2 3 4 5 6 | // Werte Kopieren, und Datensaetze loeschen $return = $query; $return['ds'] = array(); $rows = $query['numRows']; // Anzahl der Seiten ermitteln und evtl Fehler vorbeugen $seiten = ceil($rows/$ipp); |
Nun wird die Rückgabe, die beim Absenden des Statements entstanden ist geklont, und der Bereich wo die Datensätze drin stehen gelöscht. Das ist notwendig, weil ja nicht alle Datensätze zurück gegeben werden sollen. Da aber in dem Array nicht nur Datensätze, sondern auch andere Informationen sind, wird das Array einfach geklont. So müssen nur die Datensätze neu in das Array geschrieben werden. Der Klon wird dann am ende zurück gegeben.
Dann wird noch wie in dem register auch ermittelt, wie viele Seiten benötigt werden, um alle Einträge darstellen zu können.
| 1 2 3 4 5 6 | if(strlen($aktivepage)<1 || $aktivepage<1) $aktivepage=1; if($aktivepage>$seiten) $aktivepage=$seiten; // Anfangsdatensatz ermitteln $anfang = $ipp*$aktivepage-$ipp; |
Nun kommen wir wie bei dem register auch wieder zur "Idioten-Prüfung". Dort wird geprüft, ob die aufzurufende Seite auch im möglichen Bereich ist. Also das zB nicht die Seite -5 (minus fünf) oder die seite 500 (obwohl es nur fünf Seiten gibt) aufgerufen werden kann.
Dann wird noch errechnet, bei welchem Datensatz das einlesen in das Array begonnen werden muss.
| 1 2 3 4 | // Reichen die Datensaetze fuer eine komplette Seite? if($anfang+$ipp<$rows) $ende = $anfang+$ipp; else $ende = $rows; |
Nun wird noch geprüft, ob die Datensätze die eingelesen werden sollen, nicht die Grenze sprengen. Also das man nicht bei Item 50 von 55 ist, und versucht 60 Items in das Array zu schreiben. So entstehen leere Array Felder. Diese vermurksen dann die ausgabe.
| 1 2 3 4 5 6 7 8 | $ii=0; for($i=$anfang, $ii=0; $i<$ende; $i , $ii ) { for($j=0; $j<$query['numFields']; $j ) { $return['ds'][$query['fn'][$j]][$ii] = $query['ds'][$query['fn'][$j]][$i]; } } |
Kommen wir nun zum einlesen der Datensätze in das geklonte Array. Als erstes wird ein Hilfszähler erstellt, der im geklonten Array eingesetzt wird. Das ist notwendig, da ja mittem im Datenbereich mit dem einlesen angefangen wird. Wenn nun der selbe Zähler zum einlesen wie beim auslesen im alten Array genutzt wird, entstehen wieder leere Felder, die Fehldarstellungen beim Verarbeiten der Datensätze führen.
Jetzt werden mit zwei einfachen for-Schleifen die Datensätze eingelesen. Die besonderheit hier: Es werden zwei Zähler in der ersten Schleife nach oben gezählt. Der Zähler $i ist für das Array wo ausgelesen wird, der Zeiger $ii ist der Hilfszähler zum einlesen.
Bevor jemand Fragt
Ich mache das nicht mit der MySQL Anweisung LIMIT, weil ja ein schon fertiges Statement an die Methode übergeben wird. Und je nach dem was in diesem Statement steht, muss das LIMIT ja an eine andere Stelle. Das war mit zu kompliziert, das mit Stringfunktionen hinzufriemeln. Außerdem bei den paar Datensätzen bringt das auch nicht sooo den Nachteil. Falls jemand ne Idee hat wie man es anders machen kann, kann der jenige sich gerne melden.
| 1 2 3 4 5 6 | // Anzahl der Datensaetze korrigieren if($query['numRows']>0) $return['numRows'] = $ii; else $return['numRows'] = 0; return $return; } |
Nun wird noch zu guter letzt die Anzahl der Datensätze neu in das Array geschrieben, da dieser Wert ja nicht mehr stimmt.
Zu guter letzt wird noch das neue Array zurück gegeben. Fertig.


