5 Dinge, die ich (bisher) über Twig gelernt habe
Moin!
Die letzten Wochen habe ich mich intensiv mit Twig beschäftigt, der Template-Engine, die nach und nach in Contao die bisherigen PHP-Templates ersetzen wird.
Was ich dabei gelernt habe erfährst du in der heutigen Flaschenpost.
Wenn du noch nicht mit Twig gearbeitet hast, dann kann ich dir das Video von Maren auf der letzten Contao Konferenz empfehlen. Sie geht auf die Basics von Twig ein und zeigt anhand von einfachen Beispielen, wie Twig in Contao zum Einsatz kommt. Alternativ kannst du dir auch die Doku Twig-Templates für Contao 5 ansehen.
Nun aber los:
1. Twig-Templates für Frontend-Module
Mittlerweile sind alle Inhaltselemente als Twig-Templates verfügbar, sodass du diese relativ einfach an deine Bedürfnisse anpassen kannst.
Anders sieht es bei den Frontend-Modulen wie zum Beispiel Navigationen oder Newslisten und -lesern aus.
Da diese noch nicht in die Twig-Syntax überführt wurden, ist es noch ein wenig frustrierend, wenn man Templates von Modulen anpassen möchte. Du kannst aber auch Twig-Templates für alle Bereiche anlegen, die noch nicht „übersetzt“ wurden. Dafür musst du zunächst die korrekte Benennung (.html5 wird zu .html.twig) beachten und dann alles was PHP war, in Twig übersetzen.
Um die alte Template-Struktur in die Twig-Syntax zu übersetzen, nutze ich Codeium (danke Oliver für den Hinweis damals), eine Alternative zu Githubs Co-Pilot. Du kannst aber die Templates auch in ChatGPT schreiben (teilweise sogar mit besseren Ergebnissen). Ein Befehl wie „Übersetze das in Twig“ reicht normalerweise aus.
Das klappt zwar noch nicht zu 100% (ich muss oft händisch ein paar Variablen ändern), erspart mir aber schonmal eine Menge Schreibarbeit.
2. Tschüss Vergleichsansicht
Bei Updates von einer LTS-Version auf die nächste, war die Vergleichsansicht oftmals ein erster Anhaltspunkt, wenn es darum ging, herauszufinden, was sich am Template geändert hat. Diese Vergleichsansicht gibt es für Twig-Templates nicht mehr.
Stattdessen lohnt es sich, ein Lesezeichen auf die Twig-Templates im Contao Git-Repository zu setzen, um die Änderungen dort nachzuvollziehen. Da die Twig-Templates immer mal wieder optimiert werden, achte aber unbedingt darauf, den 5.3 Branch auszuwählen. Der 5.x Branch enthält schon Neuerungen, die erst ab Contao 5.4 oder neuer zur Verfügung stehen werden.
3. Parameter-Dumping
Wenn du Templates erstellen oder bestehende anpassen möchtest, dann wirst du früher oder später die Template-Parameter ausgeben wollen (Dumping). Das geht in Twig mittels {{ dump() }}
, aber auch hier gibt 2 Dinge die man wissen sollte:
- Die Templates werden nur ausgegeben, wenn man sich im DEV-Mode befindet
- Die Dump-Funktion erzeugt einen kritischen Fehler, wenn man sich nicht im DEV-Mode befindet.
Und das ist auch gut so. Denn die Dump-Funktion gibt auch sensible Daten aus, die besser nicht öffentlich sein sollten. Und der Fehler sorgt dafür, dass man die Dump-Funktion nicht versehentlich vergisst.
4. eigene Varianten anlegen
Was mir an Twig so gut gefällt: einzelne Blöcke lassen sich überschreiben, während der Rest vererbt wird. Und in Contao wurden für alle möglichen Fälle Blöcke angelegt, sodass sich Texte oder Attribute relativ leicht ergänzen lassen.
Es wird aber immer Fälle geben, die sich auch mit der jetzigen Block-Struktur nicht abdecken lassen.
In einem Projekt wollte ich die Überschrift im Text-Element in einem gemeinsamen Container mit dem Text platzieren. Nur leider hat die Überschrift einen festen Platz im _base.html.twig
Element.
Um das Problem zu lösen, hatte ich den Inhalt von _base in mein Text-Element kopiert, um dann die Ausgabe der Headline neu bestimmten zu können.
Es geht aber besser: In einer neuen Variante _base/no_headline.html.twig
lasse ich die Überschrift weg, um sie dann in meinem Text-Element frei platzieren zu können. Und sollte sich irgendwann mal etwas in der _base.html.twig ändern, lassen sich die Änderungen hoffentlich leichter erkennen und in meinem eigenen Template nachziehen.
5. Die Grenzen von Twig
„Das Schöne“ an der alten Template-Struktur war, dass man beliebig PHP mit HTML mischen konnte, was aber gleichzeitig auch ein potentielles Sicherheitsproblem war.
Mit Twig ist es nun nicht mehr so leicht möglich, sich Code aus Foren, Slack usw. zusammen zu suchen und Templates nach Belieben anzupassen (was eigentlich gut ist).
Wenn du an die Grenzen von Twig stößt, weil du die Ausgabe durch Twig-Filter und -Funktionen nicht weiter angepasst bekommst, dann wird es unter Umständen Zeit, eigene Inhaltselemente zu erstellen oder Twig durch eigene Funktionen zu erweitern.
Ich arbeite zum Beispiel gerade daran, für das neue Akkordeon bei Bedarf JSON-LD Daten zu erzeugen. Dafür könnte ich entweder ein neues Inhaltselement erstellen oder ich erstelle eine eigene Twig Extension.
***
Das war ein kleiner Überblick meiner bisherigen Erfahrungen (Fortsetzung nicht ausgeschlossen). Welche Erfahrungen hast du mit Twig bisher gemacht?
Erstma!
Dennis