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 (Document-Controller 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 Statement-Dateien notwenig. Die Konfigurationsdatei umfasst folgende Parameter:

APF-Konfiguration
[{Name des Pagers}] Pager.DatabaseConnection = "{ConnectionKey}" Pager.EntriesPerPage = "{Anzahl}" Pager.ParameterPageName = "{URL-Name für den Start-Parameter}" Pager.ParameterCountName = "{URL-Name für den dynamischen Anzahl/Seite-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" ; seit 1.13. < 1.13 immer true Pager.AllowDynamicEntriesPerPage = "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

SQL-Statement
SELECT COUNT({Spalte}) AS EntriesCount ...
Im Load-Entry-Statement muss immer eine LIMIT-Klausel der Form
SQL-Statement
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:
SQL-Statement
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.
Die im Release 1.13 hinzugekommene Direktive Pager.AllowDynamicEntriesPerPage aktiviert die Unterstützung des Pagers für dynamische Anzahl von Einträgen pro Seite. Dieses ist ab 1.13 aus Sicherheitsgründen standardmäßig deaktiviert.

4.3. Anwendungsbeispiel

Ein ausführliches Anwendungsbeispiele findet sich im Kapitel Datenschicht des Kommentar-Funktion-Tutorials. Dabei wird die API-Dokumentation 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]); }

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.