PHP – Seitenweise Anzeige von Datensätzen (Blätterfunktion)
Oft möchte man aus einer Datenmenge nicht alle Datensätze auf einer Seite ausgeben, z.B. in einem Gästebuch, einem Forum, einer Bildergalerie usw. Hier hilft die im Artikel vorgestellte Blätterfunktion.
Die Routine zur Seitenweisen Ausgabe und der Aufruf im Script
Hier zunächst die komplette Routine
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # // Seitennavigation // $navigationslinks = pager($zeilen, $seite, $daten_per_site, $url, $show_pageinfo); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # function pager($zeilen, $seite, $pro_seite, $url, $show_pageinfo = 1) { $max_ausgabe = $pro_seite; $gesamtseiten = floor(($zeilen - 1) / $pro_seite+1); $aktuelle_seite = $seite ? $seite : 1; $linkanzahlausgabe = 2; $letzte = $linkanzahlausgabe + $aktuelle_seite; if ($letzte > $gesamtseiten) { $letzte = $gesamtseiten; } $startback = $aktuelle_seite - $linkanzahlausgabe; if ($startback < 1) { $startback = 1; } $navigationslinks = " "; if ($gesamtseiten != 1 && $zeilen) { $seitenlink = ""; if ($startback > 1) { $prevbl = $aktuelle_seite - 1; $seitenlink .= "<td class=\"pl\"><a href=\"$url=1\" title=\"Erste Seite aufrufen\">« «</a></td><td class=\"pl\"><a href=\"$url=$prevbl\" title=\"Eine Seite zurück\">«</a></td>"; } for ($i = $startback; $i <= $letzte; $i++) { if ($aktuelle_seite == "$i") { $seitenlink .= "<td class=\"aktuelleseite\">$i</td>"; } else { $seitenlink .= "<td class=\"pl\"><a href=\"$url=$i\">$i</a></td>"; } } if ($letzte < $gesamtseiten) { $nextbl = $aktuelle_seite + 1; $seitenlink .= "<td class=\"pl\"><a href=\"$url=$nextbl\" title=\"Eine Seite weiter\">»</a></td><td class=\"pl\"><a href=\"$url=$gesamtseiten\" title=\"Letzte Seite aufrufen\">» »</a></td>"; } if ($show_pageinfo == 1) { $pageinfo = "<td class=\"seiteninfo\">Seite: $aktuelle_seite von $gesamtseiten</td>"; } else { $pageinfo = ''; } $navigationslinks = "<table cellspacing=\"1\" cellpadding=\"0\" border=\"0\" class=\"sitenav\"><tr>$pageinfo $seitenlink</tr></table>"; } return $navigationslinks; }
Um die Ausgabe entsprechend mit CSS zu gestalten braucht es diesen CSS Code
/* - - - - - - - - - - - - - - - - - - - - */ /* SEITENNAVIGATION */ /* - - - - - - - - - - - - - - - - - - - - */ .seiteninfo, .aktuelleseite, .pl { font-family: Verdana, Arial; font-size: 11px; text-align: center; color: #000000; border: 1px solid #97a8b9; border-collapse: collapse; } .seiteninfo { background-color: #dce0e9; font-weight: bold; padding: 1px 3px 1px 3px; } .aktuelleseite { background-color: #ffffff; font-weight: bold; padding: 2px 6px 2px 6px; } .pl a { display: block; float: left; background-color: #e4e9ed; color: #990000; text-decoration: none; font-weight: bold; padding: 2px 6px 2px 6px; white-space: nowrap; } .pl a:hover { color: #000000; text-decoration: none; font-weight: bold; background-color: #d3dce4; }
Die Verwendung im Script selbst
Für die Seitenweise Anzeige von Datensätzen braucht es diese Parameter
- Anzahl an Datensätzen pro Seite, festlegbar durch Setupwert
- Gesamtanzahl an vorhandenen Datensätzen
- Wo befindet man sich in der Datenmenge
Dieser Code ermittelt/übernimmt die aktuelle Seitenanzahl ($los), $anz legt den Limit Parameter für die Datenbankabfrage fest.
if(isset($_GET['los'])) { $los = preg_replace ("/[^0-9]/", '', $_GET['los']); } // Startzahl if(!isset($los) || $los == '') { $los = 1; } $anz = ($los-1) * $scriptconf[DATENPROSEITE];
Nun wird mit einer für die Daten geeigneten DB-Abfrage die Anzahl der Gesamtdatensätze ermittelt und in den Datenabfrage Query diese Limit Klausel eingefügt
SELECT FROM tabelle .... LIMIT $anz, $scriptconf[DATENPROSEITE]
Als nächstes wird mittels des Aufrufes der Blätterfunktion die Seitennavigation abgerufen:
$navigationslinks = pager($gesamtdatensaetze, $los, $scriptconf[DATENPROSEITE], "script.php?los", 1);
Die eigentlichen Datensätze werden dann in einer While Schleife ausgelesen…
while($data = mysql_fetch_array($result)){ $daten .= "Die auszugebenden MySQL Ergebnisse"; }
Nun braucht nur noch die Ausgabe erfolgen, die Werte können dabei z.B. an eine Templateroutine gesendet werden, oder einfach per echo ausgegeben werden.
// Navigationslinks oben echo $navigationslinks; // Ausgabedaten echo $daten; // Navigationslinks unten echo $navigationslinks;
Wie die Blätterroutine funktioniert kann man sich hier ansehen
Keine Kommentare vorhanden