AddOn-Entwicklung #6 - Seitengenerierung

Das hier beschriebene Hintergrundwissen ist nicht nötig, um ein einfaches AddOn zu erstellen. Fortgeschrittenen hilft es aber möglicherweise, Probleme zu erkennen und beheben zu können. Wem das alles zu hoch ist, der kann gern beim nächsten und letzten Teil weiterlesen.

Das Frontend

Die index.php – der so genannte “Frontend Controller” erzeugt das, was der Besucher zu sehen bekommt. Es lohnt sich, diese Datei etwas zu studieren.
Beim Aufruf einer Seite finden folgende Vorgänge statt (man kann dies alles mehr oder weniger direkt im Datei-Code ablesen):

  1. Eine Seitenanforderung “Request” trifft ein.
  2. Werte werden initialisiert:
    • Die Kernbibliothek wird eingebunden, also alle wesentlichen REDAXO-Funktionen, außerdem Klassen wie OOArticle, rex_article und rex_template.
    • Falls in der master.inc.php -Modus der SETUP-Schalter auf “true” steht, wird die Installationsroutine gestartet.
    • Die AddOns werden in alphabetischer Reihenfolge eingebunden. (Manchmal kann diese Reihenfolge der Grund dafür sein, dass unsachgemäß programmierte AddOns sich gegenseitig in die Quere kommen und nicht funktionieren.) Dabei werden natürlich nur aktivierte AddOns berücksichtigt. Wesentliche Bedeutung beim Einbinden eines AddOns hat wie bereits erklärt die config.ic.php.
    • Der Extension Point ADDONS_INCLUDED wird aufgerufen.
  3. Das rex_article-Objekt für die aktuelle Seite wird erzeugt.
  4. REDAXO rendert den Artikel, unter Zuhilfenahme von Templates und Modulen.
  5. Der erzeugte Inhalt wird im “Output Buffer” abgefangen, um ihn ggf. zu modifizieren.
  6. Der Extension Point OUTPUT_FILTER kommt zum Aufruf. Eigene AddOns können sich an diesem Punkt einklinken und den HTML-Output modifizieren, zum Beispiel für Textersetzungen bei Mehrsprachigkeit oder zum Einbinden von Javascripts, falls ein AddOn diese benötgt.
  7. Der ggf. modifizierte Output wird an den Browser gesandt.

Selbstverständlich ist dies der einfachste Fall: Wenn bestimmte Probleme dazwischen kommen (Seite existiert nicht, Template ist leer o.ä.) treten andere Mechanismen in Kraft, die uns aber hier nicht interessieren.

AddOn in sieben Schritten

Das Backend

Im Backend wird die Datei /redaxo/index.php aufgerufen. Hier passiert logischerweise etwas mehr – es müssen nicht nur die Benutzerrechte ausgewertet werden, sondern je nach URL werden andere Funktionen aufgerufen (erkennbar an dem GET-Parameter ?page= …).

  1. eine Seitenanforderung “Request” trifft ein.
  2. Werte werden initialisiert:
    • Die Kernbibliothek wird eingebunden, also alle wesentlichen REDAXO-Funktionen, außerdem Klassen wie OOArticle, rex_article und rex_template.
    • Falls in der master.inc.php -Modus der SETUP-Schalter auf “true” steht, wird die Installationsroutine gestartet. Achtung: Auch im SETUP-Modus werden alle aktivierten AddOns eingebunden. Daran sollte man sich erinnern, wenn ein AddOn durch das erneute manuelle Ausführen des SETUP in Bedrängnis geraten sollte.
    • Loginprüfung. Wenn kein gültiger Login existiert, wird die Login-Seite aufgerufen.
    • Die Basis-Seiten (Struktur, Medienpool, etc.) des REDAXO-Kerns werden in das Hauptmenü aufgenommen.
    • Die AddOns werden eingebunden, und zwar in alphabetischer Reihenfolge. (Manchmal kann diese Reihenfolge der Grund dafür sein, dass unsachgemäß programmierte AddOns sich gegenseitig in die Quere kommen und nicht funktionieren.) Dabei werden natürlich nur aktivierte AddOns berücksichtigt. Wesentliche Bedeutung beim Einbinden eines AddOns hat die config.ic.php.
    • Der Extension Point ADDONS_INCLUDED wird aufgerufen.
    • Alle weiteren AddOn-Seiten werden mit im Hauptmenü aufgenommen.
    • Die Benutzer-Rechte werden geprüft. Wenn der User für die aufgerufene Seite keine Rechte hat, wird er ggf. auf eine andere Seite geleitet.
    • Der Extension Point PAGE_CHECKED wird aufgerufen.
    • Die entsprechende Seite wird ausgeführt – bei Kern-Seiten findet man diese im Ordner redaxo/include/pages. Bei AddOns wird diese immer im Ordner redaxo/include/name_des_addons/pages/ erwartet.
  3. Der erzeugte Inhalt wird im “Output Buffer” abgefangen, um ihn ggf. zu modifizieren.
  4. Der Extension Point OUTPUT_FILTER kommt zum Aufruf. Eigene AddOns können sich an diesem Punkt einklinken und den HTML-Output modifizieren, zum Beispiel zur Ausgabe spezieller Meldungen an den Redakteur oder zum Einbinden von Javascripts, falls ein AddOn diese benötgt.
  5. Der ggf. modifizierte Output wird an den Browser gesandt.

