Theming in Drupal 8 - alles neu mit Twig? (Teil 1)

Mit dem Release von Drupal 8 gibt es neben grundlegenden Änderungen im Backend (Nutzung von Symfony-2-Komponenten etc.) auch eine neue Theme-Engine.

Im Zuge der Weiterentwicklung von Drupal ist es wichtig, auch einmal einen Blick über den Tellerrand zu werfen und sich neuen Technologien zu öffnen. Nur auf diese Weise kann eine Community beständig wachsen. Mit Symfony 2 wurde hier schon ein sehr großer Schritt in Richtung PHP-Community gemacht.

In Drupal 8 steht den Themern nun - neben PHPTemplate - auch Twig als Theme-Enginge zur Verfügung. Hiermit möchte man gerade Neueinsteigern ins Drupal-Theming die Einstiegshürde PHP nehmen. In unserer mehrteiligen Blogpost-Reihe über Twig wollen wir die neue Theme-Engine näher erklären und neue Möglichkeiten aufzeigen.

Warum gerade Twig?

Twig hat seinen Ursprung in der Django-Welt und wurde von Armin Ronacher als Alternative zum Schreiben von Templates direkt in PHP entwickelt.
Seit 2009 ist Twig fester Bestandteil des Symfony-Frameworks und hat sich dort als zuverlässige Templating-Engine bewährt. Die Entwicklung wird seitdem auch von Fabien Potencier, einem der Entwickler des Symfony-Frameworks, voran getrieben. Weitere Informationen zu seinen Gedanken zum Thema Template-Engines in PHP findet man in seinem Blogpost Templating Engines in PHP.

Folgende PHP-Frameworks können ebenfalls mit Twig genutzt werden:

Drupal & Twig

Neben einer einfachen Tag-basieren Syntax, bietet Twig vor allem sehr viel mehr Sicherheit auf Theme-Ebene. Ein Zitat von John Albin auf der DrupalCon Denver beschreibt dies recht treffend

We hand themers a loaded gun and tell them to hammer in a nail with it. Oh and be careful!

"Wir geben Theme-Erstellern eine geladene Waffe und sagen ihnen, dass sie damit einen Nagel in die Wand schlagen sollen. Und ach ja: Seid vorsichtig!"

So wäre es in PHPTemplate denkbar, einfach auf die bestehende Datenbankverbindung zuzugreifen und einzelne Tabellen zu löschen oder das Dateisystem des Servers zu verändern.

<?php db_query('DROP TABLE {users}'); unlink('sites/default/files/myfilename.pdf') ?>

Welche Vorteile bringt Twig für Drupal?

  • mehr Sicherheit auf Template-Ebene durch eingeschränkte Möglichkeiten auf Theme-Ebene
  • kein PHP-/HTML-Mix in den Templates
  • Vereinfachung des Theming-Systems durch Reduzierung der preprocess-Funktionen
  • konsistente und einfache Tag-basierte Syntax, die sich auf das Wesentliche beschränkt
  • Wiederverwendbarkeit von Templates (über Twig-Includes)
  • Integration in IDEs (Netbeans, vim, PHPStorm, Eclipse, Textmate, Sublime)
  • sehr gute Dokumentation - Twig documentation

Auf drupal.org findet man derzeit noch nicht so viel Dokumentation zur Erstellung eigener Themes in Drupal - die aktuellen Coding-Standards gibt es hier: Twig Coding Standards.

Nachteile

  • Einarbeitung in neue Template-Syntax
  • Performance-Bedenken durch extra Theme-Engine
  • unterschiedliche Update-Zyklen von Drupal-Core und Twig (in Hinblick auf den Code-Freeze)

Meiner Meinung nach wäre hier wirklich nur der erste Punkt ein Nachteil, wobei auch andere Content-Management-Systeme bzw. -Frameworks auf eine eigene Template-Syntax setzen, sofern sie nicht direkt PHP nutzen. Den Punkt Performance werden wir in einem weiteren Teil der Blogpost-Reihe noch einmal genauer betrachten. Die oben angesprochenen unterschiedlichen Update-Zyklen kennen wir als Drupaler ja schon von jQuery (auch hier hinkt Drupal 7 mit Version 1.4.x der aktuellen 1.9 hinterher). Bei einer Theme-Engine, die sich so grundlegend nicht ändern wird, sollte man dies aber nicht allzu kritisch betrachten.

Twig als Bestandteil des Drupal-Core

Im aktuellen Drupal-8-Release steht Twig als Theme-Engine zur Verfügung und kann schon in eigenen Themes genutzt werden (Integrate Twig into core: Implementation issue). Für die in Drupal enthaltenen Themes wird derzeit aber noch PHPTemplate genutzt.

Der bisherige Stand der Entwicklung ist in der Drupal-8-Twig-Sandbox zu sehen. Ziel soll es sein, alle Core-Templates und die damit verbundenen Theme-Funktionen auf jeweils ein Twig-Template zu reduzieren und somit das Theme-System zu vereinfachen. Ein gutes Beispiel dafür liefert das Stark-Theme aus der Drupal-8-Twig-Sandbox - hier werden sämtliche Administrationsseiten über eigene Twig-Templates "gesteuert" und könnten so auch in eigenen Themes überschrieben werden.

Vom großen "Render-Array" (of doom) wird sich Drupal 8 zwar nicht komplett lösen können, der Umgang mit Content (Variablen) auf Template-Ebene wird aber sehr viel einfacher werden.

Im zweiten Teil des Blogbeitrags wollen wir uns mit der Syntax von Twig beschäftigen und anhand einfacher Beispiele aufzeigen, wie wir in Zukunft von diesen Änderungen profitieren können.

The Twig logo is © 2010-2012 Sensio Labs

Steffen Rühlmann
  • Senior-Drupal-Entwickler

Steffen macht nun schon seit zwanzig Jahren Dinge mit Webseiten. Er ist ein Drupal-Allrounder und Acquia Certified Developer seit 2014, der sich sowohl in der Modul-Programmierung als auch bei Theming oder Sitebuilding sicher bewegt. An Remote Work im eigenen Haus mag er den Ausblick auf die Felder. Wenn er nicht gerade arbeitet, wird er von seinen Kindern auf Trab gehalten und ist gerne in der Natur.