Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 17 HTML
  gp 17.1 HTML_BBCodeParser
  gp 17.2 HTML_Crypt
  gp 17.3 HTML_Page2
    gp 17.3.1 Methoden zur Manipulation des Heads
    gp 17.3.2 Methoden zur Manipulation des Bodys
    gp 17.3.3 Ausgabe der HTML-Daten
  gp 17.4 HTML_CSS
    gp 17.4.1 Ausgabe des Stylesheets
  gp 17.5 HTML_Javascript
  gp 17.6 HTML_Template_IT
  gp 17.7 HTML_Template_Flexy
    gp 17.7.1 Fomulare in Flexy
    gp 17.7.2 Plugins
  gp 17.8 HTML_Form
  gp 17.9 HTML_QuickForm
    gp 17.9.1 Standard-Formularelemente
    gp 17.9.2 Erweiterte Formularelemente
    gp 17.9.3 Gruppen
    gp 17.9.4 Verarbeitung des Formulars
    gp 17.9.5 Filter
    gp 17.9.6 Serverseitige Validierung
    gp 17.9.7 Clientseitige Validierung
    gp 17.9.8 Datei-Uploads
    gp 17.9.9 Templates
  gp 17.10 HTML_QuickForm_Controller
  gp 17.11 HTML_Menu
  gp 17.12 HTML_TreeMenu
  gp 17.13 HTML_Progress
  gp 17.14 HTML_Table
  gp 17.15 HTML_Table_Matrix
  gp 17.16 Pager


Rheinwerk Computing

17.16 Pager  toptop


Besprochene Version: 2.2.76 Lizenz: PHP-Lizenz
Klassendatei(en): Pager/Pager.php

Das Paket Pager gehört nicht zu den eigentlichen HTML-Paketen. Es wurde erst nachträglich den HTML-Paketen zugeordnet. Daher liegt die dazugehörige Datei auch im Verzeichnis Pager und nicht in HTML.

Möchten Sie eine umfangreiche Anzahl von Datensätzen ausgeben, stellt sich oft das Problem, dass die Daten nicht auf einmal ausgegeben werden können. Also müssen die Daten »durchgeblättert« werden. Das kann allerdings, wenn Sie es selbst programmieren müssen – recht aufwändig sein. Das Paket Pager nimmt Ihnen diese Arbeit ab. Es stellt Ihnen Möglichkeiten zum Durchblättern der Daten und zum automatischen Generieren einer Navigation zur Verfügung.

Der Code aus Listing 17.32 und Abbildung 17.18 veranschaulichen das.

require_once ('Pager/Pager.php'); 
 
// Daten, die ausgegeben werden sollen 
$daten = array('Meier', 'Müller', 'Mayer', 'Paulsen', 
               'Schoirer', 'Möhrke','Gustavson', 
               'Simpson', 'Troy', 'Bender', 'Adams', 
               'Suraski','Gutmans','Lerdorf' 
          ); 
 
// Parameter zum Initialisieren des Objekts 
$params = array( 
                'mode'     => 'Jumping', // Jumping Mode 
                'perPage'  => 4,  //Datensaetze pro Seite 
                'delta'    => 3,  //Seiten in der Navigation 
                'itemData' => $daten // Auszugebende Daten 
         ); 
// Neues Objekt instanziieren 
$pager = Pager::factory($params); 
// Daten für diese Seite auslesen 
$akt_daten  = $pager->getPageData(); 
// Navigationsdaten auslesen 
$navi = $pager->getLinks(); 
// Navigation ausgeben lassen 
echo "$navi[all]<p />"; 
 
// Einzelne Datensaetze ausgeben 
foreach ($akt_daten as $name) 
{ 
   echo "Name: $name<br />"; 
}

Listing 17.32 Ausgabe von Daten mit PEAR::Pager

Die auszugebenden Daten sind als Array an die Factory-Methode zu übergeben. Dieses Array wird Teil eines assoziativen Arrays, in dem auch andere Parameter spezifiziert werden, die das Verhalten der Klasse beeinflussen.

