codecentric Publikation 06/09

Einführung in OpenCMS

Autor:

Content Management Systeme ermöglichen das Betreiben von Webseiten, deren Inhalte redaktionell ohne vertiefendes technisches Wissen bearbeitet werden können. Redakteure sollen sich in erster Linie um Inhalte kümmern, welche sie in vorgefertigte Seiten (so genannte Templates) einfügen. Technische Aspekte sollen die redaktionelle Arbeit so wenig wie möglich beeinflussen.
Dieser Artikel gibt eine Einführung in OpenCms, ein in Java geschriebenes Open Source Content Management System der Firma Alkacon Software1. Die Zielgruppen des Artikels sind Entwickler und auch Administratoren, auf die redaktionelle Sicht wird nur grundlegend eingegangen. Im Vordergrund stehen die Konzepte von OpenCms, eine einfache Installationsanleitung und die Entwicklung erster Templates in Form eines Workshops, durch den ohne spezielle Vorkenntnisse ein Eindruck von OpenCms gewonnen werden kann. Mit diesem Grundwissen ausgestattet kann man eigene Projekte in OpenCms angehen und sich leicht in weiterführende Themen einarbeiten.

Konzeption

OpenCms hat ein einfaches Konzept, Inhalte und Templates zu verwalten. Innerhalb des Cms werden alle Ressourcen wie in einem Dateisystem abgelegt, also in Datei- / Verzeichnisstrukturen. Tatsächlich speichert OpenCms alle Inhalte in einer Datenbank, das Dateisystem ist also nur virtuell und wird deswegen auch VFS (Virtual File System) genannt. Zugriff auf dieses Dateisystem und die Möglichkeiten damit zu arbeiten bietet die OpenCms Web-Oberfläche (der so genannte Workplace), einen speziellen Client gibt es nicht.

Unterschieden wird grundsätzlich zwischen Offline und Online Inhalten. Nur die Online Inhalte werden vom Cms bei Aufruf einer Webseite ausgeliefert, die Offline Ressourcen sind für redaktionelle Arbeiten gedacht. Dazu stehen Redakteuren über den Workplace mehrere Editoren, WYSIWYG 3 oder auch reine Quelltexteditoren, zur Verfügung. Über eine Vorschau kann der eingepflegte Inhalt angesehen werden, bevor er Online gestellt wird. Der Vorgang, eine Ressource von Offline nach Online zu bringen, wird als Publizieren bezeichnet.

Unterscheidung offline/online

Zusätzlich wird innerhalb von OpenCms logisch zwischen redaktionellen Inhalten (also Webseiten, VFS Ordner: /sites) und dem System (Templates, Funktionalität, VFS Ordner: /system) unterschieden. Templates und andere Funktionalitäten werden in OpenCms innerhalb von Modulen bereitgestellt. Ein Modul ist nichts anderes, als eine Anzahl von Ressourcen, die logisch zusammen gehören.

OpenCms bietet dabei eine Multi User / Multi Site Umgebung, es können in einer Open- Cms Instanz mehrere Sites von mehreren Benutzern gepflegt werden. Dabei können individuell Berechtigungen vergeben werden, so dass z.B. ein Benutzer Zugriff auf zwei Sites hat, aber nur in einer selber publizieren kann. Auch auf Templates kann der Zugriff über Berechtigungen gesteuert werden.

Ein weiteres Feature ist der statische Export von Ressourcen oder auch kompletten Sites. OpenCms bietet zwar auch intelligente Cachingmechanismen, jedoch ist es sinnvoll, statische Inhalte, wie z.B. Bilder oder PDF Dateien, nicht bei jedem Zugriff vom Cms ausliefern zu lassen, sondern in das RFS (Real File System ~ Festplatte) schreiben zu lassen. Die exportierten Inhalte können dann von einem Web Server direkt ausgeliefert werden, ohne den OpenCms Server zusätzlich mit Anfragen zu belasten.

Publizierung und statischer Export

