Jlog als CMS
Jlog lässt sich nicht nur in bestehende CMS integrieren, sondern auch selbst als CMS (Content Management System) nutzen. Im Folgenden ist deshalb beschrieben, wie man Dokumente in Jlog anlegt und schließlich, wie man eigene Skripte (z.B. ein Gästebuch) in Jlog einbinden kann.
Anlegen von Dokumenten
Im Administrationsbereich lässt sich über die Schaltfläche Inhalte das Formular zum Erstellen von Beiträgen (blog) oder Seiten (page) aufrufen. Aus der Sicht des Autors gesehen gibt es keinen großen Unterschied, ob man einen Artikel oder eine Seite erstellt, die Differenzen stecken eher „unter der Haube“:
- Seiten sind nicht kommentierbar.
- Seiten müssen manuell im Template (personal/template.tpl) verlinkt werden, während Beiträge automatisch in der so genannten Subnavigation auftauchen.
- Sowohl Artikeln als auch Seiten sind Kategorien zuweisbar, d.h. Seiten sind auch über eine bestimmte Kategorie auffindbar.
Es bietet sich z.B. an, Seiten wie das Impressum oder andere eher „statische Inhalte“ auf diese Weise zu verwalten, da sich Jlog um das komplette Design inklusive URL-Aufruf kümmert; gerade Letzteres ist beim Verwenden von mod_rewrite sehr komfortabel gelöst: Jlog kümmert sich um alle URIs, zu denen keine Datei oder Verzeichnis existiert.
Der Aufbau der URIs folgt dabei folgendem Schema: Die vom Benutzer vorgegebene URI wird einfach dem Skript page.php als Parameter url übergeben. Für das Impressum mit der URI impressum sieht das dann z.B. so aus:
page.php?url=impressum
Sind „schöne URLs“, d.h. mod_rewrite aktiviert, lassen sich angelegte Seite auch „direkt“ aufrufen, d.h. statt page.php?url=impressum funktioniert auch
/impressum
Die entsprechende RewriteRule (siehe auch am Ende der Seite) setzt den Aufruf intern um. Um solch eine Seite im Template fest zu „verdrahten“, muss der URI <jlog:homelink />/ vorangestellt werden, d.h. kurz zusammengefasst:
- Standardmäßig:
- <jlog:homelink />/page.php?url=SEITENNAME
- Bei Verwendung „schöner URIs”:
- <jlog:homelink />/SEITENNAME
Einbinden eigener Skripte in Jlog
Ein Blick in das Innere von Jlog offenbart bei genauerem Hinsehen das „Geheimnis“ hinter der „Template-Engine“:
// ganz am Anfang des Skripts
require('..'.DIRECTORY_SEPARATOR.'personal'.DIRECTORY_SEPARATOR.'settings.inc.php');
// ganz viel Code zwischendurch
// genau an der Stelle, an der die Skriptausgabe erscheinen soll
require('..'.DIRECTORY_SEPARATOR.'scripts'.DIRECTORY_SEPARATOR.'do_template.php');
echo $body;
Mit dem ersten Include werden die Konfigurationseinstellungen geladen, das soll uns hier nicht weiter interessieren. Stattdessen ist für uns interessant zu erfahren, was scripts/do_template.php macht, damit $body anschließend die komplette HTML-Ausgabe enthält: Diese Datei erstellt mit Hilfe des Arrays $c und des Templates personal/template.tpl die Ausgabe, wobei für uns im Folgenden zwei Schlüssel besonders wichtig sind:
Der Titel des Skripts
Den Titel des Skripts, z.B. Gästebuch, erwartet do_template.php unter dem Schlüssel meta, d.h. den Titel ihres Skripts setzen sie wie folgt:
$c['meta']['title'] = 'Dies ist der Titel';
Die Ausgabe des Skripts
Die komplette Ausgabe des Skripts muss, damit sie an der richtigen Stelle im HTML-Gerüst steht, unter dem Array-Schlüssel main abgelegt werden, was folgende Konsequenzen hat:
1. Größere HTML-Blöcke können nicht außerhalb von PHP notiert werden (d.h. Ausschalten der PHP-Bearbeitung mit ?>), sondern müssen komplett in $c['main'] geschrieben werden. 1. Statt echo 'irgendwas' heißt es $c['main'] .= 'irgendwas'.
Die komplette Logik des Skripts bleibt ansonsten vollkommen unberührt vom Einbau in Jlog.
Mit dem Einbinden der do_template.php wird nun der Inhalt von $c['main'] im Template an der Stelle von <jlog:content /> eingesetzt, also als Hauptinhalt der entsprechenden Seite dargestellt.
Abschließende Bemerkungen und Hinweise
„Schöne URIs“
Um nun auch „schöne URIs“, z.B. für unser Gästebuch z.B., zu realisieren – sofern dies technisch möglich ist – können wir noch die .htaccess anpassen:
# Verzichte auf Dateiendungen
Options +MultiViews
<IfModule mod_rewrite.c>
RewriteEngine On
# catches all cathegories
# …
# Unser Gaestebuch soll die Seitenzahl als Resource angehangen bekommen
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^gaestebuch/([0-9]+)$" gaestebuch/index.php?p=$1 [QSA]
# *Wichtig* ist dabei, dass in diesem Fall die Regel _vor_ dem folgenden steht,
# da "catches all pages" auch unsere Geastebuchseiten wegfaengt.
# catches all pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule "^([a-z0-9_\-\./,]+)$" page.php?url=$1 [QSA]
</IfModule>
