PHP-Klasse zur Seitennavigation
Ob eine Bildergalerie mit einer großen Anzahl von Schnappschüssen oder ein Gästebuch mit einer Vielzahl an Einträgen: irgendwann wird es töricht alle Elemente auf einer einzigen Seite unterzubringen. Immer dann bietet es sich an, eine dynamische Seite mit Hilfe einer Skirptsprache wie PHP zu erstellen, die vom Grundaufbau gleich bleibt, aber nur einen bestimmten Teil der Elemente anzeigt. Während sich der Grundgedanke noch durchaus mit etwas Programmiereifer umsetzen lässt, hört es meist bei einer professionellen Navigation auf, wenn diese mehr als einfaches Vor- und Zurückblättern unterstützen soll.
Die PageNavigation-Klasse stellt ein elegantes Hilfsmittel für eben solche Seitenstrukturen dar. Sie assistiert nicht nur dabei, die richtigen Elemente auf die Unterseite zu bekommen, sondern kann auch mit einem einzigen Befehl eine ansprechende Seiten-Navigation generieren. Und wer es gerne individuell mag, findet zahlreiche Anpassungmöglichkeiten vor.
Demo
Probieren Sie folgende Demoseiten aus, um einen ersten Eindruck über die Funktionen der Klasse zu bekommen. Zu Demonstrationszwecken sind die Elemente virtueller Natur und vorgeblich 5 pro Unterseite.
Download
Bitte beachten Sie: Diese PHP-Klasse baut auf das Klassenkonzept von PHP 5 auf und ist daher unter PHP 4 und seinen Vorgängern nicht lauffähig.
- pagenavigation_1-0-5.zip - Version 1.0.5 (Final) - Changelog
- pagenavigation_1-0-4.zip - Version 1.0.4 (Final) - Dateigröße: 17 kiB
- pagenavigation_1-0-3.zip - Version 1.0.3 (Release Candidate) - Dateigröße: 17 kiB
- pagenavigation_1-0-2.zip - Version 1.0.2 (Beta) - Dateigröße: 17 kiB
- pagenavigation_1-0-1.zip - Version 1.0.1 (Beta) - Dateigröße: 17 kiB
Anwendungsbeispiel
Zunächst muss die Klasse selbstverständlich in Ihr Skript eingebunden werden.
require_once('pagenavigation.class.php');
Ebenfalls vor Instanziierung der Klasse muss geklärt werden, wie viele Elemente es insgesamt zu verwalten gilt. Dies kann bspw. die Anzahl aller Bilder eine Galerie oder die Anzahl aller Reihen einer Datenbank-Tabelle sein. Als Beispiel sei hier die Abfrage der Anzahl der Reihen einer MySQL-Datenbank-Tabelle aufgezeigt.
$result = mysql_query('SELECT COUNT(*) FROM tabellenname');
$item_count = mysql_result($result, 0);
Anschließend kann die PageNavigation-Klasse instanziiert werden. Als Parameter wird die soeben abgefragte Anzahl aller Elemente und die Anzahl der Elemente pro Seite erwartet. Im nachfolgenden Beispiel sollen 5 Elemente auf jeder Seite angezeigt werden.
$nav = new PageNavigation($item_count, 5);
Nun können wir uns bereits um die eigentliche Anzeige der Elemente kümmern. Die PageNavigation-Klasse bietet uns dazu hilfreiche Attribute an. Im nachfolgenden Beispiel rufen wir unter Verwendung des sql_limit-Attributs zunächst die betreffenen Datensätze aus der MySQL-Datenbank-Tabelle ab und nummerieren sie anschließend seitenübergreifend durch.
$result = mysql_query('SELECT inhalt FROM tabellenname LIMIT ' . $nav->sql_limit);
$item_number = $nav->first_item_id;
while ($row = mysql_fetch_assoc($result)) {
echo '<p><strong>' . $item_number . '.</strong> ' . $row['inhalt'] . '</p>';
$item_number++;
}
Unabhängig davon können wir ab dem Zeitpunkt der Instanziierung eine Seiteleiste oder eine Drop-Down-Box generieren, mit dem der Benutzer Unterseiten direkt anwählen kann. Beide lassen sich mit Hilfe von Attributen vorab äußerst individuell anpassen. Als Beispiel soll hier jeweils nur die Grundversion dienen, die wir direkt mittels echo ausgeben.
echo $nav->createPageBar();
echo $nav->createPageSelBox();
Bitte beachten Sie: Möchten Sie auf einer Seite mehr als eine Seitenleiste oder Drop-Down-Box einfügen, so müssen Sie in jedem Fall den optionalen Parameter angeben, mit dem Sie die HTML-ID des Elementes festlegen. Ansonsten wäre Ihr HTML-Quelltext nicht mehr valide. Auch hierzu ein Beispiel.
echo $nav->createPageBar('pagebar-top');
echo $nav->createPageBar('pagebar-bottom');
Methoden
- Konstruktor
- createPageBar(html_id:String):String
- createPageSelBox(html_id:String):String
- getUrl(page_id:Integer):String
Attribute
Über die Klassenattribute können eine Vielzahl nützlicher Informationen abgerufen oder die Navigationselemente individuell gestaltet werden.
Attributname | Beschreibung | Standardwert / Kommentar |
---|---|---|
cur_page_id | Nummer der aktuellen Unterseite | nur Lesezugriff |
first_item_id | Seitenübergreifende Nummer des ersten Elements der aktuellen Unterseite | nur Lesezugriff |
html_label_navlink_next | Beschriftung für den Verweis zur nächsten Unterseite | "Nächste Seite" |
html_label_navlink_next_symbol | Beschriftungssymbol für den Verweis zur nächsten Unterseite | "»" |
html_label_navlink_prev | Beschriftung für den Verweis zur vorherigen Unterseite | "Vorherige Seite" |
html_label_navlink_prev_symbol | Beschriftungssymbol für den Verweis zur vorherigen Unterseite | "«" |
html_label_pagebar | Beschriftung, die vor der Seitenleiste angezeigt wird | "Seiten:" |
html_label_pagelink | Beschriftung für den Verweis auf eine Unterseite; %p wird durch die Nummer der Unterseite ersetzt | "Gehe zur Seite %p" |
html_label_pagelink_divider | Beschriftung zwischen zwei Seiten-Blöcken | "…" |
html_label_pageselbox_button | Beschriftung, die auf der Schaltfläche der Drop-Down-Box angezeigt wird | "Los!" |
item_count | Anzahl aller Elemente | nur Lesezugriff |
items_per_page | Anzahl der Elemente pro Unterseite | nur Lesezugriff |
last_item_id | Seitenübergreifende Nummer des letzten Elements der aktuellen Unterseite | nur Lesezugriff seit 1.0.3 |
link count_inner | Anzahl der Links auf Unterseiten, die vor und hinter der aktuellen Unterseite in der Seitenleiste angezeigt werden | 2 |
link_count_outer | Anzahl der Links auf Unterseiten, die am Anfang und am Ende der Seitenleist angezeigt werden | 2 |
page_count | Anzahl der Unterseiten | nur Lesezugriff |
parameter_name | Name des Parameters, der zur Übermittlung der Unterseite übergeben wird | nur Lesezugriff "p" |
show_navlinks | Wenn true, werden bei der Seitenleiste zusätzlich Links zur vorherigen und nächsten Seite generiert | true |
sql_limit | Vorformatierter String für das SQL-Limit | nur Lesezugriff |
url | URL, auf die alle Links verweisen sollen; %p wird durch die Nummer der Unterseite ersetzt | "?%p" |
use_xhtml | Wenn true, wird bei der Ausgabe die XHTML-Syntax verwendet, sonst die HTML-Syntax | true seit 1.0.2 |
Darüber hinaus können auch die HTML-Klassen der Elemente individuell angepasst werden. Da es sich jedoch um eine Vielzahl an Attributen handelt und eher selten angepasst werden müssen, sei an dieser Stelle auf die Attribut-Deklaration der Klasse verwiesen.