Herzlichen Dank für das Script, Stephan
![]()
Hier hab ich eine Blätternavigation für alle, die schon immer mal ne schnelle Lösung für Ihr Problem wie "In Datensätzen navigieren", "Navigation wie bei Google", "Blatternavigation", "eine Seite weiter", "Seite x von n" usw. gesucht haben.
Mit diesem kleinem Script erhaltet Ihr für Eure Datensätze, z.B. News, Gästebuch, Blogbeiträge, Adressenausgabe usw. eine Navigation in der Art von:
984 Datensätze Seite 10 von 99 | « Erste < 6 7 8 9 [10] 11 12 13 14 > Letzte »
Die Links lassen sich ganz leicht auch durch Bilder ersetzen, oder durch CSS an das eigene Layout anpassen.
Weiterhin habt Ihr, bzw. Euer Sitebesucher die Möglichkeit, die Anzahl der auszugebenden Datensätze auf einer Seite für die jeweilige Sitzung selbst zu bestimmen. Es kann hier zwischen den Werten 10, 20, 50 und 100 gewählt werden. Auch diese können natürlich bei bedarf geändert oder ganz entfernt werden.
Auch habt Ihr die Möglichkeit, durch klicken auf die Spaltenköpfe, die Spalte zu wählen, nach der die Ausgabe sortiert werden soll. Auf- und Absteigend.
Das Ur-Ur-Ur-Ur-Script zu Berechnung der Links habe ich vor ein paar Jahren mal im Netz gefunden und im Laufe der Zeit an meine Bedürfnisse angepasst und um oben beschriebene Funktionen erweitert. Von hieraus noch mal dank an Unbekannt.
Am Ende findet Ihr eine zip-Datei. Sie beinhaltet nochmals alle benötigten Dateien und einen sql-Dump um sofort probieren zu können.
Eine Live-Vorschau seht Ihr hier:
Funke & Funke Blätternavigation
Weitere Erklärungen findet Ihr in den Dateien auskommentiert:
Zuerst benötigen wir eine Datenbankverbindung. Diese steht in der
Datei dbConnection.inc.php
Die Datei index.php für die gesamte AusgabePHP-Code:// Datenbank Variablen
$dbserver = "localhost"; //localhost //
$dbname = "Funkes_Datenbank"; //Funkes_Datenbank //
$dbuser = "root"; // // root
$dbpass = ""; //
$db = @mysql_connect($dbserver, $dbuser, $dbpass);
if(!$db){die ("Konnte keine Verbindung zur Datenbank herstellen");}
mysql_select_db("$dbname",$db);
und die Datei, welche die "Blätterfunktion" beinhaltet, blaetterNavigation.phpPHP-Code:<?php
//Session starten
@session_start();
//Einbinden der Datenbankverbindung und der Funktion zum "weiter blättern"
@include('dbConnection.inc.php');
@include('blaetterNavigation.php');
//Die Seite, auf die sich die Links in unserer Blätternavigation beziehen soll, in unserem Fall immer die aktuelle Seite
$seite = $_SERVER["PHP_SELF"];
//
//Kleine Funktion, um jede zweite Zeile der Ausgabetabelle mit einer anderen Hintergrundfarbe zu versehen
function rowcolor($zeile) {
if (($zeile/2)==floor($zeile/2)) {
$retval="bgcolor='#999999'";
} else {
$retval="bgcolor='#666666'";
};
return $retval;
};
//
//Anzahl Datensätze pro Seite
//++++++++++++++++++/
if(!isset($_SESSION['perpage'])){
$_SESSION['perpage'] = 10;
}
//Wenn ein Button zum Ändern der Datensatzanzahl geklickt wurde
if(isset($_GET['datensatzAnzahl'])){
//Durch (int) Manipulationen unterdrücken
$_SESSION['perpage'] = (int)$_GET['datensatzAnzahl'];
$_GET['page'] = 1;
}
//Durch (int) Manipulationen unterdrücken
$perpage = (int)$_SESSION['perpage'];
//Whitelistprüfung der erlaubten Anzahl der Ausgabe von Datensätzen
$anzArr = array(10,20,50,100);
if(!in_array($perpage,$anzArr)){ $perpage = $spalten[0];}
//++++++++++++++++++/
//
//++++++++++++++++++/
if(!isset($_GET['order'])){
$order = "ASC";
$orderN = "DESC";
}
else{
$order = (string) $_GET['order'];
//Whitelistprüfung der Sortierreihenfolge
if($order !== "DESC" && $order !== "ASC") {$order = "DESC";}
}
//++++++++++++++++++/
//Sortierung der Spalten und umgekehrte Reihenfolge in var $orderN speichern
if($order == "ASC"){
$orderN = "DESC";
}
if($order == "DESC"){
$orderN = "ASC";
}
//Bild für ASC und DESC
$bild = "<img src=\"details.png\" border=\"0\" align=\"absmiddle\" />";
//++++++++++++++++++/
//Eine Spalte zum sortieren festlegen, falls keine angegeben ist, z.B. beim ersten Aufruf der Seite
if(!isset($_GET['s'])){
$s = "stadt";
}
else{
$s = (string) $_GET['s'];
//Whitelistprüfung der erlaubten Spalten
$spalten = array('stadt','id','land','ew');
if(!in_array($s,$spalten)){ $s = $spalten[0];}
}
//++++++++++++++++++/
//$page darf nur Integerwerte haben
//Wenn $page nicht gestzt oder 0, dann ist $page = 1
$page = (int) $_GET['page'];
if (!empty($page)) {
if ($page == 0) $page = 1;
} else $page = 1;
//
//Abfrage der DB nach allen Datensätzen
$sql_alle = @mysql_query("SELECT id FROM deutschlandregionen");
//Anzahl aller ermittelten Datensätze in var $gesamt speichern
$gesamt = @mysql_num_rows($sql_alle);
//und Varibale $page auf 1 setzen, wenn mehr Datensätze vorhanden sind, als auszugebende Datensätze für eine Seite festgelegt wurden
if($perpage>$gesamt) {$page=1;}
//##############################################################
//Nun detailierte Abfrage für die jeweilige aktuell angeforderte Seite erstellen
//z. B.: "SELECT * FROM deutschlandregionen ORDER BY stadt DESC LIMIT 200, 10" ;
//Ausgesprochen: Hole 10 Datensätze aus Tabelle "deutschland", beginne ab dem 200. Datensatz und sortiere nach Stadt absteigend
$sql="SELECT * FROM deutschlandregionen ORDER BY $s $order LIMIT ".($perpage*($page-1)).",".($perpage);
$ergebnis=mysql_query($sql,$db);
//Anzahl aller Seiten ermitteln, mit ceil wird auf die nächste Ganzzahl aufgerundet
//Beispiel: 302 Datensätze in Variable $gesamt, 10 Datensätze sind in Variable $perpage für die Ausgabe vorgesehen,
//dann hat $page den Wert 31 (30 Seiten á 10 Datensätze, und eine letzte Seite 31 mit den restlichen beiden Datensätzen)
$pages = ceil($gesamt/$perpage);
//Blätternavigation nur anzeigen wenn mehr als eine Seite erforderlich
if ($pages >1 ){
//Die aktuelle Seite, welche die Blätternavigation enthält wird zusammen mit den $_GET-Parametern in der Variablen $link gespeichert
//und der Funktion zur Ausgabe der Blätternavigation übergeben.
//Auch werden oben generierte Varibalen $gesamt, $page, $perpage an die Funktion mit übergeben
$link = $_SERVER["PHP_SELF"]."?order=$order&s=$s&";
$pagelink =pagelink($gesamt,$link,$page,$perpage);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Funke & Funke Tutorial Blätter-Navigation</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
//Erzeugung der HTML Ausgabe
$ausgabe = "<div id=\"inhalt\">\n";
$ausgabe .= "<h1>Deutschlands größte Städte und Regionen</h1>\n";
$ausgabe .= "<div id=\"buttonDIV\">\n";
$ausgabe .= "<ul>\n";
//Den Links der Buttons 10,20,50,100 setzen sich zusammen aus der
//aktuellen Seite ($seite), aktueller Sortierreihenfolge ( $order ), die sortierte Spalte ( $s ), die aktuelle Datensatz-Seite ( $page )
//und dem Wert den sie übergeben sollen ( $datensatzAnzahl )
$linkStringButtons = $seite."?order=".$orderN."&s=".$s."&page=".$page;
$ausgabe .= "<li><a href=\"".$linkStringButtons."&datensatzAnzahl=100\">100</a></li>\n";
$ausgabe .= "<li><a href=\"".$linkStringButtons."&datensatzAnzahl=50\">50</a></li>\n";
$ausgabe .= "<li><a href=\"".$linkStringButtons."&datensatzAnzahl=20\">20</a></li>\n";
$ausgabe .= "<li><a href=\"".$linkStringButtons."&datensatzAnzahl=10\">10</a></li>\n";
$ausgabe .= "</ul>\n";
$ausgabe .= "</div>\n";
$ausgabe .= "<div class=\"naviDIV\">\n";
//Ausgabe der Blätternavigation OBEN
//Blätterausgabe nur anzeigen wenn mehr als eine Seite erforderlich
if ($pages >1 ){
//$link = $_SERVER["PHP_SELF"]."?";
$link = $_SERVER["PHP_SELF"]."?order=".$order."&s=".$s."&";
$pagelink =pagelink($gesamt,$link,$page,$perpage);
}
$ausgabe .= $gesamt." Datensätze ".$pagelink;
$ausgabe .= "</div>\n";
$ausgabe .= "<table id=\"tabelle\">\n";
$ausgabe .= "<tr>\n";
//Hier werden die Links der anklickbaren Spaltenüberschriften erzeugt
//Diese setzen sich zusammen aus
//aktuellen Seite ($seite), aktueller Sortierreihenfolge ( $order ), die aktuelle Datensatz-Seite ( $page )
//und dem Wert den sie übergeben sollen, die betreffende Spalte ( $s )
//Die anschließende if-Abfrage sorgt dafür, dass das kleine Bild in der angeklickten und aktuellen Spalte erscheint.
$linkStringSpalten = $seite."?order=".$orderN."&page=".$page;
$ausgabe .= "<th><a href=\"".$linkStringSpalten."&s=id\" >ID</a> "; if($s=="id") {$ausgabe .= $bild;} $ausgabe .= "</th>\n";
$ausgabe .= "<th><a href=\"".$linkStringSpalten."&s=stadt\" >Stadt</a> "; if($s=="stadt") {$ausgabe .= $bild;} $ausgabe .= "</th>\n";
$ausgabe .= "<th><a href=\"".$linkStringSpalten."&s=ew\" >Einwohner</a> "; if($s=="ew") {$ausgabe .= $bild;} $ausgabe .= "</th>\n";
$ausgabe .= "<th><a href=\"".$linkStringSpalten."&s=land\" >Bundesland</a> "; if($s=="land") {$ausgabe .= $bild;} $ausgabe .= "</th>\n";
$ausgabe .= "</tr>\n";
//Hier erfolgt die Ausgabe der Datensätze
while ($zeile=@mysql_fetch_array($ergebnis, MYSQL_ASSOC)){
$ausgabe .= "<tr ".rowcolor($i)." onMouseover=\"this.bgColor='#FF9900'\" onMouseout=\"this.bgColor=".rowcolor($i)."\">\n";
$ausgabe .= "<td>".$zeile[id]."</td>\n";
$ausgabe .= "<td>".$zeile[stadt]."</td>\n";
$ausgabe .= "<td>".number_format($zeile[ew],0,".",".")."</td>\n";
$ausgabe .= "<td>".$zeile[land]."</td>\n";
$ausgabe .= "</tr>\n";
$i++;
}
$ausgabe .= "</table>\n";
$ausgabe .= "</div>\n";
echo $ausgabe;
?>
<!-- ENDE <div id="inhalt">-->
</body>
</html>
Ich wünsche allen Viel Spaß und Erfolg damitPHP-Code:<?php
//####################################### Blätternavigation###################
function pagelink($results, $address, $page, $perpage){
$curpage = 0;
$pagenav = '';
$firstlink = '';
$prevlink = '';
$lastlink = '';
$nextlink = '';
//Anzahl der Links rechts und links von der aktuellen Seite, inkl. "eine weiter" bzw. "eine zurück"
$pagelinkpages=5;
//Wert 5 erzeugt z.B. folgende Ausgabe
//< 4 5 6 7 [ 8 ] 9 10 11 12 >
$total = $results;
//Berechnung aller Seiten
$totalpages = ceil($results / $perpage);
//Variablendeklaration für die Links erste, nächste, vorherige und letzte Seite
$showprev = "0";
$shownext = "0";
$showfirst = "0";
$showlast = "0";
//Wenn mehr als eine Seite vorhanden ist
if ($page > 1) {
//Berechnung der vorherigen Seite
$prevpage = $page - 1;
//links der Aktuellen Seite mit Hilfe der Funktion total_array in Variable $prevnumbers speichern
$prevnumbers = total_array($prevpage, $perpage, $results);
// Link "vorheriger" sichtbar machen, wenn obige Anweisung true ist
$showprev = 1;
}
//Wenn aktulle Seite kleiner ist als die gesamtzahl aller Seiten
if ($page < $totalpages) {
//Berechnung der nächsten Seite
$nextpage = $page + 1;
//rechts der Aktuellen Seite mit Hilfe der Funktion total_array in Variable $prevnumbers speichern
$nextnumbers = total_array($nextpage, $perpage, $results);
// Link "nächster" sichtbar machen, wenn obige Anweisung true ist
$shownext = 1;
}
//Berechnung zur Ausgabe der Links abhängig der aktuellen Seite und der Anzahl der darzustellenden Links ( $pagelinkpages )
while ($curpage++ < $totalpages) {
//Wird der Link "Erste" in der Ausgabe benötigt
if (($curpage <= $page - $pagelinkpages || $curpage >= $page + $pagelinkpages) && $pagelinkpages != 0) {
if ($curpage == 1) {
$firstnumbers = total_array(1, $perpage, $results);
$showfirst = 1;
}
//Wird der Link "Letzte" in der Ausgabe benötigt
if ($curpage == $totalpages) {
$lastnumbers = total_array($totalpages, $perpage, $results);
$showlast = 1;
}
} else {
if ($curpage == $page) {
$numbers = total_array($curpage, $perpage, $results);
//Formatierung des Links für die aktuelle Seite
$pagelink1 .= " <span class=\"curentPage\">[$curpage]</span> ";
}else {
$pagenumbers = total_array($curpage, $perpage, $results);
//Formatierung des Links rechts und links der aktuellen Seite
$pagelink1 .= " <a href=\"$address"."page=$curpage\" >$curpage</a> ";
}
}
}
//Ausgabe der gesamten Navigation
$pagelink = "Seite <b>$page</b> von <b>$totalpages</b> | ";
//Formatierung für den Link "Erste"
if($showfirst==1) $pagelink .=" <a href=\"$address"."page=1\">« Erste</a> ";
//Formatierung für den Link "vorherige"
if($showprev==1) $pagelink .=" <a href=\"$address"."page=$prevpage\"><</a> ";
//aktuelle Seite und Zahlenlinks davor und dahinter einfügen
$pagelink .=$pagelink1;
//Formatierung für den Link "nächste"
if($shownext==1) $pagelink .=" <a href=\"$address"."page=$nextpage\">></a> ";
//Formatierung für den Link "Letzte"
if($showlast==1) $pagelink .=" <a href=\"$address"."page=$totalpages\">Letzte » </a> ";
return $pagelink;
}
//Funktion zur Berechnung von erstem und letztem Wert für die Links
function total_array($pagenumber, $perpage, $total){
$first = $perpage * ($pagenumber - 1);
$last = $first + $perpage;
if ($last > $total) $last = $total;
$first++;
return array('first' => $first, 'last' => $last);
}
//####################################### ENDE Blätternavigation###################
?>![]()
P.S. keiner ist vollkommen. Wer Fehler findet, Verbesserungen hat oder sonst ein Problem mit dem Script hat, dann einfach hier posten.
Geändert von StephanF (31.03.2008 um 18:57 Uhr)
Schöne Grüße aus Thüringen
Stephan Page
Stell Dir vor, hier steht was und keiner liest es!! schon entdeckt?? F1 ist ne geile Taste
Ich beantworte keine E-Mails. Bitte alle Fragen ins Forum
schon gehört??? Das Internet ist voll, die lassen keinen mehr rein!!![]()
![]()
Herzlichen Dank für das Script, Stephan
![]()
#.Viele Grüße - Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
fein fein![]()
Traum-Projekt.com weiterhin der "Klick zum Know-how"
Dann bin ich ja froh, dass nun der erste Teil geschafft ist vom TP Relaunch.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)