Jedes Jahr trifft sich das Contao Core-Entwicklerteam zweimal für einen kurzen Code-Sprint von drei Tagen. Getroffen
haben wir uns dieses Mal wieder im Unperfekthaus in Essen.
Wie es Tradition ist, startete das Entwicklertreffen schon am Sonntag, aber bei diesem Treffen haben wir das Ganze noch ein
bisschen ausgeweitet: Statt wie gewohnt bis Mittwoch zu bleiben, ging es diesmal erst am Donnerstag zurück nach Hause.
Das bedeutete drei volle Tage geballte Contao-Power – noch mehr Zeit für unser Lieblings-CMS!
Daher ist der obligatorische Hinweis noch wichtiger, als er das sonst ohnehin schon ist: Die Entwicklertreffen sind für die Weiterentwicklung von Contao entscheidend und daher mache ich wie immer darauf aufmerksam, dass die Contao Association diese Treffen finanziert. Als Supporter kannst du deinen Teil dazu beitragen.
Auch dieses Mal hat das Projektteam wieder an uns gedacht und ein kleines Care-Paket vorbereitet. Ein herzliches Dankeschön an Marcus fürs Organisieren und Zusammenstellen!
Insbesondere die "Twig"-Idee sorgte gleich zum Start für gute Laune – eine schöne Tradition, die
mittlerweile fast so fest zum Entwicklertreffen gehört wie die hitzigen Diskussionen, welche die Schokolade
gelegentlich zum Schmelzen bringen. Fotos im Anhang.
Contao 5.7 LTS und Contao 6
Das grösste Thema bei diesem Treffen war natürlich die kommende Contao 5.7 LTS – die nächste Long-Term-Support-Version,
die uns bis ins Jahr 2030 begleiten wird. 2030 - wow 🤯
Damit ist die 5.7 nicht nur ein weiteres Release, sondern auch die letzte grosse Chance, Dinge anzupassen, die uns
dann eben wieder vier Jahre lang begleiten werden.
Die Mindestanforderung an PHP werden wir voraussichtlich auf PHP 8.3 anheben und wie immer bei unseren LTS-Releases,
wird die neuste Symfony Version 7.4 LTS, die im November 2025 erscheinen wird, unser Fundament bilden.
Wir haben auch über den möglichen Release-Zeitpunkt von Contao 6 gesprochen. Wer regelmässig einen Blick auf unsere
Roadmap wirft weiss, dass gem. dieser Roadmap nach Contao 5.7 nicht etwa Contao 5.8, sondern eben Contao 6.0
erscheinen soll.
Allerdings ist das noch nicht in Stein gemeisselt. Die finale Entscheidung wollen wir auf dem nächsten
Entwicklertreffen im Frühjahr 2026 treffen. Ein entscheidender Faktor dabei wird sein, wie weit wir beim Thema
Input-Encoding kommen – dazu mehr im nächsten Abschnitt.
Wichtig: Ihr wisst es alle – wir halten uns strikt an Semantic Versioning. Das bedeutet: Sobald
es API-Breaks gibt, müssen wir dem CMS eine neue Major-Version verpassen.
Das heisst aber nicht, dass beim Umstieg von Contao 5 auf Contao 6 alles anders wird. Wir werden wie bis anhin sehr
vorsichtig abwägen, welche Breaks wir einführen und welche nicht. Beispiel: Niemand zwingt uns den
Support für Contao 3 Module (system/modules) zu entfernen. Der BC-Layer ist seit Version 4.0 drin, überschaubar
was den Wartungsaufwand betrifft und aktuell gibt es deshalb auch keinen Grund, diesen zu entfernen. Nur weil wir
können, heisst noch lange nicht, dass wir müssen.
Lasst euch also nicht von der „6" abschrecken. Es ist keine Revolution, sondern eher eine saubere
Weichenstellung für die Zukunft - so wie es Contao 5 eben auch war.
Input-Encoding
Ein Thema, das uns schon seit Jahren begleitet, ist das Input-Encoding. Contao führt dieses Konzept mittlerweile seit fast 20 Jahren mit sich herum, und mit jeder neuen Version versuchen wir, Schritt für Schritt näher an ein sauberes Output-Encoding heranzukommen.
Warum das wichtig ist, zeigt ein Blick auf die OWASP Top 10: A03 Injection – und dazu
gehört auch XSS – zählt immer noch zu den Top 3 der häufigsten Angriffsvektoren. Fehlendes oder fehlerhaftes Output-Encoding spielt dabei eine zentrale Rolle.
Ein entscheidender Baustein auf unserem Weg weg vom Input-Encoding ist Twig. Twig bringt Output-Encoding
standardmässig mit und ist daher der Schlüssel, um Contao langfristig sicher aufzustellen. Das bedeutet aber auch:
Wir müssen vollständig auf Twig setzen und unsere alten html5 Templates entfernen. Es führt
kein Weg daran vorbei, wenn wir weiterhin als sicheres CMS gelten wollen.
Martin und Moritz haben sich während des Entwicklertreffens wieder intensiv mit diesem Thema auseinandergesetzt
und dabei einen grossen Durchbruch erzielt:
Sie haben einen Weg gefunden, im Core alle (!) Templates von html5 auf Twig umzuschreiben – und zwar so, dass
dies in Contao 5.7 keine bestehenden Anpassungen braucht.
Bspw. ein in der Applikation angepasstes mod_article.html5 würde also nicht plötzlich ignoriert. Ein extrem wichtiger Schritt auf dem Weg zu einem sauberen Output-Encoding!
Eine mögliche Idee, die wir diskutiert haben, ist, dass Contao 6 rein aus dem Wechsel von Input- zu Output-Encoding bestehen könnte. Das würde bedeuten:
- Die Daten in der Datenbank müssten migriert werden.
- Es würden nur noch Twig-Templates unterstützt.
Aber, und das ist wichtig: Hier sind noch einige Fragen offen, und nichts ist final entschieden.
Nichtsdestotrotz, der allgemeine Hinweis: Wer immer noch html5 Templates schreibt, sollte besser gestern damit
aufhören und mit Twig arbeiten.
Abschaffung von Frontend-Modulen
Beim letzten Entwicklertreffen haben wir entschieden, dass die Frontend-Module langfristig zu Gunsten von Inhaltselementen verschwinden werden. Ich habe damals bereits ausführlich darüber geschrieben.
Ein grosses Problem bei der Umstellung: Viele der aktuell in den Modulen verfügbaren Datenbankfelder (über 80!)
sind bisher nicht Teil von tl_content, sondern nur von tl_module.
Würden wir diese einfach so übernehmen, würden wir schnell auf die bekannten "Row-Size"-Probleme stossen – denn
Datenbanken können nun mal keine Tabellen mit beliebig vielen Spalten verarbeiten.
Ich habe bereits beim Entwicklertreffen 2023 versucht, einen Ansatz mit einem JSON-Datentypen
zu bauen. Die Idee war auch schon damals, mehrere Felder in einer einzigen JSON-Spalte zu speichern und so die Spaltenanzahl zu reduzieren.
Damals bin ich allerdings an verschiedenen Limitierungen gescheitert – sowohl konzeptionell als auch technisch.
Dieses Mal haben wir die Anforderungen überarbeitet, sodass etwa aus diesen Feldern weder gefiltert noch gesucht
werden können soll und dass sie auch nicht als Subpaletten-Trigger dienen können. Zusätzlich haben wir inzwischen
neue technische Möglichkeiten (bspw. DataContainer::getCurrentRecord()). Fritz hat daher einen neuen Anlauf
gewagt und Stand heute sind wir zuversichtlich, dass wir in Contao 5.7 endlich (!) eine Lösung für "virtuelle DCA-Felder" liefern können!
Parallel dazu hat Dave das gesamte Entwicklertreffen genutzt, um weitere Frontend-Module konsequent zu
Inhaltselementen umzuschreiben – ein wichtiger Schritt, der nicht einfach nur aus "Copy & Paste" besteht, sondern
natürlich auch dazu genutzt wird, die entsprechenden Elemente zu modernisieren (bspw. Symfony Forms für Formulare etc.).
Pagination
Wenn wir schon bei modernen Elementen und Twig-Templating sind, darf ein weiteres Thema nicht fehlen: die gute alte Pagination-Klasse.
Die existiert schon seit einer halben Ewigkeit und ist, ehrlich gesagt, ziemlich in die Jahre gekommen. Bisher
spuckt sie am Ende einfach nur einen fertigen HTML-String aus – ohne die Möglichkeit, die einzelnen Komponenten wie
"vor", "zurück" oder die Seitennummern gezielt im Template anzusteuern.
Fritz hat sich dieser Baustelle angenommen und eine komplett neue Pagination entworfen. Diese ermöglicht es,
die einzelnen Bestandteile viel flexibler im Template zu verwenden und sorgt so für sauberes, modernes Markup.
In seinem Pull Request hat er bereits alle Verwendungen im Core durch die neue Implementierung ersetzt. Und das war richtig viel Arbeit, denn die Pagination wird an vielen Stellen verwendet – unter anderem im Feed-Reader, im Galerie-Inhaltselement, in den Backend-Listen, bei allen Listen-Frontend-Modulen, bei Kommentaren und vielem mehr.
Row Wizard
Sebastian und Andy haben zusammen ein neues Widget namens Row Wizard entwickelt. Viele Entwickler*innen
aus der Community kennen vielleicht den "MultiColumnWizard" (kurz "MCW"), der die Definition von beliebigen Widgets
und das Duplizieren von Zeilen erlaubt. Der Row Wizard ist sein moderner Ersatz für die meisten Anwendungsfälle
und wird ab Contao 5.7 direkt im Core verfügbar sein.
Der bisherige "Key-Value Wizard" ist quasi ein Row Wizard mit zwei Feldern (nämlich key und value) und wird damit
überflüssig. Wir deprecaten diesen entsprechend und werden ihn irgendwann aus Contao entfernen. Die Migration auf
den neuen Row Wizard ist denkbar einfach und erfordert lediglich eine Anpassung im DCA. Das existierende Format in
der Datenbank ist vollständig kompatibel und eine Datenmigration ist daher nicht erforderlich.
Erweiterung der Backend-Suche
Mein persönliches neues Baby ist die in Contao 5.5 eingeführte Backend-Suche, welche ich für Contao 5.7 nun nochmal
deutlich erweitert habe. Ab Contao 5.7 kann sie nämlich jetzt facettiert werden! Das bedeutet, man kann nicht
mehr nur einfach nach einem Keyword suchen, sondern die Suchresultate neu auch gezielt nach Typ einschränken – zum
Beispiel, um nur Treffer vom Typ News oder Artikel anzuzeigen.
Im Falle von Dateien geht das sogar noch einen Schritt weiter: Dort kann man zusätzlich nach der Datei-Extension
filtern und sich z. B. gezielt nur PDF-Dateien anzeigen lassen
Ein Grossteil der Arbeit fand auch schon vor dem Treffen statt: In den letzten Monaten habe ich sowohl Loupe als auch SEAL um die Unterstützung für Facetten erweitert.
Die Implementierung in Contao 5.7 ist nun sozusagen die Ernte dieser langen Vorarbeit.
Ein grosses Dankeschön geht ausserdem an Sebastian, der meine fehlenden Styling-Skills mehr als wettgemacht und
sich um die schöne Darstellung im Backend gekümmert hat.
Attachments für das neue Jobs-Framework
Wenn ich schon bei meiner Wenigkeit bin, dann ergänze ich an dieser Stelle noch, dass das in Contao 5.6 eingeführte
Jobs-Framework in 5.7 um Attachments ergänzt wird. So können also dann einem Job beliebige Anhänge hinzugefügt und
schliesslich von einem User via Backend heruntergeladen werden. Ich habe ausserdem damit begonnen, die aktuelle
Implementierung des Crawlers in der Systemwartung auf das neue Job-Framework umzubauen, um eine einheitliche UX zu
garantieren.
User Experience – viele kleine und grosse Schritte für eine bessere Bedienung
Wenn wir schon beim Thema UX sind, möchte ich an dieser Stelle auf einige Verbesserungen eingehen, an denen
fleissig gearbeitet wurde. Zwei davon stechen besonders heraus, auch wenn viele andere mindestens genauso wichtig sind.
Twig und Ace
Ace ist unser Editor im Twig Template-Studio. Er unterstützt grundsätzlich Syntax-Highlighting für Twig,
aber das Regel-Set, das dort zum Einsatz kommt, ist hard-coded und nicht immer auf dem neuesten Stand. Doch selbst wenn dieses Regel-Set die aktuelle Twig-Version abbilden würde, wüsste es dennoch nichts über die ganzen Contao-spezifischen Funktionen – oder über Twig-Funktionen, Filter und Tags, die durch Erweiterungen hinzukommen. Ein gutes Beispiel sind unser eigenes Slot-Konzept oder Funktionen wie figure() und attrs().
Moritz hat dieses Problem gelöst, indem er ein dynamisches Regel-Set entwickelt hat, das die Informationen
direkt aus unserem Twig-Environment extrahiert. Das bedeutet, dass künftig alle Contao-spezifischen Twig-Funktionen, Filter und Tags automatisch erkannt und im Editor korrekt hervorgehoben werden. Das Arbeiten im Template-Studio wird dadurch spürbar angenehmer!
Referrer-Management
Contao verfügte schon immer über eine interne „zurück"-Logik. Es gibt den „Zurück"-Button oben rechts, ausserdem
Operationen wie „Speichern und schliessen" oder „Speichern und zurück". Diese Funktionen basierten bisher auf einer
recht komplexen Logik, die versucht hat, in der Session festzuhalten, von wo ein Benutzer ursprünglich gekommen
ist. Das führte häufig zu inkonsistentem Verhalten und machte es fast unmöglich, Fehler zu reproduzieren. In manchen
Fällen landete man nach einer Aktion sogar auf scheinbar völlig zusammenhangslosen Seiten.
Wir haben uns daher entschieden, das gesamte Referrer-Management zu überarbeiten. Statt der bisherigen dynamischen
Logik setzen wir künftig auf hierarchische Navigationslinks. Damit wird das Navigationsverhalten deterministisch
und nachvollziehbar. Alle Links im Backend werden künftig keine ref-Parameter mehr enthalten, und das Ergebnis ist
eine deutlich konsistentere UX. Martin hat sich intensiv mit diesem Thema beschäftigt, und ich kann euch sagen:
Es fühlt sich jetzt schon so viel besser an! Vielleicht gibt es noch einzelne Sonderfälle, die wir später anpassen
müssen, aber in jedem Fall wissen wir dann, warum der Link dahin zeigt, wo er eben hinzeigt und es ist nicht mehr so,
dass es für User A anders sein kann als für User B. Alleine das ist ein absoluter Win für Contao und eine einheitliche UX!
Weitere UX-Verbesserungen
Daneben gab es noch viele weitere Änderungen und Konzeptideen, die die Bedienung von Contao verbessern sollen:
- Sebastian hat zusammen mit Andy die Toolbar-Funktionen überarbeitet. Die Favoriten wandern künftig in
den Breadcrumb und Funktionen wie der Dark-/Light-Mode-Switch wandern in das Profil-Dropdown. Alles so, dass die wichtigsten Funktionen schnell erreichbar bleiben.
- Andy hat ausserdem mit der Idee einer neuen Operation in den "Parent Views" gespielt, die das Einfügen von
neuen Elementen zwischen bestehenden Elementen viel komfortabler macht.
- Ein grosser Teil von seiner Arbeit floss auch in den Dateimanager: Die Permissions und Operations und somit auch
das Kontextmenü sollen sich dort künftig entsprechend konsistent mit dem Rest des Backends verhalten.
- Apropos Kontextmenü: Hier sind wir mit dem aktuellen Stand in Contao 5.6 noch nicht ganz zufrieden und haben an
Konzepten gearbeitet, wie wir die Operations für Contao 5.7 überarbeiten können.
- Sebastian und Andy haben ausserdem wieder viele Funktionen in Stimulus überführt. Dadurch konnten wir unsere
Abhängigkeit von MooTools weiter reduzieren – wir sind jetzt bei nur noch wenigen Prozent im Vergleich zum gesamten
JavaScript-Anteil im Backend. Die vollständige Entfernung von MooTools rückt damit in greifbare Nähe. Gleichzeitig
bringt dieser Umbau auch Vorteile bei der Wiederverwendbarkeit der Komponenten. So ist es künftig zum Beispiel
möglich, im Checkbox-Wizard (z. B. bei den Benutzerberechtigungen) mit gedrückter Shift-Taste mehrere Checkboxen
gleichzeitig auszuwählen. Ausserdem kann man nun Datensätze für den "Mehrere bearbeiten"-Modus ohne Seiten-Reload
und sogar bequem per Tastenkombination auswählen.
- Dank Sebastian ist die Preview-Toolbar im Frontend jetzt im Shadow-DOM untergebracht, was zu weniger unerwarteten
Seiteneffekten führt. Ausserdem haben wir mit Seiten-Transitions im Backend experimentiert, um ein flüssigeres
"App-Feeling" zu erreichen.
- Leo hat dem Backend ein frischeres Look & Feel verpasst. Die linke Spalte hat keinen separaten Hintergrund mehr,
Abstände und
border-radius-Werte wurden vereinheitlicht und das Backend wirkt insgesamt deutlich luftiger. Auf
seiner To-do-Liste steht ausserdem noch die Überarbeitung der Popups, die ebenfalls ein wenig in die Jahre
gekommen sind.
Alles in allem sind das viele kleine Schritte, die zusammen eine spürbar modernere und konsistentere UX ergeben – und
Contao 5.7 wird sich damit garantiert noch runder anfühlen.
Diverses
Wie bei jedem Entwicklertreffen gab es auch diesmal wieder eine Reihe von Hausaufgaben, die vielleicht nicht besonders
spannend klingen, aber trotzdem enorm wichtig sind, damit Contao langfristig stabil und zukunftssicher bleibt.
So haben wir unter anderem PHPUnit auf die aktuelle Version 12 aktualisiert und in Vorbereitung auf die kommende
Symfony Version 7.4 bereits alle Abhängigkeiten auf Symfony 7.3 umgestellt. Das sorgt dafür, dass wir beim kommenden
Symfony-Upgrade möglichst reibungslos wechseln können.
Und nicht zuletzt: Wir haben während des Treffens über 30 Bugs gefixt.
Viele davon waren kleinere Probleme, andere eher richtig knifflige Sachen (bspw. das Seitentitel-Problem im
Breadcrumb) – insgesamt ein grosser Schritt, um Contao noch stabiler zu machen.
Ansonsten möchte ich nochmal auf die Contao Konferenz vom 25. - 26.09.2025 in Düsseldorf aufmerksam
machen. Ich wünsche mir, dass möglichst viele den Weg an den Rhein finden und mit uns auf das Erreichte anstossen!
That's all Folks, wir sehen uns in zwei Wochen!
– Yanick
Kommentare
Kommentar von Marcus Lelle |
Danke, Yanick, für diesen sehr ausführlichen Bericht. Denn kann man dreimal lesen und entdeckt immer noch etwas Neues.
Schön, wenn wir euch mit unserem Paket ein Lächeln ins Gesicht und Motivation in die Finger zaubern konnten. So soll es sein.
Ich freue mich schon auf Düsseldorf und viele alte und neue Gesichter in der Community.
Kommentar von Franko |
Ich kann gar nicht ausdrücken, wie sehr ich diese Zusammenfassungen und Ausblicke schätze!
Danke Yanick für diesen Rückblick. Dank dem Team für das Engagement und deren Weitsicht.
Danke Marcus für die Unterstützung & dem »Feel Good« Faktor.
Lieben Gruß
Franko
Kommentar von Andreas Fieger |
Danke an Yanick für den (wie immer) tollen Bericht vom Entwicklertreffen. Auf den"JSON-Datentyp" freue ich mich besonders.
Werde leider nicht in Düsseldorf dabei sein.
Kommentar von Sascha |
Vielen Dank für den Bericht und eure Arbeit.
"Krass", was Ihr in nur 3 Tagen alles bewegt habt.
Kommentar von Oliver Willmes |
Danke für den Bericht und die vielen Stunden intensiver Arbeit am Projekt Contao.
Wir sehen uns in Düsseldorf.
Kommentar von Niels Hegmans |
Das hört sich großartig an. Vielen Dank für den Bericht, Yanick! Verrückt, wie viel ihr geschafft habt. Ich freue mich riesig auf die 5.7.
Einen Kommentar schreiben