PageExtension

Um einen sauberen ojektorientierten Ansatz stärker zu verfolgen, kann ein Page-Objekt seitentypspezifisch über eigene Eigenschaften und Methoden erweitert werden. Erstellen Sie dazu im jeweiligen site-Verzeichnis des Seitentyps eine "page.php"-Datei:

Beispiele:

  • site/demo/news/list/page.php
  • site/demo/events/entry/page.php

In der "page.php" Datei wird die erweiterte Page-Klasse definiert. Der Klassenname (im Beispiel "PageNewsList") ergibt sich aus dem Prefix "Page" und der technischen Seitentypbezeichnung in Camelcase.

class PageNewsList extends Page { // ... }

In dieser Klasse können nun über das Vererbungsprinzip eigene Methoden und Eigenschaften definiert werden.

Die Einbindung der erweiterten Page-Klasse erfolgt von System automatisch. D.h. alle Page-Objekte sind z.B. nach Verwendung der getPages Funktion als erweiterte Page-Objekte verfügbar.

wb_incandescent

Die "page.php"-Datei kann ebenso z.B unter dem Verzeichnis site/_global/news/list/page.php gelegt werden. Dann gilt die seitentyp-spezifische Page-Erweiterung für alle verfügbaren Mandanten.

Page-Objekt global erweitern

Um das Page-Objekt global (für alle Seitentypen mandantenübergreifend) zu erweitern, erzeugen Sie folgende Datei: site/_global/page.php. Die Klassenbezeichnung muss den Namen "PageGlobal" tragen.

class PageGlobal extends Page { // ... }

Page-Objekt pro Mandant erweitern

Um das Page-Objekt für alle Seitentypen innerhalb eines bestimmten Mandanten zu erweitern, erzeugen Sie folgende Datei: site/MANDANT/page.php. Die Klassenbezeichnung muss den Namen "PageMANDANT" tragen (MANDANT = Name des eigenen Mandanten).

class PageMANDANT extends Page { // ... }

Page-Klasse umbenennen

Sollten Sie für einen Seitentyp mehrere PageExtensions überschreiben, die aber jeweils die Methoden der überschriebenen PageExtenstion übernehmen sollen, werden Sie das Problem haben, dass Sie die selbe PHP Klasse nicht mehr als einmal definieren können. Beispiel:

  1. lib/type/site/news/entry/page.php (Klasse PageNewsEntry)
  2. site/news/entry/page.php (Klasse PageNewsEntry)

In diesem Beispiel können Sie die eigene Klasse PageNewsEntry nicht verwenden, da diese bereits im Standard Seitentyp verwendet wird. Sie können in so einem Fall festlegen, dass die Klasse Ihrer eigenen PageExtension eine andere Bezeichnung hat. Dazu schreiben Sie in die conf.json:

{ "page": { "extension": { "PageNewsEntry": "MyNewName" } } }

In Ihrer page.php Sie der Code dann z.B. so aus:

require_once 'type/site/news/entry/page.php'; class MyNewName extends PageNewsEntry { // ... }

Eigener Konstruktur

Möchten Sie beim Erzeugen des Page-Objekt Eigenschaften setzen oder Aktionen durchführen, erzeugen Sie einfach einen eigenen Konstruktor.
Achten Sie dabei darauf, dass der Konsruktor der Parent-Klasse Page immer aufgerufen werden muss!

class PageNewsList extends Page { public $anzahl; /** * Konstruktor * @param Site $site * @param array $field */ public function __construct($site, $field) { parent::__construct($site, $field); // Anzahl setzen $this->anzahl = $this->extra['anzahl'] ? $this->extra['anzahl'] : 5; } }
wb_incandescent

Das System merkt sich welche Seitentypen welche PageExtension verwendet. Wenn Sie eine neue PageExtension hinzufügen oder eine bestehende löschen, müssen Sie die Systemcache leeren bevor diese Änderungen wirksam werden.

wb_incandescent

Diese Erweiterung steht Ihnen ab EGOTEC Version 13 zur Verfügung.

warning

Die PageExtension nutzt PHP SPL Funktionen. Diese sind standardmäßig ab PHP 5.0.0 verfügbar und ab 5.3.0 auch immer aktiviert (können nicht deaktiviert werden). Sollten Sie eine PHP Version unter 5.3.0 verwenden und die PageExtensions nutzen, so vergewissern Sie sich, dass die SPL Funktionen bei Ihnen nicht deaktiviert wurden. Andernfalls kann keine vollständige Funktionalität gewährleistet werden.