Ergebnis 1 bis 3 von 3

Thema: Blätternavigation – leicht anpassbar

  1. #1
    TP-Moderator Avatar von StephanF
    Registriert seit
    Feb 2003
    Ort
    Erfurt
    Beiträge
    1.217

    Blätternavigation – leicht anpassbar

    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
    PHP-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); 
    Die Datei index.php für die gesamte Ausgabe
    PHP-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 >){
     
    //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&ouml;&szlig;te St&auml;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 >){
     
    //$link = $_SERVER["PHP_SELF"]."?";
     
    $link $_SERVER["PHP_SELF"]."?order=".$order."&s=".$s."&"
     
    $pagelink =pagelink($gesamt,$link,$page,$perpage);
     }
    $ausgabe .= $gesamt." Datensätze &nbsp; ".$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($ergebnisMYSQL_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>
    und die Datei, welche die "Blätterfunktion" beinhaltet, blaetterNavigation.php
    PHP-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 .= "&nbsp;<span class=\"curentPage\">[$curpage]</span>&nbsp;";
                }else {
                    
    $pagenumbers total_array($curpage$perpage$results);
                    
    //Formatierung des Links rechts und links der aktuellen Seite
                    
    $pagelink1 .= "&nbsp;<a href=\"$address"."page=$curpage\" >$curpage</a>&nbsp;";
                }
            }
        }

    //Ausgabe der gesamten Navigation
    $pagelink "Seite&nbsp;<b>$page</b>&nbsp;von&nbsp;<b>$totalpages</b>&nbsp;|&nbsp;";
    //Formatierung für den Link "Erste"
    if($showfirst==1$pagelink .="&nbsp;<a href=\"$address"."page=1\">&laquo; Erste</a>&nbsp;";
    //Formatierung für den Link "vorherige"
    if($showprev==1$pagelink .="&nbsp;<a href=\"$address"."page=$prevpage\">&lt;</a>&nbsp;";
    //aktuelle Seite und Zahlenlinks davor und dahinter einfügen
    $pagelink .=$pagelink1;
    //Formatierung für den Link "nächste"
    if($shownext==1$pagelink .="&nbsp;<a href=\"$address"."page=$nextpage\">&gt;</a>&nbsp;";
    //Formatierung für den Link "Letzte"
    if($showlast==1$pagelink .="&nbsp;<a href=\"$address"."page=$totalpages\">Letzte &raquo; </a>&nbsp;";

    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###################
    ?>
    Ich wünsche allen Viel Spaß und Erfolg damit

    P.S. keiner ist vollkommen. Wer Fehler findet, Verbesserungen hat oder sonst ein Problem mit dem Script hat, dann einfach hier posten.
    Angehängte Dateien Angehängte Dateien
    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!!

  2. #2
    TP-Specialist Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Herzlichen Dank für das Script, Stephan


  3. #3
    Super Moderator Avatar von Robert
    Registriert seit
    Dec 2000
    Ort
    Berlin
    Beiträge
    4.368
    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

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51