Abbildung 17.18 Ausgabe im Browser

Zuerst ist hier sicher der Schlüssel mode zu nennen, mit dem der Navigationsmodus festgelegt werden kann. Neben 'Jumping' können Sie hier auch 'Sliding' angeben. Die beiden Modi unterscheiden sich primär in der Navigation. Nachfolgend finden Sie Beispiele, wie die beiden Modi sich verhalten, wenn in beiden Fällen delta=3 angegeben wurde und von der ersten Seite beginnend weitergeblättert wird.


Tabelle 17.9 Unterschiedliche Verhalten von Jumping und Sliding
Jumping Sliding
1 2 3 Next >> 1 | 2 | 3 | 4 | 5 | 6 | 7 » [9]
<< Back 1 2 3 Next >> [1] « 1 | 2 | 3 | 4 | 5 | 6 | 7 » [9]
<< Back 1 2 3 Next >> [1] « 1 | 2 | 3 | 4 | 5 | 6 | 7 » [9]
<< Back 4 5 6 Next >> [1] « 1 | 2 | 3 | 4 | 5 | 6 | 7 » [9]
<< Back 4 5 6 Next >> [1] « 2 | 3 | 4 | 5 | 6 | 7 | 8 » [9]

Im Modus »Jumping« werden also immer so viele direkte Links angezeigt, wie die Zahl vorgibt, die in delta abgelegt ist. Wenn Sie das Sliding nutzen, werden doppelt so viele Links plus ein direkter Link angezeigt. Mit einem delta von drei ergeben sich also sieben direkte Links.

Der zweite große Unterschied ist, dass beim Jumping die aktuelle Seite in der Navigation von links nach rechts »durchläuft«, und wenn das Ende erreicht wurde, dann springt die Navigation um den Wert von delta weiter. Beim Sliding wird die aktuelle Seite immer in der Mitte gehalten, sobald die Mitte erreicht wurde. Bei jedem Weiterblättern wird die Navigation dann um eins verschoben. Wie Sie in Abbildung 17.18 sehen können, wird dabei die Nummer der aktuellen Seite als Query-String übergeben, also an die URL der Datei angehängt.

Der Schlüssel perPage enthält die Information, wie viele Datensätze pro Seite angezeigt werden sollen.

Mit diesen Schlüsseln kommt man im Normalfall schon recht weit. Aber Sie können das Verhalten des Pakets noch mit vielen weiteren Array-Inhalten steuern. Die wichtigsten Schlüssel finden Sie in Tabelle 17.10.


Tabelle 17.10 Weitere Optionen zur Ausgabe-Steuerung
Schlüssel Erläuterung
linkClass Name einer CSS-Klasse, die zur Formatierung der Links genutzt werden soll.
curPageLinkClassName Name einer CSS-Klasse, die zur Formatierung des aktuellen Links genutzt werden soll.
urlVar Name der Variable, die für die ID der Seite genutzt werden soll (Standard ist PageID).
prevImg Text, der als Link für das Zurückblättern eingeblendet werden soll, also z. B. < Zurück oder <img src='zurueck.gif' />.
nextImg Text, der als Link für das Vorwärtsblättern eingeblendet werden soll, also z. B. Vor > oder <img src='vor.gif' />.
separator Zeichen oder Grafik (<img src=…>) zur Nutzung zwischen den Seitenzahlen
spacesBeforeSeparator Anzahl der Leerzeichen vor dem Separator
spacesAfterSeparator Anzahl der Leerzeichen nach dem Separator
firstPagePre String, der vor der ersten Seitenzahl ausgegeben werden soll
firstPagePost Text, der nach der ersten Seitenzahl ausgegeben werden soll
lastPagePre Text, der vor der letzten Seitenzahl ausgegeben werden soll
lastPagePost String, der nach der letzten Seitenzahl ausgegeben werden soll

