Loading...   Upload Image

Blaetterfunktion (Seitennavigation)Tutorials » PHP/MySQL Tutorials » Blaetterfunktion (Seitennavigation)

Verfasst von Alice am 04.05.2009 - wurde schon 35479 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
21x bewertet
Schwierigkeit: mittel
Kommentare: [ 15 ]

Tag - Schlagwort PHP Tag - Schlagwort Navigation Tag - Schlagwort Blaetterfunktion Tag - Schlagwort Pagination

Blaetterfunktion (Seitennavigation) - Tutorial

Ich wurde gebeten die Seitennavigation(Blaetterfunktion), die in vielen meiner Scripte zum Einsatz kommt, doch bitte genauer zu erklaeren.
Nun diesem Wunsch moecht ich heute gerne nachkommen.

Wie Schauts aus?




Die Blaetterfunktion ist immer nach folgendem Schema aufgebaut


- DB Abfrage => erst mal die Anzahl aller Datensaetze feststellen
- Festlegen wie viele Datensaetze pro Seite angezeigt werden sollen
- Festlegen wie viele Links in der Navigation spaeter angezeigt werden sollen
- Startwert fuer die spaetere DB Abfrage definieren
- Dann wird ggf. die aktuelle Seite korrekgiert, damit nicht bei 0 angefangen wird zu Zaehlen
- Array bilden, in dass dann die Links der Seitennavigation gesteckt werden || $links = array();
- Link definieren => Zur Erste Seite springen
- Link definieren => eine Seite zurueck blaettern
- einzelne Seitenlinks bilden
- Link definieren => eine Seite vorwaerts blaettern
- Link definieren => Zur letzen Seite springen
- Zusammenfuegen der einzelnen Links zu einem String || implode(" ", $links);
- erneute DB Abfrage => mit LIMIT $start,$datensaetze_pro_seite, damit nur die gewuenschte Anzahl jeweils ausgegeben wird

Beispiel


Nehmen wir einmal an unsere Tabelle traegt die Bezeichnung user und ist wie folgt aufgebaut


Damit nun alle User ausgelesen werden und das Ganze dann auf mehrere Seite verteilt, mit Blaetterfunktion dargestellt wird, muesste der Code wie folgt aussehen:
<?php 

// Datenbankverbindung 
//--------------------------------------------------- 
$host = "localhost";     // Adresse des Datenbankservers, meist localhost 
$user = "";             // Ihr MySQL Benutzername 
$pass = "";             // Ihr MySQL Passwort 
$dbase = "";             // Name der Datenbank 

$connection = mysql_connect("$host" , "$user" , "$pass")  
              OR die ("Keine Verbindung zu der Datenbank moeglich."); 
$db = mysql_select_db($dbase , $connection)  
              OR die ("Auswahl der Datenbank nicht moeglich.");  
//---------------------------------------------------  

$pfad = $_SERVER['PHP_SELF'];    // aktuellen Dateipfad ermitteln, wichtig fuer die Links der Seitennavigation

$query = mysql_query("SELECT id FROM user"); // DB Abfragee

// ------------------------------------------------------------------------

$datensaetze_pro_seite = "10";      // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen
$p = "3";                                // Anzahl der Links die in der Seitenavigation ausgegeben werden

$total = mysql_num_rows($query);                      // liefert die Anzahl der Datensaetze der Abfrage
$seiten = ceil($total / $datensaetze_pro_seite);     // Berechnet die Seitenanzahl insgesamt

// ------------------------------------------------------------------------

if(empty($_GET['go'])){ // korrigieren der aktuellen Seite

    $go = 1;             // Sofern $go nicht uebergeben wurde

}elseif($_GET['go'] <= 0 || $_GET['go'] > $seiten){

    $go = 1;         // Variable definieren

}else{ // Wenn Obiges nicht zutraf

    $go = mysql_real_escape_string($_GET['go']);     // Variable definieren
}

$links = array(); // Linkkette bilden

// Seite die vor der aktuellen Seite kommt definieren
if(($go - $p) < 1){ $davor = $go - 1;  }else { $davor = $p; }            

// Seite die nach der aktuellen Seite kommt definieren
if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; }   
       
$off = ($go - $davor); // Variable definieren   
                
if ($go- $davor > 1){ // Link definieren => Zur Erste Seite springen         
    $first = 1;
       $links[] = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";      
}      

if($go != 1){ // Link definieren => eine Seite zurueck blaettern          
    $prev = $go-1;
    $links[] = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";     
}   
       
       
for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen

  if ($i != $go){  // Link definieren            
  
        $links[] = "<a href=\"$pfad?go=$i\">$i</a>\n";
        
  }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich             
        
        $links[] = "<span class=\"current\">[ $i ]</span>\n";  
        
  }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich             
  
        $links[] = "<span class=\"current\">[ $i ]</span>\n";
        
  } // close if $i      
}                

if($go != $seiten){ // Link definieren => eine Seite weiter blaettern       
    $next = $go+1;
    $links[] = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n";
}      
    
if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen   
    $last = $seiten; 
    $links[] = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n";
}      

$start = ($go-1) * $datensaetze_pro_seite;             // Berechne den Startwert fuer die DB


$link_string = implode(" ", $links); // Zusammenfuegen der einzelnen Links zu einem String

$abfrage = mysql_query("SELECT ID, Name, Email, DATE_FORMAT(Datum, '%d.%m.%Y') AS datum FROM user LIMIT $start,$datensaetze_pro_seite ");

// Daten ausgeben
while($row = mysql_fetch_object($abfrage)){
    
    echo "<p>".$row->ID." - "$.row->Name."<br />\n";
    echo "Email: ".$row->Email."<br /> \n";
    echo "Datum: ".$row->datum."\n </p>";

} // close while

// -------------------------------------- Seitennavigation ausgeben ----------------------------
 echo "<div id=\"navigation\">\n";

 echo "<span class=\"pages\">Seite ".$go." von ".$seiten."</span>\n";

 echo $link_string; // Ausgabe der Seitennavigation
    
 echo "</div> \n";
// -------------------------------------- Seitennavigation ende --------------------------------
?>

Damit die Seitennavigation dann auch so dargestellt wird wie oben in der Grafik gezeigt,
ist noch etwas CSS von Noeten ...
#navigation a {
	border: 1px solid #E0E0E0;
	margin: 0 1px;
	padding: 4px 7px;
	color: #444; 
	font-weight: bold;
	text-decoration: none;
}

#navigation a:visited {
	color: #507DB4; 
	font-weight: normal;
	text-decoration: none;
}

#navigation a:hover, #navigation a:active {
	border: 1px solid #507DB4;
	background: #F8F8F8;
	color: #737373; 
	text-decoration: none;
}

.current {
	border: 1px solid #E0E0E0;
	padding: 4px 7px;
	color: #444; 
}

.pages{
	border: 1px solid #E0E0E0;
	padding: 2px 7px;
	float: right;
	margin: -3px 0 0;
}

So hiermit hoffe ich ist das Geheimnis, um die haeufig gebrauchte Blaetterfunktion, nun gelueftet :)

Kommentar schreibenHinterlasse einen Kommentar

Du musst angemeldet sein, um einen Kommentar zu hinterlassen...

Du bist noch kein Mitglied von Alice-Grafixx.de?
Dann kannst du dich hier kostenlos registrieren ...


       ALL-INKL.COM - Webhosting Server Hosting Domain Provider