$REX - Die "Power-Variable"

Die globale $REX-Variable enthält viele Informationen, zum Beispiel über den Request, den Benutzer, die AddOns u.v.m. Beim Entwickeln eines eigenen AddOns wird man oft auf diese Werte zugreifen (müssen) und deshalb oftmals ein global $REX ganz zu Beginn schreiben.

Die wichtigsten Variablen innerhalb der $REX sind:

* $REX['SETUP'] – Steht dieser Wert auf true, wird das Setup gestartet. Nach Abschluss des Setup setzt REDAXO den Wert in der redaxo/include/master.inc.php dann auf "false".
* $REX['REDAXO'] – im Backend steht der Wert auf true, im Frontend auf false
* $REX['HTDOCS_PATH'] – Pfadangabe zum Frontend
* $REX['INCLUDE_PATH'] – Pfadangabe zum Include-Verechnis von Redaxo, also redaxo/include
* $REX['MEDIAFOLDER'] – Pfadangabe zu den Dateien des Medienpools, also der Ordner /files
* $REX['USER'] – Der aktuelle Backend-Benutzer
* $REX['CLANG'] – Sprachen-ID (0 = Standardsprache, meist deutsch, 1 = english, ...)
* $REX['CUR_CLANG'] – ID der aktuellen Sprachen (0 auf einsprachigen Seiten)
* $REX['PAGES'] – alle Daten für das Menü
* $REX['ADDON'] – alle Daten der verfügbaren AddOns
* $REX['VERSION'] – die Hauptversion von Redaxo (zum Beispiel 4)
* $REX['SUBVERSION'] – die Unterversion (zum Beispiel 3)
* $REX['MINORVERSION'] – die Releasenummer (1 für Version 4.3.1)
* $REX['ARTICLE'] – der aktuelle Artikel (nur im Frontend)
* $REX['ARTICLE_ID'] – die ID des aktuellen Artikels (nur im Frontend)
* $REX['START_ARTICLE_ID'] – ID des Startartikels
* $REX['NOTFOUND_ARTICLE_ID'] – ID des 404-Artikels
* $REX['START_CLANG_ID'] – ID der Standardsprache
* $REX['URL_REWRITE'] – wenn true, werden URLs in der Form /ArtikelID-SprachID-Artikelname.html erzeugt. URL-Rewrite-AddOns verändern dies jedoch nochmals.
* $REX['TABLE_PREFIX'] – Präfix der DB-Tabellen - wichtig, falls mehrere Redaxo-Installationen in einer Datenbank laufen sollen.
* $REX['DB'] – die Daten für die SQL-Datenbank-Verbindung
* $REX['PERM'] und $REX['EXTPERM'] – Daten des Rechtesystems, das zum Beipsiel auch von AddOns genutzt werden kann

Interessant zu wissen: Man kann in dieser globalen Variable auch eigene Werte speichern, zum Beispiel mit:

$REX['MY_VALUE'] = $eigener_wert;

Weiter zum letzten Teil 7, Hilfsmittel

Zurück zum Teil 5, Extension Points