Systemvoraussetzung
- Linux
- Windows
- PHP 3
- PHP 4
- PHP 5
Datei(en)
blaettern.php, statistik_pageviews.sql
Problem
Sie standen sicherlich schon öfter vor dem Problem, dass Sie sehr viele Informationen
auf einer Seite darstellen wollten und das Aussehen der angezeigten
Seite darunter gelitten hat. Schön wäre es doch, wenn die einzelnen Beiträge
einfach in kleinere Stücke aufgeteilt und auf mehreren Seiten dargestellt werden.
Gerade Suchmaschinen, Anbieterverzeichnisse, Gästebücher, Foren etc.
nutzen diese Methode.
Lösung
Das nachfolgende Beispiel erledigt genau diese Aufgabe und bringt Ordnung in
eine überfüllte Seite. Dabei können Sie genau einstellen, wie viele Datensätze
pro Seite angezeigt werden sollen. Zusätzlich besteht die Möglichkeit, entweder
eine Seite vor- und
zurückzublättern oder direkt zum Anfang oder zum Ende
zu springen.
Über der Seitennavigation steht jeweils auf jeder Seite die Menge der Seiten in
der Form (hier als Beispiel Seite 1 von 842):
Im untenstehenden ZIP-Archiv
finden Sie unter
dem Namen statistik_pageviews.sql eine Beispiel-Datenbank,
die Sie für dieses
Beispiel zum Testen nutzen können. Sie können diese Datei direkt mit
phpMyAdmin einlesen.
Wir werden Ihnen zuerst die Funktion navigationsLeiste() beschreiben
und danach den Programmcode für den Seitenaufbau.
function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables)
@param integer $SitesComplete
@param integer $seiteAktuell
@param string $extVariables
@return string
Die Funktion navigationsLeiste() erwartet als Parameter (30) zum einen
die Gesamtzahl aller zur Verfügung stehenden Seiten, die aktuelle Seite und die
anzuhängenden Variablen. Im ersten Schritt errechnen wir (33) die Anzeige für
die Seitennavigation, also wie viele Seiten um unsere aktuelle Seite angezeigt
werden sollen.
<< < 10 11 12 13 14 15 16 17 18 19 20 > >> |
Die globale Variable NAV_LEISTE, die wir bei den Konfigurationsparametern
(dazu später mehr) festgelegt haben, dient uns dabei als Grundlage für die
Berechnung. Wir dividieren die Variable (im Beispiel 11) durch 2, runden mit
floor() das Ergebnis ab und erhalten die Menge der jeweils anzuzeigenden
Verlinkungen pro Seite (gesehen von der aktuellen Seitenzahl in der Navigationsleiste).
Sie sollten daher für die globale Variable immer eine ungerade Zahl
nehmen, um die Optik der Navigationsleiste zu wahren.
Falls die aktuelle Seite größer als 1 (Eins) ist (37), müssen wir den Pfeil für
eine Seite zurück (39) und den Pfeil für die Verlinkung zur ersten Seite (zum
Anfang) (38) darstellen. Beide Verlinkungen speichern wir in unsere Variable,
die am Ende von der Funktion zurückgegeben wird. Im nächsten Schritt bauen
wir die Seitenzahlen für die direkte Seitenverlinkung (1 2 3 4 5 . . . ) auf (43).
Die FOR-Schleife
können wir nicht einfach nur durchlaufen, sondern müssen
sie anhand der aktuellen Seite berechnen (Start- und
Endwert). Anhand eines
Beispiels werden wir dies kurz erläutern:
|
$seiteAktuell = 9;
$NavCeil = 11 / 2; // Ergebnis ist 5 for($x = 95; $x<= 9+5; $x++) |
Falls die aktuelle Seite z. B. 3 ist, so wird die Berechnung (mit -5)
zwar durchgeführt,
aber bei der Ausgabe keine negative Zahl angezeigt – diese Überprüfung
(45) findet innerhalb der FOR-Schleife
statt. Weiterhin wird auch nicht die
aktuelle Seite innerhalb der Schleife verlinkt, sondern nur als Text dargestellt.
Zum Schluss der FOR-Schleife
müssen wir noch das Ende, also die maximale
Seitenzahl berücksichtigen. Falls wir nur 100 Seiten haben, die FOR-Schleife
wegen unserer Berechnung aber bis 103 läuft, wird der überschüssige Betrag
auch nicht angezeigt, da wir mit $SitesComplete die maximale Seitenzahl
bereits kennen und hier entgegenwirken können.
Nachdem wir die FOR-Schleife
durchlaufen haben, fehlt uns noch die Überprüfung,
ob wir den Pfeil für eine Seite vor und den Pfeil für „zum Ende“ anzeigen
müssen (56, 57). Durch die Variable SitesComplete können wir hier die Abfrage
starten und das Ergebnis auswerten (55).
Somit haben wir alle Elemente für die Darstellung zusammen und können jetzt
die gefüllte Variable an die aufrufende Stelle zurückgeben (60).
030:
031: 032: 033: 034: 035: 036: 037: 038: 039:
040: 041: 042: 043: 044: 045: 046: 047: 048: 049: 050: 051: 052: 053: 054: 055: 056:
057:
058: 059: 060: 061: 062:
| function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables){
// Die Menge der angezeigten Links für die Seiten werden errechnet $NavCeil = floor(NAV_LEISTE / 2); // Eine Seite zurück oder zum Anfang nur anzeigen, wenn mindestens eine Seite zurück // geblättert werden kann if($seiteAktuell > 1){ $string .= '<a href="?site=1'.$extVariables.'"><<</a> '; $string .= '<a href="?site='.($seiteAktuell-1).$extVariables.'">
<</a> ';
} // Baut die Seitennavigation aúf (1 2 3 4 5 6 ... n) for($x=$seiteAktuell-$NavCeil;$x<=$seiteAktuell+$NavCeil;$x++){ // Alle Seitenzahlen vor und nach der aktuellen Seite verlinken if(($x>0 && $x<$seiteAktuell) || ($x>$seiteAktuell && $x<=$SitesComplete)) $string .= '<a href="?site='.$x.$extVariables.'">'.$x.'</a> '; // Die Seitenzahl der aktuellen Seite nicht verlinken if($x==$seiteAktuell) $string .= $x . ' '; } // Eine Seite vor oder zum Ende nur anzeigen, wenn mindestens eine Seite weiter // geblättert werden kann if($seiteAktuell < $SitesComplete){ $string .= '<a href="?site='.($seiteAktuell+1).$extVariables.'">>
</a> '; $string .= '<a href="?site='.$SitesComplete.$extVariables.'">>>
</a> '; } return $string; }
|
Beispiel 5.2: blaettern.php
Für die Darstellung der Seitennavigation benötigen wir vorab einige Konfigurationsparameter.
Als Erstes müssen wir die Menge der anzuzeigenden
Datensätze pro Seite definieren (1). Sie sollten den Wert hierfür nicht zu groß
wählen, da die Seite dann eventuell wieder zu lang und somit unübersichtlich
wird. Ein Wert zwischen 10-15
hat sich im Allgemeinen sehr gut bewährt.
Der nächste Parameter (3) bestimmt die Menge der Seitenzahlen in der Navigationsleiste.
Hier sollten Sie unbedingt eine ungerade Zahl nehmen, da die
aktuelle Seite jeweils in der Mitte, also zentriert steht.
Hier in unserem Beispiel haben wir als Wert die 11 genommen. Somit ergibt
sich auf jeder Seite, ausgehend von der aktuellen Seitenzahl, eine Darstellung
von jeweils 5 Elementen um diese herum. Die aktuelle Seite muss also bei dem
Wert mitgezählt werden (5 + 1 + 5 = 11).
Ergebnisseite 15 von 842 << < 10 11 12 13 14 15 16 17 18 19 20 > >> |
In unserem Beispiel haben wir die Datensätze aus einer Datenbank geholt,
daher müssen Sie die Zugangsdaten ergänzen. Sie benötigen den Hostnamen
(5), den Datenbanknamen (6), den Benutzernamen (7) sowie das Passwort (8).
Mit diesen Parametern wird die Verbindung zum MySQL-Server
hergestellt (10)
und die Datenbank ausgewählt (11). Sollte es dabei zu einem Fehler kommen,
wird die jeweilige Fehlermeldung am Browser ausgegeben.
001: 002: 003: 004: 005: 006: 007: 008: 009: 010:
011:
|
define("MAX_EINTRAEGE",10);
define("NAV_LEISTE",11);
define("DB_HOST","hostname"); define("DB_NAME","db-name"); define("DB_USER","User"); define("DB_PASS","Passwort");
$db = @MYSQL_CONNECT(DB_HOST,DB_USER,DB_PASS) or
die("Datenbank-Connect fehlgeschlagen"); $db_check = @MYSQL_SELECT_DB(DB_NAME) or
die("Datenbank momentan nicht erreichbar");
|
Sobald jemand über unsere Navigationsleiste eine Seite auswählt, wird die Seite
neu geladen, und wir erhalten die angeforderte Seite in einer Variablen (65).
Wir erzwingen sogleich eine Konvertierung (65) dieser Variablen in ein Integer,
da wir zum einen übermittelten Variablen nicht einfach trauen sollten und zum
anderen für unsere Datenbankabfrage nur Integer-Werte
gebrauchen können.
Wurde unsere Seite zum erstem Mal aufgerufen oder die Konvertierung lieferte
den Wert 0 (Null), setzen wir den Startwert (69) auf die erste Seite.
Wir haben bereits die Variable für die maximale Anzahl der anzuzeigenden
Datensätze (MAX_EINTRAEGE) fest in unserer Datei definiert. Was uns jetzt
noch fehlt, ist der Startwert (72) für unsere MySQL-Abfrage.
Wir limitieren bei
der Datenbankabfrage die Datensätze und sagen, dass ab der x-Stelle
($start)
insgesamt MAX_EINTRAEGE ausgegeben werden sollen. Um an den Startwert zu
kommen, müssen wir nur die aktuelle Seitenzahl mit den maximalen Einträgen
multiplizieren und vom Ergebnis die maximalen Einträge abziehen.
Beispiel: Die aktuelle Seite ist 8, und die maximalen Einträge sind 10.
Somit wird unsere Datenbankabfrage (75) genau zehn Datensätze, beginnend
von der Position 70 aus, liefern. Wir benötigen noch zusätzlich die Gesamtmenge
aller Datensätze, die angezeigt werden können. Da wir die Datenbankabfrage
(75) allerdings limitiert haben, würde hier nicht die gesuchte Menge geliefert
werden, sondern in unserem Beispiel nur 10.
Daher stellen wir eine erneute Anfrage (78) an die Datenbank: Wir lassen uns
nur die Datensätze zählen und als einzigen Wert zurückgeben (79). Diesen
Wert benötigen wir für die Anzeige der kompletten Seitenzahlen (z. B. Seite 1
von 126). Die eigentliche Ausgabe der einzelnen Datensätze können Sie sich
dann wie gewohnt in einer WHILE-Schleife
(82-85)
ausgeben lassen.
064:
065: 066: 067: 068: 069: 070: 071: 072: 073: 074: 075:
076: 077: 078: 079: 080: 081: 082: 083: 084: 085:
| // Die aktuell angeforderte Seite
$seiteAktuell = $_GET['site'] + 0;
// Falls noch keine Seitenzahl übergeben wurde, den Wert auf die erste Seite setzen if(empty($seiteAktuell)) $seiteAktuell = 1; // Berechnet die nächsten Eintraege aus MAX_EINTRAEGE $start = $seiteAktuell * MAX_EINTRAEGE - MAX_EINTRAEGE;
// Holt die aktuellen Datensätze aus - define("MAX_EINTRAEGE",10) $result = @mysql_query("SELECT * FROM statistik_pageviews LIMIT
$start, ".MAX_EINTRAEGE);
// Ermittelt die Gesamtzahl der Datensätze $resultGesamt = @mysql_query("SELECT COUNT(*) AS menge FROM statistik_pageviews"); $Eintraege = @mysql_result($resultGesamt,0,"menge");
// Ausgabe der Seite while($row = @mysql_fetch_row($result)){ // Hier findet die Ausgabe des Seiteninhalts statt $contentWeb .= $row[0] . ' -- ' . $row[1] . '<br>'; }
|
Beispiel 5.3: blaettern.php
Wir hatten in der letzten Datenbankabfrage die Gesamtmenge aller Datensätze
ermittelt. Diesen Wert benötigen wir, um die Anzahl der Seiten zu ermitteln
(3). Wir dividieren daher die Gesamtzahl der Datensätze durch die Anzahl der
Datensätze pro Seite.
Beispiel: 112 Datensätze, 10 Datensätze pro Seite
Wie Sie sehen, ist der Wert für die Seiten in diesem Fall eine Fließkommazahl.
Da wir alle Datensätze berücksichtigen wollen, müssen wir das Ergebnis mit
ceil() aufrunden und erhalten dann als Wert 11 Seiten. Mit dieser Angabe
und der übermittelten Seitenzahl können wir den Texthinweis „Ergebnisseite
X von Y“ (93) ausgeben. X ist in diesem Fall die aktuelle Seite und Y die
Gesamtmenge aller Seiten.
Falls Sie zusätzliche Parameter mit übergeben müssen (z. B. bei einer Suchanfrage
das Suchwort), können Sie diese in eine Variable (97) speichern. Diese
Variablen werden dann an die einzelnen Verlinkungen gehängt. Bitte vergessen
Sie hier nicht das führende kaufmännische UND (&).
Im letzten Schritt müssen wir noch die einzelnen Verlinkungen mit der Funktion
navigationsLeiste() (100) erstellen und erhalten als Rückgabewert den
kompletten HTML-Code
für die Seitenanzeige. Diese Variable (104) muss dann
lediglich ausgegeben werden.
087: 088: 089: 090: 091: 092: 093: 094: 095: 096: 097: 098: 099: 100: 101: 102: 103: 104:
| $contentWeb .= '<div align="center">';
// Errechnet die kompletten Seiten $SitesComplete = ceil($Eintraege / MAX_EINTRAEGE);
// Ergebnisseite x von y anzeigen $contentWeb .= 'Ergebnisseite ' . $seiteAktuell . ' von ' . $SitesComplete . '<br>';
// Weitere Variablen den Seitenzahlem mit übergeben in Form: // &var1=wert1&var2=wert2 $extVariables = '&var1=wert1&var2=wert2';
// Navigation mit in Ausgabe einfügen $contentWeb .= navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables);
$contentWeb .= '</div>';
echo $contentWeb;
|
Beispiel 5.4: blaettern.php
In unserer Beispieldatenbank, die Sie in dem beiliegenden ZIP-Archiv
finden, befanden
sich insgesamt 8420 Datensätze. Da wir pro Seite nur zehn Datensätze
angezeigt haben, ergab sich eine Gesamtmenge aller Seiten von 842.
Ausgabe
141 -- /
search_selfphp.php
142 -- /
de/extras/download.php
143 -- /
search_selfphp.php
144 -- /
funktionsreferenz/php_informationen/get_extension_funcs.php
145 -- /
de/extras/download.php
146 -- /
search_selfphp.php
147 -- /
funktionsreferenz/dateisystem_funktionen/fwrite.php
148 -- /
search_selfphp.php
149 -- /
search_selfphp.php
150 -- /
search_selfphp.php
Ergebnisseite 15 von 842
<< < 10 11 12 13 14 15 16 17 18 19 20 > >> |
Wie Sie an der Ausgabe sehr schön sehen, befindet sich unsere Seitennavigation
am Seitenende und liefert uns damit alle notwendigen Verlinkungen für unsere
Darstellung der einzelnen Seiten. Sie werden im nächsten Beispiel sehen, wie
diese Ausgabe noch verändert werden kann.
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
|