Die Methode getPageData() liefert jeweils den Ausschnitt aus dem Array mit den Daten für die aktuelle Seite zurück. Möchten Sie nur die Daten für die aktuelle Seite haben, liefert die Methode sie Ihnen direkt zurück. Sie können ihr aber auch die Nummer einer Seite übergeben, deren Daten Sie explizit auslesen wollen. Adressieren Sie dabei ein Set von Daten, das nicht existiert, liefert die Methode false zurück.

Die Methode getLinks() stellt Ihnen ein Array mit Daten zur Verfügung, aus dem Sie die Navigation erstellen können. Der Schlüssel all, der in Listing 17.32 genutzt wird, verweist hierbei auf eine komplett fertige Navigationszeile, die direkt ausgegeben werden kann.

Das Array kann sowohl indiziert als auch assoziativ genutzt werden. Die Bedeutung der Schlüssel und Index-Werte ist in Tabelle 17.11 beschrieben.


Tabelle 17.11 Aufbau des zurückgegebenen Arrays
Wert Schlüssel Bedeutung
0 back Link auf die vorhergehende Seite
1 pages Direkte Links auf die Seiten im Anzeigebereich
2 next Link auf die nächste Seite
3 first Link auf die erste Seite
4 Last Link auf die letzte Seite
5 all Komplett fertige Navigationszeile

Mit diesen Werten können Sie also recht schnell eine individuelle Navigation aufbauen.

Dadurch, dass die Links in diesem Fall schon vorkonfiguriert sind, ist das System nur bedingt flexibel. Der Entwickler war aber so freundlich, eine recht große Anzahl an Methoden vorzusehen, auf deren Basis Sie selbst eine Navigation erstellen können.

Die ID, also die Nummer der aktuellen Seite können Sie hierbei jeweils mit getCurrentpageID() auslesen. Um nicht selbst rechnen zu müssen, können Sie die ID der vorhergehenden und nächsten Seite mit getPreviousPageID() und getNextPageID() auslesen. Diese beiden Methoden haben auch den Vorteil, dass sie false zurückgeben, wenn keine vorhergehende oder nächste Seite existiert.

Die Gesamtzahl der Seiten stellt numPages() Ihnen zur Verfügung, und die Gesamtzahl der enthaltenen Datensätze kann mit numItems() ausgelesen werden. Möchten Sie herausfinden, welche Datensätze auf einer bestimmten Seite zur Verfügung stehen, hilft getOffsetByPageID() Ihnen weiter. Die Methode bekommt die ID einer Seite übergeben oder nutzt die ID der aktuellen, wenn Sie nichts anderes spezifizieren, und liefert Ihnen ein Array aus zwei Elementen zurück. Die erste Zahl spezifiziert dabei die Nummer des ersten Datensatzes auf der Seite, und die zweite die Nummer des letzten Datensatzes. Arbeiten Sie im Modus Jumping, so ist auch eine Umkehrfunktion namens getPageIdByOffset() definiert. Diese Methode, die es im Sliding-Modus nicht gibt, bekommt die Nummer eines Datensatzes übergeben, berechnet, auf welcher Seite dieser zu finden ist, und gibt die ID dieser Seite zurück.

getPageRangeByPageId() bekommt die ID einer Seite übergeben und gibt die IDs der ersten und der letzten Seite, die in der Navigation ausgegeben werden, als Array zurück.

Um möglichst elegant prüfen zu können, ob vor oder hinter der aktuellen Seite noch weitere folgen, können Sie isFirstPage() und isLastPage() nutzen. Beide Methoden bekommen keine Parameter übergeben und teilen Ihnen über einen booleschen Wert mit, ob die aktuelle Seite die erste bzw. die letzte Seite ist. Sollten Sie feststellen, dass Sie sich auf der letzten Seite befinden, stellt sich natürlich die Frage, ob für die letzte Seite noch genauso viele Datensätze vorliegen wie für die vorhergehenden Seiten. In diesem Fall ist isLastePageComplete() sehr hilfreich. Sollte die letzte Seite genauso viele Datensätze enthalten wie die vorhergehenden, bestätigt die Methode das mit einem true und liefert andernfalls ein false.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de