Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Dynamische Seitennavigation – Seite 1 von n


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):

Ergebnisseite 11 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.

11 / 2 = 5,5 = 5

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>&nbsp;&nbsp;';
        
$string .= '<a href="?site='.($seiteAktuell-1).$extVariables.'">
            <</a>&nbsp;&nbsp;'
;
    }
    
    
// 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>&& $x<$seiteAktuell) || ($x>$seiteAktuell && $x<=$SitesComplete))
            
$string .= '<a href="?site='.$x.$extVariables.'">'.$x.'</a>&nbsp;&nbsp;';
        
        
// Die Seitenzahl der aktuellen Seite nicht verlinken
        
if($x==$seiteAktuell)
            
$string .= $x '&nbsp;&nbsp;';
    }
    
    
// 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>&nbsp;&nbsp;'
;
        
$string .= '<a href="?site='.$SitesComplete.$extVariables.'">>>
          </a>&nbsp;&nbsp;'
;
    }
    
    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.

8 * 10 -10 = 70

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

112 / 10 = 11,2

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.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner LeaseWeb Germany GmbH
Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


DM Solutions
Microsoft Deutschland GmbH
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2013 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt