|
|
Content Management System in PerlWeb-BaukastenJochen Lillich |
Für kleine und mittelgroße Websites mit Schwerpunkt auf Text und Bild ist WebGUI ein gut geeignetes Content Management System (CMS). Über eine Web-basierte Benutzeroberfläche lassen sich Inhalte verändern, Daten sammeln, Bilder und Dateien verwalten sowie das Layout der Website festlegen. WebGUI speichert seinen gesamten Datenbestand an Inhalten und Layoutelementen in einer Datenbank. Entwickelt und unter der GPL frei lizenziert hat das System die amerikanischen Firma Plainblack Software[1]. Das CMS ist komplett in Perl programmiert und läuft auf Linux- und Windows-Systemen mit verschiedenen Webservern.
WebGUI ist eine reine Webanwendung. Das heißt, dass die Software auf dem Webserver läuft und einfach über einen beliebigen Webbrowser bedient werden kann. Hierzu loggt sich ein berechtigter Benutzer ein und aktiviert die Editier-Funktionen. Daraufhin blendet das System auf den Seiten zusätzliche Menüs und Buttons für die Bearbeitung ein. Wie jedes gute CMS trennt auch WebGUI Inhalte, Layout und Logik voneinander, sodass diese Teile einer Webpräsenz unabhängig voneinander verwaltet werden können.
Inhalte verwaltet WebGUI in Form so genannter Wobjects. Das sind vorgefertigte Elemente, aus denen sich die Website zusammensetzt. Die WebGUI-Distribution bringt bereits viele dieser Wobjects mit, von denen jedes spezielle Eigenschaften hat. Es gibt aber auch Gemeinsamkeiten: So lässt sich zum Beispiel für jedes Wobject festgelegen, in welchem Zeitraum es auf der Website erscheinen darf und wer zur Änderung des Wobjects berechtigt ist.
Das Wobject »Seite« repräsentiert eine Seite der Webpräsenz und kann wiederum Wobjects enthalten. Eigenschaften einer Seite sind unter anderem ihr Titel, ihre Bezeichnung in der Navigation, eine Kurzbeschreibung sowie der URL-Pfad, unter dem sie abrufbar ist. WebGUI verwaltet die Seiten in einer internen Sitemap, deren baumförmige Hierarchie unabhängig von den realen URL-Pfaden der Seiten ist. So kann eine Seite »Kontakt« mit der URL »/kontakt« durchaus der Seite »Infos« mit der URL »/info« untergeordnet sein.
Für statische Inhalte gibt es die Wobjects »Artikel« und »Textelement«. Ein Textelement besteht aus Überschrift und Text. Beim Artikel-Wobject lassen sich zusätzlich Bilddateien und Link-URLs festlegen. Außerdem haben sie eine optionale »Diskussion«, ist diese aktiviert, erscheint unter dem Artikel automatisch ein Diskussionsforum.
Weitere dynamische Wobjects sind etwa »Kalender«, »Abstimmung«, »Umfrage« oder das »Benutzerbeitragssystem«, das es Besuchern ermöglicht, eine Seite laufend mit weiteren Beiträgen zu versehen. Optional können andere Besucher diese Beiträge kommentieren. Auch für FAQ-Seiten oder Linklisten stehen Wobjects zur Verfügung. Die Einbindung externer RSS-Informationen ist mit dem Wobject »Syndicated Content« möglich. Es gibt eine Zwischenablage, die Cut & Paste von Wobjects möglich macht. So können Wobjects auch innerhalb des Systems, zum Beispiel zwischen Seiten, kopiert oder versetzt werden.
Zum Layouten der Seiten dienen Styles und Templates. Ein Style ist eine Vorlage für ein Seitenlayout und besteht aus einem HTML-Rumpf und einem CSS-Stylesheet. Der Rumpf bestimmt das Layout einer Seite und enthält die Elemente, die auf allen Seiten enthalten sein sollen, zum Beispiel den Seitenkopf und die Navigation. Das Stylesheet bestimmt das Aussehen einzelner HTML-Elemente wie Überschriften und Tabellen. Der Style-Autor kann festlegen, an welcher Stelle im HTML-Rumpf die Inhalte einzelner Seiten erscheinen werden. Inhalt und Layout sind kombinierbar, indem einem Seiten-Wobject ein Style zugewiesen wird. Eine Änderung am Style wirkt sich damit sofort auf allen Seiten aus, die diesen Style verwenden.
Templates machen das Layout der einzelnen Wobjects variabel. Sie enthalten Standard-HTML, das sinnvollerweise die CSS-Klassen des Seiten-Styles nutzt, und Platzhalter für die Informationen des jeweiligen Wobjects. Da für jede Wobject-Klasse beliebig viele Templates erstellt werden können, lassen sich zum Beispiel verschiedene Arten von Artikeln auch unterschiedlich darstellen.
Beim Abruf einer Seite erzeugt WebGUI diese dynamisch aus ihren Wobjects. Jedoch benötigen die Wobjects, Styles und Templates neben statischen Inhalten wie Text oder Bildern wiederum selbst oft dynamische Informationen. Die sind in Form so genannter Makros abrufbar. Der Name des Makros ist dabei von einem Caret »^« und einem Semikolon »;« eingefasst. An jener Stelle im HTML-Rumpf eines Seiten-Style, an der ein von WebGUI seitenabhängig generiertes Navigationsmenü angezeigt werden soll, muss der Bearbeiter lediglich das Makro »^Flexmenu;« eingeben. »^LastModified;« liefert das Datum des letzten Seiten-Updates, »^H;« einen Link zur Homepage der Website.
Die Aufteilung in Inhalt, Layout und Logik ist nur dann wirklich sinnvoll, wenn der Zugriff auf diese Bestandteile reglementiert ist. WebGUI verfügt daher über eine ausgefeilte Benutzer- und Rechteverwaltung. Die Benutzerkonten können derzeit entweder in der CMS-Datenbank oder in einem LDAP-Verzeichnis stehen. Neben Benutzername und Passwort verwaltet WebGUI umfangreiche Benutzerprofile, die der Administrator auch noch erweitern kann.
Außer vielfältigen Kontaktdaten und seinem Geburtsdatum kann der Benutzer in seinem Profil auch Präferenzen einstellen. Hierzu gehört zum Beispiel auch, ob er den HTML-Inhalt eines Artikels lieber manuell oder mit Hilfe eines Browser-abhängigen Wysiwyg-Editors bearbeiten möchte.
Zur komfortablen Vergabe von Zugriffsrechten teilt der Administrator die registrierten Benutzer in Gruppen ein. Vorgegeben sind hier unter anderem die Gruppen »Admins«, »Content Managers« und »Style Managers«. Jedem Wobject, von der Seite bis zum Diskussionsforum, wird ein Benutzer als Besitzer zugeordnet. Abhängig vom Wobject erhalten die Gruppen noch verschiedene Lese-, Änderungs- und Moderationsrechte.
Um das Content-Managementsystem weltweit einsetzbar zu machen, ist es auf Internationalisierung und Lokalisierung vorbereitet. Zahlreiche Sprachen für die Administrationsoberfläche sind bereits im Lieferumfang enthalten, darunter auch Deutsch. Auch die integrierte Onlinehilfe ist mehrsprachig angelegt. Eine eingebaute Suchmaschine ermöglicht die einfache Integration einer Suchfunktion in die Website.
Die Systemanforderungen sind nicht besonders hoch: Perl in Version 5.6.x, ein Webserver (beispielsweise Apache, IIS, NES oder I-Planet) sowie MySQL oder PostgreSQL als Datenbank, 10 MByte Plattenplatz und 128 MByte RAM reichen bereits aus.
Da WebGUI in Perl programmiert ist, kann es einfach als CGI-Anwendung auf dem Webserver laufen. Wenn aber die Belastung des Servers durch den CGI-Betrieb zu stark ist, besteht beim Apache-Webserver mit Hilfe des Moduls »mod_ perl« die Möglichkeit, die Leistung erheblich zu steigern. Es sorgt dafür, dass der Perl-Interpreter dem Server jederzeit zur Verfügung steht und nicht bei jedem Skript-Aufruf neu geladen werden muss.
Zunächst ist außer der aktuellen WebGUI-Distribution[2] ein installiertes Perl erforderlich, das aber bei allen Linux-Ausgaben Standard ist. Zusätzlich sind einige Module nötig, die möglicherweise erst aus dem CPAN-Archiv beschafft werden müssen. Dazu dient am besten das CPAN-Modul von Listing 1. Nach dem ersten Aufruf durchläuft die CPAN-Shell ein kurzes Konfigurationsskript, das einfach zu bedienen ist. Danach sorgen die »install«-Kommandos dafür, das betreffende Modul aus CPAN zu laden und zu installieren. Als Hauptverzeichnis der WebGUI-Installation soll hier »/home/WebGUI« dienen. Bei einem WebGUI-Server im Internet erfolgt die Namenszuordnung per DNS, für einen lokalen Test bekommt der Name »webgui.foo.test« der Einfachheit halber in »/etc/hosts« eine Localhost-Adresse zugewiesen:
127.0.18.2 webgui.foo.test
Mit dem Entpacken der Distribution kommt jetzt auch gleich das WebGUI-Verzeichnis auf die Platte:
cd /home tar xvzf webgui-latest.tar.gz mkdir WebGUI/logs touch WebGUI/logs/webgui.log chown -R wwwrun WebGUI/www/uploads WebGUI/logs/webgui.log
Seine Konfigurationsdatei sucht WebGUI im Unterverzeichnis »etc«. Dort liegt aber zunächst nur die Beispieldatei »WebGUI.conf.original«. Diese wird in »webgui.foo.test.conf« kopiert und an die lokalen Gegebenheiten angepasst. Listing 2 zeigt die dafür notwendigen Änderungen.
Listing 1: Module installieren |
01 # perl -MCPAN -e shell 02 cpan> install LWP 03 cpan> install DBI 04 cpan> install DBD::mysql 05 cpan> install Digest::MD5 06 cpan> install Date::Calc 07 cpan> install Image::Magick 08 cpan> install Archive::Tar 09 cpan> install Compress::Zlib 10 cpan> install Cache::Cache 11 cpan> quit |
Listing 2: »webgui.foo.test.conf« |
01 sitename = webgui.foo.test 02 dsn = DBI:mysql:WebGUI 03 dbuser = webgui 04 dbpass = plainblack 05 logfile = /home/WebGUI/logs/webgui.log 06 extrasURL = /extras 07 extrasPath = /home/WebGUI/www/extras 08 uploadsURL = /uploads 09 uploadsPath = /home/WebGUI/www/uploads |
Aus leidvoller Erfahrung sei davor gewarnt, die Konfigurationsdatei einfach nur »WebGUI.conf« zu nennen. Spätestens dann, wenn auf einem Webserver mehrere WebGUI-Sites betrieben werden sollen, braucht jede Konfigurationsdatei einen eindeutigen Namen. Allerdings muss dann der Name der Konfigurationsdatei auch im Perl-Skript »www/ index.pl« stehen. Dazu ist die Zeile »$configFile = "WebGUI.conf";« entsprechend anzupassen.
Am besten funktioniert WebGUI auf einem Apache-Webserver mit dem Zusatzmodul »mod_perl«. Auch diese Software gehört zum Umfang gängiger Linux-Distributionen. Der Apache-Prozess läuft meist unter einem speziellen Benutzerkonto (hier »wwwrun«), was bei den Dateirechten zu berücksichtigen ist.
Die Konfiguration des WebGUI-Servers in der Konfigurationsdatei »httpd.conf« von Apache zeigt Listing 3. In dieser Standardinstallation werden alle Seiten über das Skript »index.pl« abgerufen, weshalb auch alle URLs mit »http:// webgui.foo.test/index.pl/« anfangen. Wen das »index.pl« in jeder URL stört, der kann dies mit Hilfe des Apache-Moduls »mod_rewrite« ändern. Die Rewrite-Regeln in Listing 4 sorgen dafür, dass Apache intern immer über »index.pl«, also über das Hauptskript von WebGUI geht, sobald eine URL nicht auf eine existierende Datei unterhalb »DocumentRoot« verweist.
Listing 3: »httpd.conf« |
01 <VirtualHost webgui.foo.test> 02 ServerName webgui.foo.test 03 DocumentRoot /home/WebGUI/www 04 ErrorLog /home/WebGUI/logs/error.log 05 CustomLog /home/WebGUI/logs/access.log common 06 DirectoryIndex index.pl 07 <Files ~ "\.(pl)$"> 08 SetHandler perl-script 09 PerlHandler Apache::Registry 10 Options +ExecCGI 11 </Files> 12 </VirtualHost> |
Listing 4: Rewrite-Regeln |
01 RewriteEngine On 02 RewriteRule ^/$ /index.pl/home [S=1] 03 RewriteCond /home/WebGUI/www%{REQUEST_FILENAME} !-d 04 RewriteCond /home/WebGUI/www%{REQUEST_FILENAME} !-f 05 RewriteRule ^(/.*) /index.pl$1 [L] |
WebGUI setzt grundsätzlich keine bestimmte Datenbank voraus und arbeitet mit allen DBD-Modulen der DBI-Schnittstelle zusammen. Erfolgreich getestet sind MySQL, PostgreSQL und Oracle, wobei sich MySQL am besten bewährt hat und deshalb auch im Folgenden als Beispiel-Datenbank dient.
Zunächst gilt es, die Datenbank einzurichten, einem eigenen Datenbankbenutzer zuzuordnen und die Basisdaten einzuspielen (Listing 5). Vereinfachend soll für Root hier keine Authentifizierung an der Datenbank notwendig sein. Zum Test der Installation enthält WebGUI ein Perl-Skript, es ist wie folgt im »sbin« Verzeichnis aufzurufen:
cd /home/WebGUI/sbin perl testEnvironment.pl
Die Ausgabe des Skripts sollte in allen entscheidenden Fragen ein »OK« ausgeben. Ist dies der Fall, steht einem ersten Aufruf der Website mit »http://webgui.foo.test« im Browser nichts mehr im Wege. Es erscheint nun die vorgefertigte Beispiel-Website, aber noch ohne Administrationsmöglichkeiten.
Listing 5: MySQL |
01 # mysqladmin create WebGUI 02 # mysql -e "grant all on WebGUI.* to webgui@localhost identified by 'plainblack'" 03 # mysql -e "flush privileges" 04 # mysql WebGUI < WebGUI/docs/create.sql |
Ein Klick auf »My Account« im linken Menü oder auf »User:« rechts oben führt zunächst zum Login. Bislang existieren zwei Benutzerkonten: »Visitor« für unangemeldete Besucher und »Admin« für den CMS-Chef. Nach erfolgreichem Login mit dem Passwort »123qwe« sollte neben »User:« nun »Admin« stehen. Jetzt sind nur noch die Administrationsfunktionen unter »My account« zu aktivieren, dann kann es losgehen. Die hervorragende Lokalisierung von WebGUI lädt dazu ein, zuerst unter »My account | Edit profile« das Benutzerprofil auszufüllen (zumindest eine E-Mail-Adresse ist nötig) und auf die deutsche Sprache umzuschalten.
Abbildung 1 zeigt den Admin-Modus: Jedes Wobject auf der Seite (inklusive der Seite selbst) trägt nun einen Balken mit einem Symbol für die Elementklasse und weitere Buttons: zunächst das rote Löschen-Symbol und den Editier-Button für die Bearbeitung des Wobjects. Pfeil-Buttons bewegen das Wobject in der Hierarchie rauf und runter. Bei Seiten wirkt sich das auf die interne Sitemap und damit auch auf die Navigation aus, bei Seitenelementen ändert sich deren Reihenfolge. »Cut« und »Copy« versetzen beziehungsweise kopieren das Wobject in die Zwischenablage, der Shortcut-Pfeil legt für das Wobject ein »WobjectProxy«-Element in die Zwischenablage - ein Wobject, das immer den Inhalt des originalen Elements widerspiegelt.
Ganz oben blendet WebGUI eine Administrationsleiste ein. Das linke Menü fügt - bezogen auf die aktuelle Seite - ein neues Wobject ein, also entweder eine Unterseite oder ein neues Seitenelement. Das mittlere Menü dient zum Einfügen aus der Zwischenablage. Rechts sind die Funktionen zur WebGUI-Verwaltung zu finden (siehe Kasten "Administrative Funktionen").
Administrative Funktionen |
Baumstruktur: Bestimmt die interne Sitemap durch Umordnung von Seiten. Das beeinflusst die etwa durch das Makro »^FlexMenu;« automatisch erstellte Navigation. Benutzer: Benutzerverwaltung Datenbanklinks: Einrichten von Verbindungen zu anderen Datenbanken. Diese können zusammen mit dem Wobject »SQL Report« verwendet werden. Einstellungen: Allgemeine CMS-Einstellungen, vom Namen der Website bis zu den einzelnen Feldern der Benutzerprofile. Gruppen: Hier lassen sich Benutzer in Gruppen einteilen, die dann die gezielte Rechtevergabe der Wobjects ermöglichen. Hilfe: Dieses Menü führt zum Inhaltsverzeichnis der Onlinehilfe. Mülleimer: Gelöschte Wobjects landen zunächst im Mülleimer und verschwinden erst dann ganz aus dem System, wenn man sie dort löscht oder wenn der ganze Mülleimer geleert wird. Hier verbirgt sich ein kleiner Schwachpunkt: Eine gelöschte Seite kann erst dann durch eine neue Seite unter gleicher URL ersetzt werden, wenn Erstere auch aus dem Mülleimer verschwunden ist. Pakete: Ein Paket ist ein Teilbaum aus Seiten, die man dann anhand des Paketnamens mit einem Klick (auch mehrfach) auf »Inhalt hinzufügen« einbauen kann. Seite überprüfen: Diese Option prüft mit Hilfe von »http://validator.w3c.org«, ob die HTML der aktuellen Seite standardkonform ist. Startseiten: Einige Seiten spielen im CMS eine besondere Rolle. Dazu gehören insbesondere die Startseite, die für »http://webgui.foo.test« angezeigt wird, oder die Seite mit der Fehlermeldung für nicht bekannte URLs. Statistik: Zeigt die WebGUI-Version und einige statistische Informationen an, etwa die Anzahl der Seiten, der Wobjects oder der Benutzer. Styles: Definition der Grundlayouts. Jeder Style besteht zum einen aus einem HTML-Rumpf, in den über Makros dynamische Inhalte eingefügt werden, insbesondere der Seiteninhalt über das Makro »^-;«. Die andere Hälfte jedes Style besteht aus einem Stylesheet mit CSS-Klassen. Templates: Templates bestimmen das Layout des Wobject, zu dessen Namespace sie jeweils gehören. Für jedes Wobject gibt es also mindestens ein Template. Neue Templates kann man am besten durch Kopieren und Editieren erzeugen. Themen: Styles und Templates lassen sich zu Themen zusammenfassen, um sie bequem zwischen den verschiedenen WebGUI-Installationen zu übertragen. Übersetzungen: WebGUI kann die Texte administratrativer Funktionen in beliebig vielen Sprachen anzeigen. Die zur Verwaltung der Texte notwendigen Optionen finden sich hier. Uploads: Hier können CMS-Benutzer Grafiken, andere Dateien und Inhaltsfragmente (so genannte Snippets) mit eindeutigem Namen in verschiedenen Ordnern hinterlegen. Sie werden über die Makros »^I(Bildname);« sowie »^File(Dateiname);« und »^Snippet(Snippet-Name);« in den statischen Inhalt eingebunden. Zwischenablage: Verwaltungsfunktionen für die Zwischenablage, sie lässt sich zum Beispiel wie ein Mülleimer entleeren. |
Der Seiteninhalt ist hier in einem Wobject des Artikel-Typs (Symbol »W«) enthalten. Ein Klick auf den »Edit«-Button ruft den Bearbeitungsdialog auf, der auf mehrere Karteikarten verteilt ist. Die wichtigsten Details stehen immer unter »Wobject Eigenschaften« - hier Titel und Rumpf des Artikels, der in HTML formatiert wird. Das Markup kann man entweder manuell schreiben oder mit Hilfe eines HTML-Editors.
HTML-Editoren |
Wer HTML komfortabler als von Hand eingeben möchte, kann in seinem Benutzerprofil einen von mehreren HTML-Editoren aktivieren. Sie basieren auf Javascript und funktionieren nur mit bestimmten Browsern. WebGUI liefert Last Resort, HTML-Area und Classic (Internet Explorer) sowie Midas für Mozilla mit (Abbildung 3). |
Die nächste Karte bestimmt das Layout des Elements. Der Bearbeiter kann hier ein Template auswählen oder beispielsweise die Titelanzeige verbergen. Besteht das Seiten-Template aus mehreren nummerierten Bereichen, wählt er hier die Nummer jenes Bereichs aus, in dem das Wobject erscheinen soll, und unter »Rechte« legt er fest, in welchem Zeitraum das Wobject angezeigt werden darf. Bei vielen Wobjects lassen sich hier außerdem die Rechte für den Zugriff auf verschiedene Funktionen des Wobjects bestimmen. Auf der Karte »Diskussion« kann dem Wobject durch einen simplen Klick auf »Ja« ein Diskussionsforum angehängt werden. Die anderen Optionen bestimmen, wie frei die Diskussion gestaltet sein soll. Ein Klick auf den »Sichern«-Button schließt die Bearbeitung des Wobjects ab.
Nun soll die Website noch einen Veranstaltungskalender erhalten. Dazu ist zunächst eine neue Unterseite einzurichten, was mit dem Menü links oben ganz einfach ist: »Inhalt hinzufügen | Seite«. Der »Titel« erscheint in der Titelzeile des Browsers, im Vergleich dazu sollte der »Menü Titel« kurz gefasst sein, damit er das Menü links nicht sprengt. Soll die Seite gar nicht im Menü erscheinen, kann man sie »Von der Navigation verbergen«. Obwohl die neue Seite in der WebGUI-internen Sitemap der vorher angezeigten Seite (»/home«) automatisch untergeordnet wird, können die URLs der beiden völlig unterschiedlich sein. Daher ist bei »URL der Seite« durchaus ein Eintrag wie »kalender« möglich (den führenden Schrägstrich denkt sich WebGUI dazu).
Soll WebGUI beim Aufruf der Seite sofort zu einer anderen Seite weiterleiten, kann man deren URL unter »Weiterleitungs URL« eintragen. Die Option »Zusammenfassung« hilft nicht nur als Gedächtnisstütze, sondern wird auch als Inhalt des Meta-Tag »description« verwendet, wenn die »Standard Meta-Tags« aktiviert sind. Darüber hinaus sind noch zusätzliche Meta-Tags möglich (siehe Abbildung 4).
Auf der Karte »Layout« ist vor allem die gleichnamige Listbox interessant, denn hier besteht die Möglichkeit, aus einer Reihe fertiger Seiten-Designs (»Styles«) auszuwählen. Mit »Template« wählt der Bearbeiter die gewünschte Seitenaufteilung in Bereiche. Nach dem »Sichern« stellt WebGUI eine leere Seite dar, die bereits im Menü links aufgeführt ist. Der Befehl »Inhalt hinzufügen | Veranstaltungskalender« legt auf der Seite das gewünschte Wobject an. Nach dem »Sichern« ist ein sofort einsatzbereiter Kalender zu bewundern (siehe Abbildung 5).
Das einheitliche und gut durchdachte Bedienkonzept erleichtert die weitere Einarbeitung in das System. Zudem führt in den meisten Dialogen ein Button zur Onlinehilfe. Für die üblichen Einsatzbereiche einer Webseite stehen Wobjects zur Verfügung. Nicht zuletzt durch einen Entwickler-Wettbewerb von Plainblack[3] kommen ständig neue hinzu, Ende letzten Jahres gewann das Warenkorb-Wobject von Andy Grundman. Plainblack hat vor, den Wettbewerb jährlich zu wiederholen.
Mit steigender Zahl verfügbarer Makros und Wobjects ist WebGUI für immer mehr Arten der Webpräsenz eine flexible Lösung, vor allem für kleinere und mittlere Websites. Wer mehr über WebGUI wissen will, findet in der lebendigen WebGUI-Community auf[5] den besten Einstieg. So präsentiert sich freie Software auch im Web Content Management als kostensparende Alternative zu teurer proprietärer Software. (uwo)
Infos |
[1] Plainblack Software: [http://www.plainblack.com/webgui] [2] WebGUI-Download: [http://www.plainblack.com/downloads/webgui-latest.tar.gz] [3] First Annual WebGUI Community Contest: [http://www.plainblack.com/contest] [4] Vergleich mit anderen CMS: [http://www.plainblack.com/product_comparison] [5] WebGUI-Community: [http://www.webgui-cms.de] |
Der Autor |
Jochen Lillich ist Dipl.-Informatiker (FH) und IT-Teamleiter bei Web.de. Sein Spezialgebiet sind Perl-basierte Webanwendungen im Bereich Groupware und Content Management. |