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.
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.
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.
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 ü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 ü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.