OpenCms 9.5 – Die neuen Funktionen aus Entwicklersicht

Die Version 9.5 von OpenCms wurde am 3.11.2014 auf den OpenCms Days 2014 vorgestellt. Wir haben die wichtigsten Neuerungen unter die Lupe genommen.

Nested Containers und Element Views

Nested Containers sind eine der zentralen Neuerungen in OpenCms 9.5. Sie ermöglichen es, über eine verschachtelte Container-Struktur flexible Layouts zu erstellen, ohne dass dafür aufwendig programmiert werden muss. Über Formatter für Content Types können untergeordnete Container erzeugt werden, in die wiederum weiterer Content mit Containern integriert werden kann. Welcher Nutzer in der Redaktionsoberfläche welche Container-Schicht per Drag & Drop bestücken kann, lässt sich über Rollen regeln. Um die verschiedenen Container-Schichten besser bearbeiten zu können, wurden Element Views geschaffen, die jeweils den Zugriff auf eine spezifische Schicht zulassen.

Die Nested-Container-Struktur der Demo-Site von OpenCms 9.5

Bei der Demo-Site von OpenCms 9.5 wird eine Struktur aus drei Container-Ebenen verwendet:

  • Das Page Template enthält einen einzigen Page Container
  • Darin enthalten sind Template Rows, die wiederum Container enthalten
  • Darin enthalten sind Layout Rows, die pro Spalte einen Container enthalten

Für den Zugriff auf die verschiedenen Container-Schichten gibt es die Element Views „Template“, „Layout“ und „Default“.

Darstellung der Element-Views im OpenCms-Menü
Die Auswahl der Element View erfolgt über das OpenCms-Menü.

Das Zusammenspiel von Element Views und Template Rows, Layout Rows und den darin enthaltenen Containern lässt sich am einfachsten anhand von Wireframes veranschaulichen.

Ebene 1: Page Container

Das für die Demo-Site verwendete Template enthält einen einzigen Page Container. Dieser ist – wie bei den vorherigen Versionen von OpenCms – über den <container> Tag im JSP des Templates eingebunden und konfiguriert.

Ebene 2: Template Rows mit Containern

Bei aktivierter Element View „Template“ kann ein Nutzer mit der Rolle „Template Editor“ über die Redaktionsoberfläche per Drag & Drop Template Rows in den Page Container einbinden. Dadurch kann beispielsweise eine dreigeteilte Sicht mit Header, Content und Footer erstellt werden.

Auch wenn im hier gezeigten Beispiel nur einspaltige Template Rows mit jeweils einem Container dargestellt sind, lassen sich auch mehrspaltige Template Rows realisieren (z.B. klassisch mit Linksnavigation oder Marginalspalte rechts).

Die Container sind über den <container> Tag im JSP des Formatters für Template Rows eingebunden und konfiguriert.

Ebene 3: Layout Rows mit Containern

Bei aktivierter Element View „Layout“ kann ein Nutzer mit der Rolle „Element Author“ per Drag & Drop Layout Rows in die in den Template Rows enthaltenen Container integrieren.

Wie schon bei den Template Rows sind die Container über den <container> Tag im JSP des Formatters für Layout Rows eingebunden und konfiguriert.

Layout Rows erlauben die Definition von mehreren Spalten pro Zeile, sodass mehrspaltige Layouts erstellt werden können. Die Mehrspaltigkeit basiert dabei auf dem 12-spaltigen Raster, das in dem für die Demo-Site verwendeten Bootstrap-Theme zur Anwendung kommt. So können zahlreiche unterschiedliche Spaltenkombinationen erstellt werden, z.B.

  • einspaltig
  • zweispaltig, 1/2 + 1/2
  • zweispaltig, 1/3 + 2/3
  • zweispaltig, 2/3 + 1/3
  • dreispaltig, 3 x 1/3
  • vierspaltig, 4 x 1/4

In einer Layout Row wird für jede Spalte ein neues Unterelement „Column“ hinzugefügt, in dem die Breite der Spalte festgelegt wird. Auch das Verhalten in Bezug auf Responsivität kann ohne Programmierung konfiguriert werden. Hierfür werden die von Bootstrap 3 zur Verfügung gestellten Style-Klassen im Content Type pflegbar gemacht, wie der folgende Screenshot verdeutlicht:

Darstellung einer im OpenCms Editor geöffneten Layout Row
Layout Row mit Bootstrap-Optionen im Editor

Pro Spalte fügt die Layout Row einen weiteren Container hinzu, der dann von Redakteuren in der Element View „Default“ mit den eigentlichen Inhalten der Seite befüllt werden kann.

Zusätzliche Erweiterungen für Container

Zugriffsrechte für Container

Container können jetzt mit Zugriffsrechten versehen werden, sodass beispielsweise Container für den Header oder Footer einer Seite nur von Nutzern mit Entwicklerrechten geändert werden können. Mit Hilfe von Zugriffsbeschränkungen wird in der Demo-Site geregelt, welche Nutzer auf Page Container, Template Container oder Layout Container zugreifen können.

Default-Ansicht für leere Container

Wenn unter OpenCms 9 oder darunter ein Container keinen Inhalt hatte, dann war für den Redakteur nicht unbedingt ersichtlich, dass es überhaupt einen Container gibt. Erst wenn man beim Drag & Drop von Content mit der Maus über einen leeren Seitenbereich fuhr, war ggf. an der rot gestrichelten Umrandung zu erkennen, dass ein Container existiert, in dem Content platziert werden kann.

Mit OpenCms 9.5 ist es nun möglich, bei leeren Containern einen beliebigen HTML-Code darzustellen, also beispielsweise den Text „Drop your content here“ in einer farbig hinterlegten Box. Dadurch wird es für Redakteure wesentlich klarer, wo auf der Seite „Steckplätze“ für Content sind.

Fazit

Mit Hilfe von Nested Containern, Template Rows und Layout Rows lässt sich ein flexibles, Grid-basiertes Layout erstellen. Die von Entwicklern bereitgestellten Formatter müssen dabei flexibel Mehrspaltigkeit verarbeiten können und ggf. für Responsive Design benötigte Style-Klassen berücksichtigen. Die von Alkacon bereitgestellten Demo-Formatter können hier als Ausgangspunkt für eine eigene Implementierung dienen.

Grundsätzlich denke ich, dass eine so feingranulare Rollenverteilung und ein so hoher Grad an Flexibilität wie in der OpenCms Demo-Site für Kundenprojekte nicht immer notwendig sind. Ich denke, dass Container für Head/Foot/Linksnavigation o.ä. durchaus von Entwicklern direkt in JSP-Templates integriert werden können und nicht per Drag & Drop als Content verwaltet werden müssen. So könnte eine weniger tief gestaffelte Hierarchie erreicht werden, was ggf. die redaktionelle Pflege von Seiten erleichtert. Schlussendlich ist die konkrete Implementierung aber natürlich immer abhängig von den entsprechenden Kundenanforderungen.

Optimierungen für Content Types

Für die Definition von Content Types mit Hilfe von XSD gibt es in OpenCms 9.5 zusätzliche Tags, die eine deutlich größere Flexibilität der XML-Formulare für Content erlauben:

  • Im XML-Editor können Felder nur für Nutzer in bestimmten Gruppen oder mit bestimmten Rollen angezeigt werden (Tag <visibility> im appinfo-Abschnitt). Das ist etwas sehr Nützliches, wenn man dem „normalen“ Redakteur eine einfache Maske anbieten will, für Admins, Entwickler oder fortgeschrittene Redakteure aber zusätzliche Felder benötigt. Bei Fatwire ContentServer haben wir eine solche Funktionalität als Erweiterung implementiert und für Kundenprojekte intensiv genutzt. Und genau das geht mit OpenCms jetzt auch ohne Erweiterung. Fein!
  • Felder können über mehrere Sprachversionen hinweg synchronisiert werden (Tag <synchronizations> im appinfo-Abschnitt). Das kann z.B. dann sinnvoll sein, wenn Icons eingebunden werden, die in allen Sprachversionen identisch sein sollen. Diese müssen dann nur einmal eingebunden werden und sind direkt für alle Sprachen vorhanden. Wird ein solches Feld in einer Sprachversion geändert, werden werden die Änderungen entsprechend in die übrigen Sprachversionen übernommen.
  • Voneinander abhängige Editor-Felder: es ist jetzt möglich, über einen EditorChangeHandler auf Änderungen in einem Editor-Feld zu reagieren und andere Felder zu manipulieren. Der mitgelieferte Handler „CmsEditorChangeHandlerProperty“ kann beispielsweise eine Property eines eingebundenen Bilds in ein Feld des XML-Editor Formulars kopieren. Es können aber auch eigene EditorChangeHandler umgesetzt werden.

User Generated Content

Mit OpenCms 9.5 ist es möglich, aus der Online-Site heraus XML-Content über einfache HTML-Formulare zu erstellen. Hierfür kommt die neue UGC API zum Einsatz, die es ermöglicht, mit einigen JavaScript-Definitionen für das Frontend ein Formular auf einen Content Type zu mappen. Dadurch lassen sich z.B. Kommentarfunktionen oder einfache Blogs realisieren.

Alkacon hat die Funktionalität eher als Tool für Intranets vorgestellt. Inwiefern die UGC API auch für den produktiven Einsatz auf öffentlichen Websites geeignet ist, muss sich in einer detaillierten Evaluation herausstellen.

Mehr redaktionelle Funktionen im Page-Editor

Alkacon geht kontinuierlich den – meiner Meinung nach richtigen – Weg weiter, einen Wechsel in den Workplace für Redakteure überflüssig zu machen. Auch in der Version 9.5 sind wieder einige Funktionen „nach vorne“ geholt worden:

  • Kategorien und Galerien können jetzt im Sitemap-Editor bearbeitet werden
  • Ein neuer Dialog zur Konfiguration der Nutzereinstellungen (Sprache, Passwort, Site, …) kann jetzt über das Menü im Page-Editor aufgerufen werden

PDF-Generierung

OpenCms kann jetzt mehr oder minder out of the Box PDFs generieren. Diese Funktionalität hatten wir gerade erst für einen Kunden unter OpenCms 9 implementiert, leider kam da OpenCms 9.5 ein wenig zu spät.

Für die PDF-Generierung verwendet OpenCms das PDF-Framework Flying Saucer, das PDFs aus mit CSS formatierten HTML-Seiten generiert. Der größte Teil der Arbeit für Entwickler bei der Implementierung dürfte darin bestehen, Formatter mit entsprechenden Styles zu erstellen, aus denen dann die PDFs generiert werden.

Docker Support

OpenCms 9.5 steht ab sofort in zwei Varianten als Docker Image zur Verfügung:

  • Das Basis-Image „simple“ verwendet Tomcat und MySQL und ist besonders für Tests und Evaluationen geeignet
  • Das Entwickler-Image „dev“ verwendet Tomcat und HSQLDB, aktiviert die SMB-Netzwerkfreigabe für das VFS und kann für die OpenCms-Entwicklung genutzt werden

Nähere Informationen gibt es bei der entsprechenden News-Meldung zum Docker Image auf opencms.org.

Erweiterte Dokumentation

Alkacon hat sehr viel Zeit investiert, um die Dokumentation von OpenCms zu erweitern und zu verbessern. Die neue Dokumentation wird nicht mehr als PDF-Dokument geliefert, sondern ist in OpenCms integriert. Derzeit muss man sich für einen Blick in die Dokumentation OpenCms 9.5 installieren, allerdings soll bis Ende des Jahres auch eine öffentliche Version der Dokumentation auf opencms.org live gehen.

Der erste Eindruck der neuen Dokumentation ist sehr positiv, die Struktur ist klar, viele typische Entwickleraufgaben wie das Erstellen von Templates oder die Definition von Content Types mit XSDs werden ausführlich beschrieben.

Ein großes Lob an Alkacon, die Arbeit hat sich gelohnt! Die überarbeitete Dokumentation dürfte Neueinsteigern das Leben mit OpenCms deutlich erleichtern.

Weitere Infos

Kai Widmann

Kai Widmann arbeitet seit 1996 mit unterschiedlichen CMS-Systemen und ist einer der führenden CMS-Entwickler bei mediaworx. Er ist der Entwickler des OpenCms Plugins für IntelliJ.

E-Mail
Artikel teilen