OpenCms kann Inhalte zusätzlich abhängig von der gewählten Sprache (Locale) ausliefern. Mehrsprachige Internetauftritte zu realisieren ist kein technischer Mehraufwand, es müssen nur redaktionell die Inhalte der entsprechenden Sprache zugewiesen werden. Dabei werden Ressourcen im VFS nicht mehrfach (index_de.html, index_en.html, etc.) angelegt, sondern einfach die entsprechenden Textpassagen einer Ressource (index.html) einer Sprache zugewiesen und diese dann automatisch der aktuellen Locale entsprechend dargestellt.

Installation

Der folgende Abschnitt stellt einen Leitfaden zur Installation von OpenCms dar. Es handelt sich dabei um eine Grundinstallation, der komplette Umfang von Konfigurationsmöglichkeiten und Erweiterungen kann im Rahmen dieses Artikels nicht beschrieben werden. An dieser Stelle sei auf die weiterführende Artikel am Ende des Artikels verwiesen.

Für die Installation wird ein Applikationsserver (z.B. JBoss4) und ein Datenbanksystem (z.B. MySQL5) benötigt. Ein Webserver ist optional, da auch über denn Applikationsserver die Webanwendung direkt angesprochen werden kann. Die OpenCms Anwendung selber steht kostenfrei auf der Produkt Homepage zum Download bereit6. Für diesen Artikel wird die Version 7.0.5 verwendet.

Das OpenCms Paket wird entpackt und die Datei opencms.war in das Deploy-Verzeichnis des jeweiligen Applikationsservers kopiert. Die war-Datei wird entpackt und in ein Verzeichnis mit gleichem Namen kopiert, hier Beispiele für Tomcat und JBoss:

Tomcat: $CATALINA_HOME/webapps/opencms/

JBoss: $JBOSS_HOME/server/default/deploy/opencms.war/

Nach erfolgreichem Deployment kann die Installationsroutine von OpenCms über folgende URL aufgerufen werden:

http://localhost:8080/opencms/setup/

Nun folgen einige sich selbst erklärende Schritte für die grundlegende Konfiguration von OpenCms, wie Angaben über das genutzte Datenbanksystem und eine Auswahl von OpenCms Modulen. Je nachdem, wie viele Module man installiert, dauert die folgende Installation bis zu ca. 10 Minuten.

Ist die Installationsroutine durchgelaufen wird der Applikation Server durchgestartet und unter der folgenden URL kann der Workplace aufgerufen werden:

http://localhost:8080/opencms/opencms/system/login/

Der User für den ersten Login ist „Admin“ mit dem Passwort „admin“. Nach erfolgreichem Login öffnet sich ein Popup mit dem Workplace, welcher im folgenden Abschnitt näher beschrieben wird.

Die Installation von OpenCms ist damit abgeschlossen.

Erste Schritte

Der Workplace startet mit der Explorer Ansicht, welche Zugriff auf die Ressourcen des Cms bietet, angelehnt an einen Dateibrowser für Dateisystem. Jedoch handelt es sich bei den Ressourcen, die nun angezeigt werden, um das bereits eingangs erwähnte OpenCms VFS – das Virtuelle File System. Physikalisch liegen diese Ressourcen inkl. ihrer Eigenschaften, wie ihrem Titel oder dem Datum der letzten Änderung, in der OpenCms Datenbank und nicht direkt auf der Festplatte. Es ist wichtig, sich diesen Unterschied bewusst zu machen, um später das Modulformat oder einen Content Export zu verstehen. Neben der Explorer Ansicht kann im Workplace oben mittig über eine Dropdown Liste zur Administrations-Ansicht gewechselt werden. Über diese Ansicht können Einstellungen an OpenCms und dessen Funktionalitäten vorgenommen werden. Vorerst bleiben wir aber in der Explorer Ansicht.

Bevor es nun an eine Einführung des Workplace geht, sollten die Eigenschaften des aktuellen Benutzers eingestellt werden. Dazu wird oben rechts im Workplace „Preferences“ gewählt. Für diesen Artikel ist es sinnvoll, die Sprache von English auf Deutsch umzustellen, da die beschriebenen Features mit ihren – wenn vorhanden – deutschen Namen beschrieben werden. Andere Einstellungen sind vorerst optional und können nach Belieben angepasst werden.

Workplace

Zurück im Explorer View kann oben links zwischen dem Online und dem Offline Projekt umgeschaltet werden. Um den Unterschied zu sehen, kann z.B. der Titel der index.jsp (letzte Datei im Root Verzeichnis bei Standardinstallation) geändert werden. Dazu wird das Datei-Icon der index.jsp angeklickt und im Kontextmenü „Eigenschaften“ gewählt (bitte sicherstellen, dass das Offline Projekt gewählt ist, im Online Projekt kann nicht direkt geändert werden!). Es wird ein Formular geöffnet, in dem der „Title“ geändert und mit „Ok“ gespeichert wird. Schaltet man nun über das Projekt Dropdown Menü zwischen Online und Offline Projekt hin und her, sieht man, wie im Online Projekt noch der alte und im Offline Projekt der neue Titel erscheint. Im Offline Projekt hat sich zudem die Farbe des Dateinamens, als auch die Icons der Datei geändert. Rote Farbe im Dateinamen sowie das Fähnchen Icon weisen auf eine geänderte Ressource hin. Außerdem ist ein Schloss Icon hinzugekommen, welches anzeigt, dass die Ressource zurzeit gesperrt ist. Ressourcen werden bei Änderung automatisch durch den aktuellen Benutzer gesperrt. Dadurch soll verhindert werden, dass andere Benutzer gleichzeitig Änderungen an derselben Ressource durchführen. Um die Änderung am Titel nun auch Online zu schalten wird wiederum das Icon der Datei angeklickt und im Kontextmenu „Direkt veröffentlichen“ gewählt. Der folgende Dialog fasst die zu publizierenden Ressourcen noch einmal zusammen und wird mit „Ok“ bestätigt, um den Publizierungsvorgang zu starten. Nun sind die Inhalte zwischen dem Online und Offline Projekt wieder identisch und die Sperrung der Ressource wird automatisch wieder aufgehoben.

Direkt veröffentlichen

Sites

Bisher wurde nur in der so genannten Default Site gearbeitet, hier liegen unter anderem die Alkacon Beispiele und die OpenCms Dokumentation. Ein eigenes Projekt sollte auch in einer eigenen Site angelegt werden. Um eine eigene Site anzulegen, sind nur wenige Schritte notwendig. Innerhalb von OpenCms wird ein Site Ordner, der die Root der neuen Site darstellt, angelegt. Zusätzlich muss in der OpenCms Konfiguration die Site bekannt gemacht werden.

Sites befinden sich im VFS im Ordner /sites/, entsprechende befindet sich die Default Site unter /sites/default/. Um einen neuen Ordner unter /sites/ anlegen zu können, wird im Workplace die Site „/“ anstatt „/sites/default/“ gewählt. Der Root Ordner „/“ ist genau genommen keine Site, sondern die tatsächliche Wurzel des VFS, unter der sich alle Ressourcen inkl. Module, Templates und natürlich die eigentlichen Sites befinden. Hier ist es möglich, mit Hilfe der Explorer Ansicht in den /sites/ Ordner zu wechseln und dort einen neuen Ordner anzulegen. Dazu wird – sobald man sich im /sites/ Ordner befindet – oben im Workplace das Icon „Neu“ gewählt. Jetzt muss der Ressourcetyp „Verzeichnis“ gewählt und ein Name (zum Beispiel „workshop“) eingegeben werden. In diesem Dialog ist es direkt möglich, in dem neu angelegten Ordner auch eine index.html (Typ „Seite mit Freitext“) mit anzulegen. Nach diesem Schritt gibt es einen neuen Ordner mit einer index.html.

Neue Seite anlegen

Über den bereits beschriebenen Weg (Kontextmenü -> Eigenschaften) sollten jetzt sowohl dem Ordner als auch der index.html ein Titel vergeben werden. Hat ein Site Ordner einen Titel, wird dieser anstatt des Pfades (wie bei „/sites/default/“) im Site Dropdown Menü aufgelistet. Den Titel der index.html soll das noch zu schreibende Template auslesen und darstellen.

Zu guter Letzt werden sowohl der neue Ordner, als auch die index.html publiziert. Da es sich nun um zwei Ressourcen handelt macht es Sinn, beide auf einmal zu veröffentlichen. Dazu wird der neue Site Ordner publiziert und im Publizierungsdialog „Veröffentliche alle Ressourcen im Ordner“ mit gewählt (Standard Einstellung). Alternativ kann das komplette Projekt publiziert werden, wenn es unveröffentlichte Ressourcen in mehreren Ordnern gibt. Dazu wird „Veröffentlichen“ rechts neben dem Dropdown für die Projekte gewählt.

Nun muss OpenCms die neue Site bekannt gemacht werden. Dazu wird die Konfigurationsdatei „opencms-system.xml“ (zu finden unter $OPENCMS_HOME/WEB-INF/ config/) bearbeitet. Der <servers>-Knoten wird um einen Eintrag erweitert, in diesem Beispiel heißt der Ordner der neuen Site „workshop“ – der Domänenname wird hier analog gewählt, dies ist aber keine Pflicht, wichtig ist nur, dass er eindeutig ist:

<validationhandler class=“org.opencms.security.CmsDefaultValidationHandler“/>
<sites>
<workplace-server>http://localhost:8080</workplace-server>
<default-uri>/sites/default/</default-uri>
<site server=“http://localhost:8080“ uri=“/sites/default/“/>
<site server=“http://workshop:8080“ uri=“/sites/workshop/“/> (Neuer Eintrag)
</sites>
<runtimeproperties>

Das Mapping von Sites erfolgt in OpenCms über den Domänennamen. Wird nun über einen Browser die URL

http://workshop:8080/opencms/opencms/

aufgerufen, wird der Inhalt der Workshop Site angezeigt. Um dies ohne einen DNS Dienst testen zu können, wird auf dem lokalen System die Hosts-Datei erweitert:

Unix: /etc/hosts

Windows: $WINDOWS_HOME/system32/drivers/etc/hosts

Dem Loopback Interface 127.0.0.1 wird zusätzlich der DNS Name „workshop“ gegeben:

127.0.0.1 localhost workshop

Wenn diese Datei gespeichert ist, kann ein Browser aufgerufen werden und die obige URL zeigt den aktuell publizierten Stand der eigenen Site. Eine leere Seite ist das Ergebnis, dies ist kein Fehler, es ist schließlich bisher nur eine leere index.html publiziert. Um einen ersten Inhalt anzuzeigen, kann die index.html testweise mit einem minimalen Inhalt gefüllt werden. Im Kontextmenü der index.html wird dafür „Erweitert“ -> „Quelltext editieren“ gewählt und direkt HTML eingefügt:

<h1>Hallo Welt</h1>

Redaktionell werden Inhalte nicht auf diese Weise gepflegt, dieser Weg stellt für den Workshop nur die schnellste Methode dar, einen ersten Inhalt zu erstellen. Für redaktionelle Arbeiten müssen erst Templates bereitgestellt werden, die die technischen Aspekte von den inhaltlichen trennen. Ein Redakteur soll im besten Fall niemals mit dem Quelltext einer Seite in Berührung kommen – die Möglichkeit Quelltext direkt zu bearbeiten ist jedoch aus Erfahrung in Projekten sehr hilfreich, um schnell Darstellungsproblemen einer Seite und redaktionellen Fehlern auf den Grund zu kommen.

Templates

Ein Template bildet eine Schablone für eine Seite ab, oder besser gesagt für eine Art von Seitentyp. In der Regel besteht eine Website aus mehreren Seitentypen, als einfachstes Beispiel eine Willkommens-/Startseite und ein Seitentyp der Inhalte präsentiert. In den nächsten Schritten werden beispielhaft diese zwei Templates erstellt – inklusive Seitennavigation. Gerade die automatische Erstellung der Navigation ist eine Stärke von Content Management Systemen. Alle Seiten einer Site anzupassen, wenn sich ein Punkt in der Navigation geändert hat („Startseite“ Link wird umbenannt zu „Home“), ist erstens viel Arbeit und zweitens sehr fehleranfällig.

Um ein eigenes Template zu schreiben muss der technische Hintergrund eines Templates verstanden werden. Ein Template ist prinzipiell nichts anderes, als eine statische Seite, nur dass die dynamischen Teile durch Platzhalter ersetzt werden, die durch das Cms gefüllt werden. Zum folgenden Beispiel-Quelltext soll ein Template entwickelt werden:

