kostenloser Webspace werbefrei: lima-city


blätterfunktion

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    lebanon-elzein

    Kostenloser Webspace von lebanon-elzein, auf Homepage erstellen warten

    lebanon-elzein hat kostenlosen Webspace.

    wie kann ich hier eine Funktion einbauen die mich Blättern lässt, so daß nicht alle Seitenzahlen angezeigt werden, sondern nur immer 10, zB: "zurück 1 2 3 4 5 6 7 8 9 10 vor" - so wie bei google.

    <?php
    
    error_reporting(E_ALL + E_NOTICE);
    
    $conn = mysql_connect("host","user","pw");
    mysql_select_db("dbname");
    
    $sql = "SELECT * FROM `news`";
    $eintrage = mysql_num_rows(mysql_query($sql));
    $maxproseite = 10;
    $i = 0;
    
    $seiten = $eintrage / $maxproseite;
    
    if (!isset($_GET['page'])) {
    $sql = "SELECT * FROM `news` ORDER BY `id` LIMIT 0,".$maxproseite."";
    } else {
    $abeintrag = $_GET['page'] * $maxproseite - $maxproseite;
    $sql = "SELECT * FROM `news` ORDER BY `id` LIMIT ".$abeintrag.",".$maxproseite."";
    }
    $result = mysql_query($sql);
    while($row = mysql_fetch_assoc($result)){
    echo $row['datum'];
    echo "<br>";
    echo $row['headline'];
    echo "<br>";
    echo $row['text'];
    echo "<br>";
    }
    echo "<br><br><br>Seite ";
    for($i = 1; $i - 1< $seiten; $i++){
    echo "<a href=\"news.php?section=gb&page=".$i."\">".$i."</a> ";
    }
    ?>



    Mit dem Script ist alles okay nur erfolgt hierbei die Darstellung/Auflistung sämtlicher Seitenzahlen.
    Bei einer Datenbank mit 10.000 News und einer Anzeige von 10 News pro Seite wären das dann 1000 Seitenzahlen.

    Deshalb wünsche ich folgende Darstellung (google-like):

    1 2 3 4 5 vor

    zurück 557 558 559 560 561 vor

    zurück 996 997 998 999 1000
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. <?php
      $ShowedPages = 10; // Hier stellst du ein wieviele Seiten angezeigt werden sollen
      $MaxPages = 999; // Hier stellst du ein wieviele Seiten es gerade in deiner DB maximal gibt
      for($i=0;$i<$ShowedPages;$i++) {
        $Page = $_POST['page']+$i;
        if($Page < $MaxPages) {
          echo "<a href=\"news.php?section=gb&page=".$Page."\">".$Page."</a> ";
        }
    ?>


    Sollte funktionieren ist ungetestet.
  4. Mal eine andere Variante... Sollte funktionieren, auch wenn ich mich bei der Dokumentation etwas "dürftig" gehalten habe...

    <?php
    error_reporting(E_ALL + E_NOTICE);
    
    /*
     * Pre-Konfiguration
     * Ermitteln der wichtigsten Variablen
    */
    $page = empty($_GET["page"]) ? 1 : $_GET["page"];	// Aktuelle Seite, wenn leer, dann 1
    $perpage = 10;										// Einträge pro Seite
    $max = 5;											// Anzahl der maximal anzuzeigenden Seitenzahlen
    
    //MySQL Verbindung herstellen
    @mysql_connect("host", "user", "pw") or die("Kann nicht mit Datenbank verbinden");
    @mysql_select_db("dbname") or die("Kann Datenbank nicht ausw&auml;hlen");
    
    // Seiteninhalt
    $show = $page*$perpage-$perpage;											// Berechnung der anzuzeigenden Spalten
    $result =  @mysql_query("SELECT * FROM news LIMIT ".$show.", ".$perpage);	// Datenbank-Selektion
    while($row = mysql_fetch_assoc($result))
    {
    	echo $row['datum']."<br>".$row['headline']."<br>".$row['text']."<br>";
    }
    
    // Seitennavigation
    $result =  @mysql_query("SELECT * FROM news");		// Datenbank-Selektion
    $pages = ceil(mysql_num_rows($result)/$perpage);	// Anzahl verfügbarer Seiten
    $prev = $page-1;									// Vorherige Seite
    $next = $page+1;									// Nächste Seite
    
    echo "<br><br><br>Seite ";
    
    /*
     * Optional: Links zur nächsten und ersten Seite
    
    if ($page > 1)
    {
    	echo '<a href="?page=1">Erste Seite</a>&nbsp;<a href="?page='.$prev.'">Vorherige Seite</a>&nbsp;';
    }
    
     *
    */
    
    for ($i = max($page - $max, 1); $i <= min($page + $max, $pages); $i++)
    {
    	if ($i == $page)
    	{
    		echo '<b>'.$i.'</b>';
    	}
    	else	
    	{
    		echo '<a href="?page='.$i.'">'.$i.'</a>';
    	}
    	
    	echo "&nbsp;";
    }
    
    /*
     * Optional: Links zur nächsten und letzten Seite
     
    if ($page < $pages)
    {
    	echo '<a href="?page='.$next.'">N&auml;chste Seite</a>&nbsp;<a href="?page='.$pages.'">Letzte Seite</a>';
    }
    
     *
    */
    ?>


    Nach gefühltem 30-maligem Editieren dürfte dies nun funktionieren, jedoch komme ich gerade leider nicht dazu, das zu testen.

    Beitrag zuletzt geändert: 9.5.2010 2:20:40 von fabo
  5. Zum taktischen Vorgehen:

    Du brauchst als Variablen für den Benutzern:
    - die aktuelle Seitenzahl
    - die Anzahl der Beiträge, die pro Seite angezeigt werden sollen

    Entweder wurden sie als Parameter übergeben, oder du setzt sie auf einen Standard Wert.

    Jetzt solltest du prüfen, ob die geforderten Beiträge überhaupt existieren.
    Zuerst solltest du sinnlose Eingaben filtern:
    - es sollte mindestens ein Beitrag pro Seite angezeigt werden und maximal 1000 Beiträge (ggf. erhöhen, aber es sollte ein Maximum geben, bei 1.000.000 Beiträge pro Seite...)
    - es sollte mindestens Seite eins angezeigt werden
    - die maximale Seitenanzahl wird wie folgt ermittelt
    Parameter:
    - aktuelle Seitenanzahl: x (z.B. 11)
    - Beiträge pro Seite: y (z.B. 10)
    Damit mindestens ein Beitrag auf Seite 11 angezeigt werden kann, müssen x*y - (y-1) bzw. (11*10 - 10-1 = 101) Beiträge in der Datenbank (zum Anzeigen) vorhanden sein.

    Sollte eine der Bedingungen nicht zutreffen, sollten beide Parameter auf einen Standard Wert gesetzt werden.

    Jetzt können wir davon ausgehen, dass die Seitenzahl existiert. Ergo können wir uns jetzt um das Seitenauswahlzeugs kümmern. ;-)
    Zur Erinnerung:
    - x := aktuelle Seitenanzahl
    - y := Beiträge pro Seite
    Folgende Fragen müssen wir nun beantworten:
    - all := wie viele Seiten gibt es insgesamt, wenn man x Beiträge pro Seite anbietet - alle Beiträge der Datenbank/Anzahl der Beiträge pro Seite (aufrunden!)
    - higher := wie viele höhere Seitenzahlen gibt es, als die aktuelle (Alle Siten-aktuelle Seitenanzahl = all - x) - muss größer gleich null sein, wegen unseren vorherigen Prüfungen


    exemplarisch für die Darstellung von 5 Seiten nach links und rechts
    offset := 5
    wenn x > offset
    zeige Zurück mit Link auf x-offset-1

    gebe zahlen von x-offset bis x-1 aus

    gebe x aus

    i := wenn higher > offset setze i = offset, ansonsten setze i gleich higher
    gebe zahlen von x+1 bis i aus

    wenn higher > offset
    zeige Vorwärts mit Link auf x+offset+1



    Soooo, viel Erfolg. ;-)

    Gruß Lucas
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!