Redaxo-Addon "Template-Manager"
Dieses Addon zum Content-Management-System Redaxo macht Webseiten noch flexibler. Der Template-Manager gibt auf einer Webseite an beliebigen Positionen Inhalt oder Code aus, der frei definierbar ist. Auf welchen Seiten und in welchen Sprachen die Inhalte angezeigt werden, ist wählbar.
von Adrian Schärli, Azular GmbH
Der Template-Manager arbeitet mit so genannten Boxen und Widgets. Eine Box umfasst eines oder mehrere Widgets. Ein Widget kann zum Beispiel:
- Eigenen PHP-Code ausführen
- Eigenen HTML-Code anzeigen
- Eine Navigation erstellen
- Eine Artikelliste erstellen
- Einen bestimmten Artikel anzeigen

Zusatz: Templates und Metadaten
Das Addon "Template-Manager" listet zudem alle Redax-Seiten in allen Sprachen sowie deren Titel und das aktelle Template. Meta-Infos werden anezeigt, wenn das Addon Meta-Infos installiert und aktiviert ist. Diese Seite gibt eine schnelle Übersicht über die Seiten und dient der effizienten Suchmaschinen-Optimierung der Webseite.
Wozu ein Template-Manager?
Ich liebe die Flexibilität von Redaxo. Dieses CMS machte es sehr einfach, Seiten mit verschiedenen Inhalten zu füllen. Der Template-Manager erweitert diese Flexibilität nun auf das gesamte Template und macht die Modularität auch ausserhalb des Content-Bereichs nutzbar.
Support und Garantie
Gratis-Support kann ich leider nicht bieten, aber natürlich freue ich mich über Feedback und Verbesserungsvorschläge. Die Installation und Verwendung des Addons geschieht auf eigenes Risiko, Garantien übernehme ich keine.
Systemanforderungen
Das Addon funktioniert ab Redaxo Version 4.2.1 aufwärts. Das Backend wurde nur in Deutsch programmiert, respektive der Mischung von Deutsch und Englisch, die mir am verständlichsten schien :-). Weiteres:
- Das Backend wurde nur mit Mozilla Firefox getestet.
- Ein Widget (ownhtml) benötigt das Addon Tinymce.
- Der Zusatz "Templates und Metadaten" benötigt zum Teil das Addon "Meta-Infos".
Installation
- Das Verzeichnis tman in das Addon-Verzeichnis verschieben:
include/addons/tman - Das Addon "Template-Manager" installieren und aktivieren
- Die Benutzerrechte nach Bedarf setzen
Funktionsweise
Im Template-Manager kann eine beliebige Anzahl von Boxen definiert werden. Die Boxen können mit einer beliebigen Anzahl von Widgets gefüllt sein. Die Reihenfolge der Widgets wird bei der Ausgabe berücksichtigt. Die Reihenfolge der Boxen hingegen ist nur der Übersichtlichkeit wegen änderbar.
Eine Box kann in einem Template über diese Funktion ausgegeben werden:
<?php tman::showBox('boxtitel');?>
Für die Boxen im Beispiel (Grafik ganz oben) kann man also mit tman::showBox('left'), tman::showBox('footer') und tman::showBox('top') die ensprechenden Boxen ins Template laden.
Die Methode "tman::showBox()" gibt die Box auf den Seiten und in den Sprachen, welche der Box zugewiesen worden sind. Die Funktion inkludiert die Output-Datein der Widgets (z.B. navigation.output.inc.php), aber davon mehr im nächsten Kapitel.
Widgets
Ein Widget kann alles sein und alles tun, was man will. Das Prinzip ist ähnlich wie bei den Redaxo-Modulen: Ein Widgets sind Mini-Templates, die über einen Ein- und Ausgabebereich verfügen. Widgets sind einfach aufgebaut. Ein Widget benötigt zwei Dateien, widget.input.inc.php und widget.output.inc.php. Die Widget-Parameter sind als Json-Array in der Datenbank hinterlegt.
Innerhalb dieser Dateien erhält man über den folgenden Code auf ein assoziatives Array mit den Widget-Parametern:
$arrParams = $objWidget->readParams();
Zum Speichern der Parameter verwendet man diesen Code, wobei $arrData ein assoziatives Array sein muss:
$objWidget->writeParams($arrData);
Die Methode writeParams() encodiert das Arrays mittels json_encode und speichert dieses in der Tabelle rex_tman_box. In dieser Tabelle werden übrigens alle Definitionen und Parameter von Boxen und Widgets gespeichert.
Aktuell sind folgende Widgets verfügbar:
- article: Zeigt einen Redaxo-Artikel an
- categorylist: Zeigt eine Navigation mit allen Artikeln einer Kategorie
- code: Führt den eingegebenen PHP-Code aus
- image: Zeigt das gewählte Bild an (aus dem Medienpool)
- navigation: Zeigt eine Redaxo-Navigation an
- ownhtml: Gibt den eingegebenen Inhalt aus (benötigt Tinymce)
- metainfo: Gibt die Metadaten aus (Titel, Description, Keywords, und weitere)
Eigene Widgets schreiben
Damit ein Widget "meinwidget" funktioniert, müssen wenige Regeln befolgt werden:
- Das Widget besteht aus einem Verzeichnis mit dem Namen "meinwidget" mit mindestens zwei Dateien "meinwidget.input.inc.php" und "meinwidget.output.inc.php". Weitere Dateien im Verzeichnis meinwidget stören nicht.
- Das Verzeichnis meinwidget muss im Ordner tman/widgets/ abgelegt werden
Am besten nutzt man ein Widget wie "navigation" als Vorlage für ein neues Widget.
Übrigens implementiert das Addon eigene Klassen für Formulare und Listen, tman_items und tman_form. Mit diesen Klassen lassen sich sichere Formulare und Datenbankabfragen einfach und flexibel realisieren. Logisch, dass ich dieser Meinung bin - ich habe dia Klassen ja auch geschrieben :-). Man kann natürlich auch andere nutzen.
Definition und Konfiguration
Der Template Manager unterscheidet:
- Definition (für Box und Widget): Darstellungsoptionen, Seiten- und Sprachauswahl
- Konfiguration (nur Widgets): Inkludiert die Datei widget.input.inc.php (siehe oben) und speichert die spezifischen Widget-Parameter in der Datenbank.
Beispiel für Box-Definition:

Beispiel Konfiguration eines Widgets "Navigation":

Ausgabe
Für die Ausgabe stehen sowohl für Boxen als auch für Widgets mehrere Optionen zur Verfügung:
- none: Die Ausgabe erfolgt genau so wie in der Datei widgetname.output.inc.php definiert. Dies ist zum Beispiel bei der Ausgabe der Metadaten (Widget metainfo) zu empfehlen.
- 1 div: Der Ausgegebene Code wird in ein div-Element gepackt
- 2 div ... 8 div: Die Ausgabe wird in die entsprechende Anzahl Container gepackt
Das Styling der DIV-Elemente für eine Box:
<div class="tbox" id="tbox-boxtitel">
<div class="i">
<div class="ii">
...
Widgets
...
</div></div></div>
Ein Widget wird wie folgt verpackt:
<div class="twidget widgetname" id="twdg-widgetname-id">
<div class="i">
<div class="ii">
...
Widget-Content
...
</div></div></div>
Known Bugs
Widget "ownhtml"
- Redaxo-Links werden nicht ausgeführt. Direkter Seitenlink verwenden.
Fehler gefunden? Bitte hier melden. Vielen Dank.