<h1>Willkommen auf der Workshop Testseite<h1>

<p>Hier stehen einige Worte des Grußes</p>

<a href=”/opencms/opencms/ueberuns/index.html/”>Weiter…</a>

Das Template, welches eine solche Seite abbildet, ist äußert simpel, da nur ein Standardinhalt und keinerlei dynamische Inhalte (Newsticker, Navigation, etc…) enthalten sind. Der Pseudocode des Templates sieht folgendermaßen aus:

<import cms Tag Bibliothek /> <cms:zeigeInhalt />

Es wird nur die OpenCms Tag Bibliothek (Tag Library, kurz Taglib, stellt durch eigene Tags Funktionen bereit) eingebunden und über ein spezielles OpenCms Tag der Inhalt angezeigt. Der Inhalt wird redaktionell im Workplace über einen Editor eingepflegt. Hier ist die Trennung zwischen der Template-Entwicklung und der Pflege von Inhalten ersichtlich. Der Template-Entwickler kümmert sich nicht um den Inhalt, der Redakteur nicht um die Darstellung.

Das Template für den Inhalt unterscheidet sich nur minimal von dem der Startseite. Zusätzlich zum pflegbaren Text wird die Navigation der Seite eingebunden, hier der Pseudocode:

<import cms Tag Bibliothek />

<alleNavigationselemente>

<a href=“${aktuellesElement.Pfad}“>${aktuellesElement.Name}</a>

</alleNavigationselemente >

<cms:zeigeInhalt />

Die Navigation wird über ein so genanntes iterierendes Tag eingebunden, also ein Tag das über n Elemente die gleiche Funktionalität abbildet. Für jedes Element wird der Code zischen dem öffnenden und schließenden Tag eingebunden. Für drei Seiten, welche in der Navigation aufgenommen sind7, werden also entsprechend drei Links geschrieben.

Module

Nun sollen die Templates implementiert werden. Dazu wird zuerst ein eigenes Modul angelegt. Wie bereits eingangs erwähnt, bündelt ein Modul Ressourcen, die Trennung ist rein logisch. Es kann z.B. pro Funktion oder pro Kunde ein Modul erstellen, das Templates und/oder weiteren Funktionalitäten (OpenCms ist Open Source und Java basierend, eigene Entwicklungen werden auch in Modulen bereitgestellt) enthalten wird. Bestandteil eines Moduls ist neben den Modul-Ressourcen auch die Datei manifest.xml, welche die Meta-Informationen zu den Ressourcen enthält, wie deren Eigenschaften (z.B. der Titel), Berechtigungen und eine eindeutige Ressource-ID.

Es ist nicht verpflichtend ein eigenes Modul zu erstellen, es hilft jedoch, die eigene Arbeit von anderen Komponenten des Systems zu trennen. Um ein eigenes Modul in OpenCms zu erstellen wird die Administrator Ansicht gewählt und dort der Punkt „Modulmanagement“. Über „Modul neu Anlegen“ wird ein neues Modul in OpenCms erstellt. Im folgenden Dialog sollten Paketname (Beachte: Name nach Java Package Nameskonventionen, z.B. „de.workshop.module“) und Modulname gepflegt werden.

Modul neu anlegen

Das automatische Anlegen der Modulverzeichnisse funktioniert über den Dialog in früheren Versionen (z.B. 7.0.2) von OpenCms nicht, d.h. dass das Modulverzeichnis und darin das Template Verzeichnis noch per Hand angelegt werden musste. Sollten Sie eine ältere Version von OpenCms benutzten muss das entsprechende Verzeichnis noch anleget werden:

Dazu wird wieder die Explorer Ansicht gewählt, dort die „/“ Site und unter /system/modules/ ein Verzeichnis mit dem Modul Paketnamen (im Beispiel „de.workshop.module“) und darin das Template Verzeichnis /templates angelegt und publiziert. Nach diesem Schritt muss OpenCms einmal neu gestartet werden, da Informationen über Module in der Konfigurationsdatei opencms-modules.xml gespeichert werden, diese Datei aber nur initial beim Start der OpenCms Webapplikation gelesen wird.

Modulverzeichnisse lesen

Nach dem Neustart wird in der Modulmanagement Ansicht das neue Modul mit angezeigt.

Workshop Modul

Implementierung

Im Rahmen dieses Workshops sollen, wie oben bereits erwähnt, zwei Templates erstellt werden; eine Startseite und eine Inhaltseite. Die Startseite enthält nur einen redaktionell pflegbaren Text, die Inhaltseite soll zusätzlich eine Navigation enthalten, die es ermöglicht automatisiert zwischen den Seiten zu verlinken, ohne Links auf den Seiteninhalten zu pflegen.

Um ein Template zu erstellen, wird im Verzeichnis /system/modules/ de.workshop.module/templates/ in der „/“ Site eine neue Ressource vom Typ JSP angelegt, z.B. startseite.jsp (Neu -> JSP). Wichtig ist beim Anlegen der Ressource neben dem Typ JSP noch die Vergabe des Titels (z.B. „Workshop Startseite“)und der erweiterten Eigenschaft „template-elements“. Der Titel wird in der Dropdownliste der verfügbaren Templates beim Anlegen neuer Seiten mit aufgeführt – ist der Titel nicht gepflegt wird nur der Ressourcenname der JSP angezeigt („startseite.jsp“ anstatt z.B. „Workshop Startseite“). Für das Template selber ist es wichtig, die Textblöcke zu definieren, welche es enthalten soll. Ein Textblock kann zum Beispiel „Neuigkeiten“ oder „Haupttext“ sein. Auf der Startseite soll es nur einen Bereich geben, es reicht also ein Element z.B. „Text“ zu definieren. Dazu wird die Eigenschaft „template-elements“ genutzt (Kontextmenu -> Eigenschaften -> Erweitert). Hier werden kommasepariert die Textblöcke aufgeführt. Es ist möglich, einen so genannten Nice Name („Schöner Name“, der für Redakteure sichtbar ist) zu vergeben. Der Textblock Name und der Nice Name werden durch das Pipe Symbol ( | ) getrennt. Zusätzlich kann der Textblock noch durch ein Asterisk Symbol ( * ) am Ende des Namens zum Pflichtelement gemacht werden. Der einzufügende Text lautet also „text*|Text“ (siehe folgendes Bild).

Textblöcke im Template

Der Code des Startseitentemplates sieht folgendermaßen aus:

1 <%@ taglib prefix=“cms“ uri=“http://www.opencms.org/taglib/cms“ %>

2

3 <cms:include element=“text“ />

Das Template macht nichts weiter, als die OpenCms Taglib zu importieren und mit der dadurch bereit gestellten Funktionalität das Element „text“ auszulesen und darzustellen.

Um das Startseitentemplate zu testen, wird in der Root der Workshop Site eine index.html vom Typ „Seite mit Freitext“ angelegt bzw. das Template der bereits existierenden index.html über deren Eigenschaften geändert. Die Ressource bekommt als Template die „Workshop Startseite“ zugewiesen.

Workshop Startseite anlegen

Nun wird über das Kontextmenu der Ressource „Seite bearbeiten“ gewählt und der WYSIWYG Editor öffnet sich. Hier kann nun der Text der Startseite gepflegt und formatiert werden. Wichtig ist, dass die richtige Sprache und der gewünschte Textblock „Text“ gewählt ist, da nur dieser vom Template inkludiert wird.

WYSIWYG Editor

Nach dem Speichern und Schließen (Symbol mit Diskette und x) kann die Vorschau der Seite durch Linksklick auf die index.html aufgerufen werden. Alternativ kann man auch ohne den Editor zu verlassen die Lupenfunktion oben rechts im Editor nutzen, dies ist hilfreich, wenn viele Änderungen an einer Ressource vorgenommen werden und nicht für jeden Zwischenvorschau der Editor verlassen werden soll.

Dynamische Navigation

Das Template der Inhaltsseite soll neben dem Text auch eine dynamische Navigation beinhalten. Die Ressource des Templates wird analog zum Startseitentemplate angelegt, der Name der JSP ist „inhalt.jsp“, der Titel „Workshop Inhaltsseite“.

