iX 4/2016
S. 90
Review
Content-Management
Aufmacherbild

Drupal 8 mit viel Objektorientierung und Symfony

Kreise ziehen

Mit der Ende vorigen Jahres freigegebenen Version 8 haben die Drupal-Entwickler vieles völlig neu implementiert. Objektorientierung, Mehrsprachigkeit und semantisches Markup sind nur ein paar der Neuerungen.

Nach fast fünf Jahren Entwicklung hat die neue Hauptversion 8 des Content-Management-Systems Drupal Ende letzten Jahres das Licht der Welt erblickt. Der lange Weg dorthin war steinig und hat die Community vor eine Zerreißprobe gestellt. Das Ergebnis enthält zahlreiche Innovationen – Drupal wurde in weiten Teilen auf Basis moderner Programmierparadigmen reimplementiert und stellt eine hohe Kompatibilität zum Rest der PHP-Welt bereit.

Im Vergleich zur Version 7 hat Drupal 8 an Funktionsvielfalt und Struktur gewonnen. Wichtige Features wie ein dynamischer Query Builder inklusive grafischer Bedienoberfläche, ein WYSIWYG-Editor oder Tools zum Konfigurationsmanagement, die Administratoren bisher in Form von Plug-ins aus der Community zusätzlich installieren mussten, sind nun von vornherein enthalten.

Für die Implementierung dieser und weiterer Schlüsselfunktionen, unter anderem Mehrsprachigkeit, Webservices-Integration sowie semantisches HTML5-Markup, hatten Community-Mitglieder zum Teil sogenannte „Initiativen“ gegründet – Arbeitsgruppen, die ihre jeweiligen Zielsetzungen koordiniert und fokussiert bearbeiten konnten. Mit Ausnahme der Layouts-Initiative (siehe „Blocks & Layouts Everywhere“ und „Remove layout.module from core“ in den „Onlinequellen“, [a], [b]) hat diese für die Drupal-Community neue Organisationsform Früchte getragen.

Schon lange vor der offiziellen Release gab es am 1. Juli 2013 eine vorbereitende projektweite Einschränkung der Weiterentwicklung von Funktionen und einen offiziellen API-Freeze. Mit wenigen Ausnahmen ( siehe „Code freeze and thresholds“, [c]) haben die Entwickler seitdem nur noch an Performance, Stabilität und Update-Optionen gearbeitet und die Testumgebung auf drupal.org an die Struktur der neuen Version angepasst (siehe „DrupalCI“, [d]). Daher kann Drupal 8 als verhältnismäßig stabil gelten. Im Gegensatz zum Vorgänger, bei dem es nach dem Veröffentlichungsdatum rund sechs Monate gedauert hat, bis es für komplexe Projekte sinnvoll nutzbar war, kommt Drupal 8 schon jetzt für viele größere Projekte produktiv zum Einsatz (hierzu und zu weiteren Verweisen siehe den blauen Balken „Alle Links“ am Ende des Artikels).

Stolperstein: Powered by Symfony

Wohl die wichtigste architektonische Änderung, die die Drupal-Community zwischenzeitlich vor eine Zerreißprobe stellte (siehe den Kasten „Backdrop“), war die Entscheidung, signifikante Teile des Systems auf Basis von Symfony-Komponenten neu zu implementieren. Dies konnten die Entwickler durchführen, weil die Codebasis Drupals in Version 8 überwiegend modular und objektorientiert strukturiert ist. Große Teile des Systems hat man hierfür von Grund auf neu geschrieben und dabei moderne OOP-Prinzipien wie Dependency Injection, ein Event-System oder einen Service-Container verwendet.

Symfony (in der Version 2) liefert unter anderem die Basis für das Routing, die interne Behandlung von URLs sowie die Validierung von Inhalten. Eine weitere Neuerung für Drupal, die Einhaltung der PHP Standards Recommendations (PSR) zu Coding-Standards, Autoloading, Namespacing und HTTP-Response-Objekten, schafft die Voraussetzungen für Interoperabilität mit anderen Systemen aus der PHP-Welt. Darüber hinaus sind die Abhängigkeiten von Symfony- sowie weiteren Komponenten mit dem Dependency-Manager Composer (siehe den schon genannten blauen Balken „Alle Links“) aufgelöst. Zahlreiche andere Projekte lassen sich mit diesem mittlerweile weitverbreiteten PHP-Tool innerhalb von Drupal einbinden. Zudem kann das CMS nun wesentlich komfortabler als Bestandteil eines größeren Applikationsclusters dienen.

Drupal 8 beinhaltet ein stark verbessertes und kontextbasiertes Caching-System, das auf der Basis von Zustandsänderungen darzustellender Inhalte sowie aufgrund bestimmter Eigenschaften den gesamten Cache oder Teile davon invalidieren kann. Beispielsweise baut das CMS auf Webseiten, die Listen von Inhalten darstellen, nur die Cache-Elemente genau jener Bestandteile der Listen neu auf, deren Inhalte tatsächlich aktualisiert wurden. Adressierbare Cache-Kontexte sind neben Zeitstempeln von Inhalten individuelle Benutzeraccounts, Rollen, URLs und vieles mehr.

Entsprechend lassen sich smarte Caching-Konzepte wie ESI (Edge Side Includes) oder Facebooks BigPipe in Kombination sinnvoll verwenden. Sie ermöglichen es, einzelne Teile einer Seite dynamisch (nach) zu laden und in Verbindung mit parallelisiertem Abruf von CSS- und JavaScript-Assets eine massive Reduktion der Zeit für den Seitenaufbau zu erreichen. Zudem lassen sich Teile des Seiteninhalts priorisieren und deshalb besonders früh anzeigen.

Mehrsprachigkeit auch bei der Konfiguration

Mehrsprachigkeit ist jetzt als fester Bestandteil des CMS implementiert. Im Gegensatz zum Vorgänger und vielen aktuellen Konkurrenzprodukten lässt sich das System vollständig und einheitlich übersetzen: Nicht nur der redaktionelle Inhalt und die Bedienoberfläche, sondern die gesamte Konfiguration, alle Meldungen und Textbestandteile, beispielsweise von zu versendenden E-Mails, können Anwender mehrsprachig verwalten. Ohne zusätzlichen Konfigurationsbedarf kann man Drupal in 94 Sprachen installieren und verwenden (siehe „Alle Links“).

Mit dem CKEditor bietet Drupal erstmals WYSIWYG ohne zusätzliche Plug-ins (Abb. 1).

Eine bei anderen Content-Management-Systemen völlig selbstverständliche Funktion für einfache Content-Pflege ist endlich fester Bestandteil von Drupal: der neu hinzugekommene WYSIWYG-Editor CKEditor. Administratoren können ihn über die Bedienoberfläche aktivieren, konfigurieren und erweitern.

Kontextmenü fürs In-Place-Editing

Inhalte lassen sich mit dem WYSIWYG-Editor im Frontend pflegen (Abb. 2).

„In-Place-Editing“, die Bearbeitung von Inhalten im Kontext des Frontends ohne Aufruf von Administrationsmasken, ist ein weiteres neues Feature, das redaktionelle Arbeit intuitiver gestalten soll. Zu sämtlichen Inhalten, die ein Benutzer bearbeiten darf, blendet Drupal ein Icon mit dazugehörigem Kontextmenü ein, über das das In-Place-Editing erreichbar ist und das – entsprechende Konfiguration vorausgesetzt – außerdem die Werkzeugleiste des WYSIWYG-Editors im Kontext des Feldes anbietet.

Darüber hinaus wurde die Vorschau von Inhalten überarbeitet. Von redaktionellen Benutzern eingegebene, aber noch nicht veröffentlichte Inhalte stellt das Frontend entsprechend den jeweiligen Berechtigungsschemata genau wie tatsächlich veröffentlichte Inhalte dar.

Wie schon in früheren Versionen hält Drupal Inhalt und Konfiguration gemeinsam in einer Datenbank vor. Neu ist jedoch die Option eines Konfigurations-Deployment, bei dem die Konfiguration in YAML-Dateien exportiert und in eine andere Umgebung wieder importiert werden kann. Auf diese Weise lässt sich die Konfiguration außerdem als Quellcode versionieren.

RESTful Webservices inbegriffen

Eine weitere Innovation im Sinne von Interoperabilität mit mobilen Apps und JavaScript-Frameworks sowie Einsätzen in komplexen Multi-Applikationsstrukturen sind die mitgelieferten RESTful Webservices. Je nach Konfiguration können Inhalte als JSON (JavaScript Object Notation), HAL+JSON (Hypertext Application Language) oder XML (Extensible Markup Language) ausgegeben werden – diese Formate fristen nicht länger ein Dasein zweiter Klasse gegenüber der traditionellen HTML-Ausgabe. Außerdem lassen sich vollständige CRUD-Operationen für alle Inhalte und Konfigurationen abbilden sowie mit dem enthaltenen Query Builder zudem anwendungsspezifische REST-Endpoints zusammenstellen.

Die von den Symfony-Machern SensioLabs übernommene Template Engine Twig stellt anspruchsvolle Gestaltungsmöglichkeiten, sogar Kontrollstrukturen und eine große Anzahl von Filtern zur Verfügung, die Frontend-Entwickler in einer eingängigen Syntax ganz ohne den Einsatz von PHP verwenden können. Das soll die Hürden für Einsteiger in die Frontend-Entwicklung senken und außerdem zu einer wesentlich höheren Sicherheit des CMS führen, da keinerlei potenziell unsicherer Code auf Template-Ebene zur Ausführung kommt. Darüber hinaus wird jeglicher Output automatisch als HTML „auto-escaped“. Das verhindert die ungefilterte Ausgabe von Benutzereingaben, die potenziell schädlichen ausführbaren Code enthalten könnten.

Für das flexible Erweitern von Inhalten steht jetzt eine große Anzahl verschiedener Typen von Feldern zu Verfügung, die teilweise HTML5-Eingabeelemente verwenden. Dadurch werden beispielsweise Datumsfelder auf Mobilgeräten durch die Verwendung nativer Widgets leichter bedienbar. Mit Referenzierungen lassen sich komplexe Content-Modelle entwerfen; Drupal 8 ermöglicht das Einbetten bestimmter Inhalte oder Teile von Inhalten in beliebige andere Inhaltsstrukturen.

Mit der runderneuerten Version der Entity-API ist eine universelle Abstraktionsschicht zum Umgang mit Objekten und Inhalten jeglicher Form Bestandteil des CMS. Der Feldumfang von Eingabemasken („Form Modes“) sowie deren Widgets wie die Darstellung der Inhalte im Frontend („View Modes“) können Anwender überdies bequem per Benutzeroberfläche konfigurieren – und daher etwa angepasste Eingabeformulare für verschiedene redaktionelle Kontexte zur Verfügung stellen.

Zusätzliche Plug-ins gelegentlich erforderlich

Trotz des erweiterten Feature-Umfangs gibt es einige Bereiche, in denen Drupal nach wie vor erst durch Verwendung zusätzlicher, von der Community bereitgestellter Plug-ins sinnvoll als Content-Management-System eingesetzt werden kann. Das Handling von Media-Assets „out of the box“ ist stark limitiert und ermöglicht keinerlei komfortable redaktionelle Verwaltung. Die Plug-in-Suite des „Drupal Media Teams“ (siehe „Alle Links“) soll dieses Defizit perspektivisch beheben. Das kann man momentan allerdings noch nicht als zufriedenstellend stabil und zuverlässig einsetzbar bezeichnen.

Wichtige Suchoptimierungsfunktionen wie automatisch generierte sprechende URLs und konfigurierbare Meta-Tags sind als Plug-in vorhanden, aber noch nicht vollständig fehlerfrei nutzbar. Anspruchsvolle redaktionelle Abläufe lassen sich in Drupal ebenfalls nur durch die Verwendung zusätzlicher Plug-ins verwirklichen. Mit dem Rules-Plug-in oder der Deploy Suite werden sich – sobald sie in einer mit Drupal 8 kompatiblen, stabilen Version erscheinen – komplexe Workflows abbilden lassen. Der Einsatz dieser Features kann derzeit allerdings nur eingeschränkt empfohlen werden, da sie sich noch nicht auf einem produktionsreifen Entwicklungsstand befinden.

Fazit

Trotz der umfangreichen neuen Leistungsmerkmale steht Site-Buildern ein benutzerfreundliches System zur Verfügung, in dem sich komplexe Datenmodelle konfigurieren lassen, ohne eine einzige Zeile Code schreiben zu müssen. Die Barrierefreiheit von Drupal 8 hat sich maßgeblich verbessert, da das System die Anforderungen der Accessibility Guidelines größtenteils erfüllt (siehe „Alle Links“).

Durch die Implementierung von Standards aus der PHP-Welt ist davon auszugehen, dass das Interesse für Version 8 signifikant steigt und mehr Unternehmen den Einsatz des CMS für ihre Zwecke evaluieren. Semantic Versioning und kürzere Update-Zyklen von Major und Minor Releases halten Einzug. Zukünftig wird zwischen Security- und Feature-Updates unterschieden.

Schon heute lassen sich komplexe Websites produktiv auf Basis der Version 8 betreiben. Der Rewrite hat unerwartet lange gedauert und viele Ressourcen gekostet. Die Anstrengungen der Community haben sich dennoch gelohnt: Herausgekommen ist ein System, das den Ansprüchen an kleinere wie an komplexe Websites entspricht. (hb)