blätterfunktion
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
all
anzahl
code
darstellung
datenbank
datum
ermittelt parameter
funktionieren
host
limit
offset
ordern
page
parameter
seitenzahl
selektion
show
standard
text
zahl
-
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
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
<?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. -
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ä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> <a href="?page='.$prev.'">Vorherige Seite</a> '; } * */ 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 " "; } /* * Optional: Links zur nächsten und letzten Seite if ($page < $pages) { echo '<a href="?page='.$next.'">Nächste Seite</a> <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 -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage