Pager

Der Pager ist eine Komponente, die zur Ausgabe-Steuerung von Datenbank-Einträgen verwendet werden kann. Diese findet bereits in den Modulen Kommentar-Funktion und Gästebuch Anwendung. Auf dieser Seite wird der Aufbau des Moduls und die Verwendung näher erläutert.


1. Aufbau

Der Pager besteht im wesentlichen aus einer Business-Komponente (PagerManager), der Ausgabe-Komponente für die Pager-HTML-Darstellung (DocumentController pager_v1_controller oder pager_2_v1_controller) und einer Daten-Schicht, die die für den Betrieb des Managers notwendigen Informationen aus der Datenbank liest. Um einen Pager verwenden zu können muss dieser zunächst initialisiert und mit den richtigen Parametern versorgt werden. Diese Arbeit wird durch die PagerManagerFabric erledigt.


2. Konfiguration

Um den PagerManager zum Laden der für eine Seite relevanten Einträge nutzen zu können, muss dieser zunächst konfiguriert werden. Dazu sind im Wesentlichen eine Konfigurationsdatei und zwei Statementment-Dateien notwenig. Die Konfigurationsdatei umfasst folgende Parameter:
APF-Template
[<Abschnittsname>] Pager.DatabaseConnection = "<ConnectionKey>" Pager.EntriesPerPage = "<Anzahl>" Pager.ParameterStartName = "<URL-Parameter>" Pager.ParameterCountName = "<URL-Parameter>" Pager.StatementNamespace = "<Statement-Namespace>" Pager.CountStatement = "<Load-Entries-Count-Statement>" Pager.CountStatement.Params = "<Statement-Parameter>" Pager.EntriesStatement = "<Statement-Parameter>" Pager.EntriesStatement.Params = "<Load-Entry-Statement>" Pager.DesignNamespace = "<Ausgabe-Template-Namespace>" Pager.DesignTemplate = "<Ausgabe-Template-Name>" Pager.CacheInSession = "true|false"
In den beiden Statements werden jeweils definierte Statement-Parameter erwartet, damit der Pager arbeiten kann. Innerhalb des Load-Entries-Count-Statements können beliebiger Parameter eingesetzt werden um das Ergebnis einzuschränken. Diese müssen aber entweder in der Konfiguration unter Pager.CountStatement.Params oder beim Laden von Einträgen übergeben werden. Das Ergebnis wird im Offset EntriesCount erwartet (Aliasing erforderlich!). Das Statement sollte daher wie folgt aufgebaut sein
Code
SELECT COUNT(Spalte) AS EntriesCount ...
Im Load-Entry-Statement muss immer eine LIMIT-Klausel der Form
Code
LIMIT [Start],[EntriesCount]
aufgeführt sein. Weiterhin erwartet der Pager auch hier das Ergebnis (ID des Datensatzes) in einem Offset DB_ID. Das bedeutet, dass auch in diesem Fall mit einem Alias gearbeitet werden muss:
Code
SELECT <Spalte> AS DB_ID ...
gearbeitet werden. Weitere Parameter können entweder in der Konfiguration unter Pager.EntriesStatement.Params oder beim Laden von Einträgen an den Pager übergeben werden.

Die Parameter können in der Form
Code
param1:value1|param2:value2|...
definiert werden.

Hinweise:
  • Beim Initialisieren der Konfigurationsparameter wird versucht, die Parameter mit Werten aus der URL zu füllen. Dies bietet die Möglichkeit, die Parameter dynamisch per URL zusätzlich zu manipulieren. Ist die nicht gewünscht, so muss dafür Sorge getragen werden, dass die Parameter nicht in der URL auftauchen. In den Statements können diese dann wie die übrigen Platzhalter eingebaut werden.

  • Mit der Option Pager.CacheInSession wird definiert, ob die Anzahl der Einträge eines Objektes in der Datenbank und die IDs der jeweiligen Seite in einer Session gecached werden sollen. Ist die Option mit true belegt, wird dies in der Datenschicht des Pagers zwischengespeichert und behält so lange Gültigkeit, wie die Session besteht.

4.3. Anwendungsbeispiel

Ein ausführliches Anwendungsbeispiele findet sich im Kapitel Datenschicht des Kommentar-Funktion-Tutorials. Dabei wird die API des PagerManagers wie folgt verwendet:

3.1. Laden der relevanten IDs:

PHP-Code
// PagerManager &uuml;ber die Fabric erzeugen $pMF = &$this->__getServiceObject('modules::pager::biz','PagerManagerFabric'); $pM = &$pMF->getPagerManager('{CONFIG_SECTION}'); // IDs laden $IDs = $pM->loadEntries(array('AddParams' => 'Value')); // Daten-Schicht-Komponente erzeugen und Objekt per ID laden $M = &$this->__getServiceObject('namespace::to::data::component','DataMapper'); $list = array(); for($i = 0; $i < count($IDs); $i++){ $list[] = $M->loadDomainObjectByID($IDs[$i]); // end for }

3.2. Direktes Laden der Business-Objekte:

PHP-Code
// PagerManager &uuml;ber die Fabric erzeugen $pMF = &$this->__getServiceObject('modules::pager::biz','PagerManagerFabric'); $pM = &$pMF->getPagerManager('{CONFIG_SECTION}'); // Daten mit Hilfe einer Datenschicht-Komponente direkt laden $M = &$this->__getServiceObject('namespace::to::data::component','DataMapper'); $list = $pM->loadEntriesByAppDataComponent($M,'loadDomainObjectByID',array('AddParams' => 'Value'));

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.