Diese Seite befindet sich im Kompost. Wenn ich mal Zeit habe, wird sie entweder überarbeitet (besser dokumentiert) oder entfernt.
Eine ganz einfache kleine Seitennavigation ohne Schnickschnack. Nunja, inzwischen hat sie auch Schnickschnack bekommen. Ist aber immer noch relativ einfach.
Die Doku befindet sich im Code selber.
Hier ein paar Dinge
item: Der Seitenindex mit 0 beginnt. Die Anzeige 'Seite 1' hat also die pageNr 0.
item: Das Script ist in 4 Teile aufgeteilt. Settings - Datenbeschaffung - Navigation - Items-Auflistung. In Meinem Beispiel ist die Datenbaschaffung ein Array - dies kann aber problemlos auch eine DB-Tabelle sein
item: Wenn du bei deinen Daten kein Intro-Text hast, in der übersicht aber trotzdem eine Vorschau liefern willst, dann kannst du dies mit der Funktion [PHP] wordcut bewerkstelligen (Siehe das Anwednungsbeispiel von wordCut)
<?php /** * --------------------------------------------------- * --- Settings ---- * --------------------------------------------------- * Ich habe versucht, möglichst alle Fix-Werte hier als Konstanten zu führen. * So muss beim Übernehmen des Codes nichts im Code geändert werden. */ //Anzahl Einträge pro Seite define('C_NAV_ITEMS_PER_PAGE', 2); //Standart PageNr wenn keine Nummer übergeben wurde (min. 0) define('C_NAV_DEFAULT_PAGE_NR', 0); //Anzahl Seitennummern auf einmal. //Um immer alle anzuzeigen, verwende 0 define('C_NAV_NR_PER_TIME', 3); //Mit Erster und Letzter Navigation define('C_NAV_WITH_FIRST_LAST', true); //Mit Zurück und Nächster Navigation define('C_NAV_WITH_PREV_NEXT', true); //Formatierungen: //Navigationslink. Hier wird der Link definiert . //Die Parameter (%s) werden in der folgenden Reihenfolge übergeben: //[Name der Get-Variable], [pageNr], [pageTitle] define('C_NAV_FORMAT_LINK', '<a href = "?%s=%s">%s</a>'); //[pageTitle] der aktuellen Seite in der Navigation. %s wird durch die Seitenzahl ersetzt define('C_NAV_FORMAT_ACT_PAGE_NR', '<b>%s</b>'); //[pageTitle] einer Seite in der Navigation. %s wird durch die Seitenzahl ersetzt define('C_NAV_FORMAT_PAGE_NR', '%s'); //Trennzeichen, mit dem die Seitennummern getrennt werden define('C_NAV_DELEMITER', " | \n"); //[pageTitle] der Erster, Zurück, Nächster und Letzter -> Navigation define('C_NAV_FORMAT_FIRST', '<<'); define('C_NAV_FORMAT_PREV', '<'); define('C_NAV_FORMAT_NEXT', '>'); define('C_NAV_FORMAT_LAST', '>>'); /** * --------------------------------------------------- * --- Datenbeschaffung ---- * --------------------------------------------------- * Simulierte Daten. Diese Informationen können aus einer DB oder sonstwoher stammen * In dieser Variante werden immer alle Daten ausgelesen und dann auf die Seite gekürzt. * Also keine WHERE und LIMIT für eine Datenbankabgfrage um die Seite einzugrenzen. * Wie die Felder etc. heissen, ist eigentlich egal. Erst im letzten Abschnitt dieses * Codes [Anzeigen der Einträge der ausgewählten Seite] werden diese Daten wirklich * verwendet. Hat aber auf die Navigation nur einen Datenmengen-Einfluss */ $items[] = array('id' => 1, 'title' => 'Willkommen', 'intro' => 'Hallo Welt'); $items[] = array('id' => 2, 'title' => 'Eintrag 1', 'intro' => 'Ich habe die ID 2'); $items[] = array('id' => 14, 'title' => 'Weiter gehts', 'intro' => 'ID 14 an dritter Stelle'); $items[] = array('id' => 3, 'title' => 'Und noch was', 'intro' => 'irgendwas'); $items[] = array('id' => 8, 'title' => 'abc', 'intro' => 'ABC'); $items[] = array('id' => 9, 'title' => 'def', 'intro' => 'DEF'); $items[] = array('id' => 10, 'title' => 'ghi', 'intro' => 'GHI'); $items[] = array('id' => 11, 'title' => 'jkl', 'intro' => 'JKL'); $items[] = array('id' => 12, 'title' => 'Zuletzt', 'intro' => 'Ich bin das Letzte'); /** * Für eine DB-Quelle würde dasselbe etwa so aussehen * @example * $sql = "SELECT id, title, intro FROM my_data"; * $result = mysql_query($sql); * while($item = mysql_fetch_assoc($result)) $items[] = $item; */ /** * --------------------------------------------------- * --- Erstellen der Navigation --- * --------------------------------------------------- * Im folgenden Abschnitt wird die Navigation berechnet und ausgegeben */ //Die Items in Seiten aufteilen //array(pageNr => array(page)) $pages = array_chunk($items, C_NAV_ITEMS_PER_PAGE, true); //Die letzte Page-Nr ermitteln $lastPageNr = end(array_keys($pages)); //Die Aktuelle Page ermitteln und validieren $actPageNr = filter_input( INPUT_GET, 'pageNr', FILTER_VALIDATE_INT, array('options'=>array('min_range'=>0, 'max_range'=>$lastPageNr)) ); //Auswerten. Wenn False, ist eine ungültige Nummer übergeben worden if($actPageNr === false) die("pageNr {$_GET['pageNr']} ist ausserhalb des Ranges (0 bis {$lastPageNr})"); //Wenn es NULL ist, wurde keine Nummer übergeben if(is_null($actPageNr)) $actPageNr = C_NAV_DEFAULT_PAGE_NR; //Die Page-Nummern extrahieren //Ergibt ein 2-Dimanesionaler Array: //array(array(pageNr, pageTitle)) foreach($pages as $pageNr => $page){ $pageNumbers[] = array( 'pageNr'=>$pageNr, 'pageTitle' => $pageNr+1 ); } //Ausrechnen welche ids überhaubt angezeigt werden sollten if(C_NAV_NR_PER_TIME > 0){ $leftPos = $actPageNr - floor((C_NAV_NR_PER_TIME-1) / 2); if($leftPos < 0) $leftPos = 0; $pageNumbers = array_slice($pageNumbers, $leftPos, C_NAV_NR_PER_TIME, true); } //Erster, Zurück, Nächster, Letzter anhängen if($actPageNr > 0){ if(C_NAV_WITH_PREV_NEXT) array_unshift($pageNumbers, array('pageNr'=>$actPageNr-1, 'pageTitle'=>C_NAV_FORMAT_PREV)); if(C_NAV_WITH_FIRST_LAST) array_unshift($pageNumbers, array('pageNr'=>0, 'pageTitle'=>C_NAV_FORMAT_FIRST)); } if($actPageNr < $lastPageNr){ if(C_NAV_WITH_PREV_NEXT) array_push($pageNumbers, array('pageNr'=>$actPageNr+1, 'pageTitle'=>C_NAV_FORMAT_NEXT)); if(C_NAV_WITH_FIRST_LAST) array_push($pageNumbers, array('pageNr'=>$lastPageNr, 'pageTitle'=>C_NAV_FORMAT_LAST)); } //Navigator erstellen foreach($pageNumbers as $nr){ //Falls die aktuelle Seite ist, kein Link erstellen if($actPageNr == $nr['pageNr']){ $navEntries[] = sprintf(C_NAV_FORMAT_ACT_PAGE_NR, htmlentities($nr['pageTitle'])); }else{ $pageTitle = sprintf(C_NAV_FORMAT_PAGE_NR, htmlentities($nr['pageTitle'])); $navEntries[] = sprintf(C_NAV_FORMAT_LINK, 'pageNr', $nr['pageNr'], $pageTitle); } } //Und die Navigation ausgeben echo "<!-- Start Seitennavigation -->\n"; echo "<!-- pageNr = {$actPageNr} -->\n"; echo implode(C_NAV_DELEMITER, $navEntries); echo "\n<!-- Ende Seitennavigation -->\n"; /** * --------------------------------------------------- * --- Anzeigen der Einträge der ausgewählten Seite -- * --------------------------------------------------- * Dieser Teil ist nur zu Demozwecken. Die ganzen Formatierungen etc. müssen jeweils * angepasst werden */ echo "\n<!-- Start Auflistung der Seiten -->\n"; //Die Einträge der aktuellen Seite erstellen foreach($pages[$actPageNr] as $item){ //Im Pfad die ID und die Source mitgeben. Somit kannst du nachher die Richtigen Daten abholen $html = "<h3>{$item['title']}</h3>\n"; $html .= "{$item['intro']}<br />\n"; //Hier den Pfad angeben um die Details des Eintrags zu besichtigen $html .= "<a href='show.php?itemId={$item['id']}'>Weiterlesen</a>"; $itemsHTML[] = $html; } //Asugeben aller Einträge der Seite echo implode("\n<hr />\n", $itemsHTML); echo "\n<!-- Ende Auflistung der Seiten -->\n"; ?>
Hier kannst du es online testen http://yaslaw.info/example/simplePageNav.php
<!-- Start Seitennavigation --> <!-- pageNr = 0 --> <b>1</b> | <a href = "?pageNr=1">2</a> | <a href = "?pageNr=2">3</a> | <a href = "?pageNr=1">></a> | <a href = "?pageNr=4">>></a> <!-- Ende Seitennavigation --> <!-- Start Auflistung der Seiten --> <h3>Willkommen</h3> Hallo Welt<br /> <a href='show.php?itemId=1'>Weiterlesen</a> <hr /> <h3>Eintrag 1</h3> Ich habe die ID 2<br /> <a href='show.php?itemId=2'>Weiterlesen</a> <!-- Ende Auflistung der Seiten -->
<!-- Start Seitennavigation --> <!-- pageNr = 2 --> <a href = "?pageNr=0"><<</a> | <a href = "?pageNr=1"><</a> | <a href = "?pageNr=1">2</a> | <b>3</b> | <a href = "?pageNr=3">4</a> | <a href = "?pageNr=3">></a> | <a href = "?pageNr=4">>></a> <!-- Ende Seitennavigation --> <!-- Start Auflistung der Seiten --> <h3>abc</h3> ABC<br /> <a href='show.php?itemId=8'>Weiterlesen</a> <hr /> <h3>def</h3> DEF<br /> <a href='show.php?itemId=9'>Weiterlesen</a> <!-- Ende Auflistung der Seiten -->
Wenn jemand so schlau sein will, und eine ungültige Page-Nr von Hand in den Link einträgt.
pageNr 22 ist ausserhalb des Ranges (0 bis 4)