Bevor nun die Navigation selber implementiert wird, werden drei neue Ressourcen in der Root der Workshop Site angelegt, alle vom Typ „Seite mit Freitext“ unter Verwendung des Templates „Workshop Inhalt“, beim Anlegen wird dabei die Option „In Navigation mit aufnehmen“ ausgewählt und ein „Navigationstext“ vergeben. Der Einfachheit halber werden die Seiten seite1.html, seite2.html und seite3.html (Titel resp. Seite 1-3) genannt. Von dieser Namenskonvention ist auf realen Sites abzuraten, da kein Bezug zwischen dem Namen und dem Inhalt hergestellt werden kann, für die Demonstration der Navigation sind die Namen jedoch gut geeignet.

Zur Navigation hinzufügen

Das Inhaltsseitentemplate wird nun um die Fähigkeit erweitert, die Eigenschaft „In Navigation mit aufnehmen“ auszulesen und als Navigationselement mit in die Seite einzubauen. OpenCms bietet von Haus aus keinen Tag, der diese Aufgabe übernimmt. Für dieses Beispiel wird direkt über ein Scriptlet (Java Code in der JSP) die Navigation ausgelesen. Dies ist aus programmiertechnischer Sicht ein sehr schlechter Stil, der Code wird schlecht lesbar und schlecht wartbar. Eleganter ist es, eine eigene Taglib mit einem Navi-Tag bereit zu stellen, was jedoch den Rahmen dieses Workshops sprengen würde. Hier sei auf das Sun Tag Library Tutorial verwiesen.

Die inhalt.jsp hat folgenden Quelltext:

1 <%@ page import=“java.util.List“ %>

2

3 <%

4 org.opencms.jsp.CmsJspActionElement cms = new

org.opencms.jsp.CmsJspActionElement(pageContext, request, response);

5 List navi = cms.getNavigation().getNavigationForFolder();

6 pageContext.setAttribute(„naviElemente“, navi);

7 %>

8 <%@ taglib prefix=“cms“ uri=“http://www.opencms.org/taglib/cms“ %>

9 <%@ taglib prefix=“c“ uri=“http://java.sun.com/jsp/jstl/core“ %>

10

11 Navigation:

12 <ul>

13 <c:forEach var=“naviElement“ items=“${naviElemente}“>

14 <li><a href=‘<cms:link><c:out value=“${naviElement.resourceName}“ /></ cms:link>‘ > <c:out value=“${naviElement.navText}“/></a></li>

15 </c:forEach>

16 </ul>

17

18 <cms:include element=“text“ />

Zeilen 1-7 sind der Scriptlet Code, welcher über die OpenCms API die Navigation holt und als Liste „naviElemente“ bereitstellt. Zeilen 8 und 9 importieren die benötigten Taglibs, neben der OpenCms Taglib wird auch die JavaServer Pages Standard Tag Library (JSTL9) eingebunden. Die JSTL wird genutzt, um über die Navi Elemente zu itterieren (<c:forEach>) und Variablen auszugeben (<c:out>). Neu hinzugekommen ist der <cms:link>-Tag, welcher Links so manipuliert, dass sie in OpenCms auf das gewünschte Ziel verweisen (ein Link auf „/index.html“ würde durch <cms:link> auf „/opencms/opencms/index.html“ umgebaut).

Jetzt gilt es, die drei Inhaltseiten mit Beispieltexten zu füllen und eine der drei Seiten aufzurufen. Über dem Text wird nun eine Liste von verlinkten Seiten ausgegeben, welche dynamisch ermittelt wurden. Nun können nach Belieben weitere Seiten angelegt werden, die dann auch in der Navigation auftauchen. Die Änderung eines Navigationstextes in den Eigenschaften einer Seite wird durch die dynamische Ermittlung auch direkt auf alle Inhaltseiten übernommen – es ist keine weitere Anpassung mehr nötig.

Seite mit Navigation

Aufruf der publizierten Liste

Als letzter Schritt soll das Publizieren der angelegten Seite beschrieben werden. Erst durch den Publizierungsvorgang werden die Inhalte auch Live (Online) bereitgestellt, sind also nicht nur über den Workplace (Offline) direkt aufrufbar. Dazu gibt es zwei Möglichkeiten, zum einen das Projekt zu publizieren, also alle geänderten Ressourcen des Projekts, oder wie bereits beschrieben eine Ressource über ihr Kontextmenü direkt zu veröffentlichen. Da im Rahmen des Workshops sowohl Inhalte gepflegt wurden als auch ein Modul inkl. Templates erstellt wurde, ist das Publizieren des gesamten Projekts sinnvoll. Dazu wird im Offline Projekt oben rechts „Veröffentlichen“ gewählt und der folgende Dialog bestätigt. Nun steht die Site unter

http://workshop:8080/opencms/opencms/

zur Verfügung. Damit ist der Workshop abgeschlossen und eine komplette Site inkl. Navigation in OpenCms realisiert.

Als weitere Anregung zum Experimentieren mit OpenCms hier noch einige Stichpunkte, um die Site weiter zu entwickeln bzw. zu pflegen:

  • Redaktionell das Wort „hier“ auf der Startseite mit der ersten Seite des Inhalts verlinken (über den WYSIWYG Editor)
  • Die Titel Eigenschaft mit darstellen (Hinweis: <cms:property>-Tag, siehe OpenCms Dokumentation)
  • Die Startseite mit in die Navigation aufnehmen (und an erste Stelle stellen, siehe Eigenschaften)
  • Das Startseitentemplate auch um die Navigation erweitern
  • Die Navigationseigenschaft nicht auf den Seiten, sondern auf Ordnern vergeben, um die Navigation als Verzeichnisbaum abzubilden und mehrer Ebene abzubilden
  • Einen eigenen Tag implementieren, der die Navigation bereitstellt

Zusammenfassung

Dieser Artikel hat eine Einführung in OpenCms gegeben, einem führenden auf Java basierenden Open Source Enterprise Content Management System. Die Architektur wurde einführend beschrieben und anhand des Workshops wurde eine eigene Site entwickelt. Dieser Artikel hat nur die Spitze des Eisbergs beschreiben, wie die Trennung zwischen Online und Offline Inhalten oder die von technischen und redaktionellen Teilen. Mit den Möglichkeiten die OpenCms in Verbindung mit Java bietet, sind praktisch alle Ansprüche an moderne Websites abzubilden. Die weiterführenden Themen unten geben einen Ausblick darauf. OpenCms dient bereits als Plattform für viele Enterprise Sites, wie die Liste der Referenzen und Sites am Ende des Artikels belegen.

Bei Fragen und Anregungen sei die OpenCms Mailingliste10 empfohlen, Anfragen bzgl. des Artikels können per eMail auch direkt an den Autor11 gestellt werden.

Weiterführende Themen

Abschließend noch eine Liste von weiteren Themen rund um OpenCms, die für weitere Artikel vorgesehen sind:

  • Template Erstellung mit Elementen und Default Bodies
  • Lokalisierung / Mehrsprachigkeit
  • Redaktionelle Erweiterungen (Bilder Galerien, Snippets)
  • Strukturierte Inhalte – XML für Redakteure
  • Geschlossene Bereiche / Berechtigungskonzept
  • Suche mit Lucene
  • Eclipse Integration (Ant, OpenCms Shell)
  • Erweiterung durch eigene Tags
  • Kanal/Mandantenkonzept (Inhalte abhängig anzeigen)
  • Anwendungsintegration
  • Caching
  • Farb/Bilder Style Konzepte
  • Apache vorschalten
  • OCEE – OpenCms Enterprise Erweiterungen (LDAP, Clustering, … )
  • Common Problems

Referenzen

Im Folgenden sind Websites gelistet, welche mit OpenCms realisiert wurden.

Die folgenden Projekte sind von codecentric im Auftrag der OEV umgesetzt worden.

2007 – ONG (OEV Next Generation) Projekt:

2006 – VKB Relaunch Projekt:

  • cms.vkb.de (Versicherungskammer Bayern)

Vollständiger Artikel

Weitere Inhalte aus codecentric Publikation

codecentric Publikation

Einführung in Spring Web Flow