Contao-News

Wir informieren Dich hier regelmäßig zu Updates, stellen Best-Practice-Arbeiten vor und berichten über Aktuelles aus dem Contaoversum.

Rückblick auf das erste Core-Entwicklertreffen 2023

von Yanick Witschi – Aktuelles

Jedes Jahr trifft sich das Contao Core-Entwicklerteam zwei Mal für einen kurzen Code-Sprint von drei Tagen. Auch bei diesem Treffen mussten wir, aufgrund von Corona, zum dritten Mal in Folge auf eine Person verzichten. Getroffen hat es bei der ersten Ausgabe dieses Jahres Leo und wir hoffen sehr, dass die Serie im Herbst reisst und wir uns endlich mal wieder in corpore treffen können. Immerhin hat es Leos Gesundheitszustand erlaubt, dem Treffen per Videotelefonie beizuwohnen.

Obligatorischer Hinweis: 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.

Zukunftsvision des Contao-Backends

Contao wird mit jedem Release besser und aufgeräumter. Wer schon länger dabei ist, weiss, dass wir immer noch Version für Version Altlasten loswerden und durch neue, bessere Alternativen ersetzen. Contao 5 gab uns die Möglichkeit, eine erste grössere Ladung dieser Altlasten über Bord zu werfen. Und diesen Plan verfolgen wir weiter. Wir bauen weiterhin bessere Wege, markieren die alten als veraltet und werden uns irgendwann mit Contao 6 von ihnen verabschieden. Wann auch immer das sein wird.

Aber so langsam aber sicher nähern wir uns dem Herzen von Contao: dem Backend.

Das Contao-Backend hat über die Jahre diverse Facelifts erhalten und wurde immer mal wieder angepasst. Von einer mobilen Variante über neue Icons bis hin zu - gerade jüngst - einem neuen Dark Mode und verbesserter Darstellung von Inhaltselementen.

Doch grössere, grundlegendere Veränderungen blieben aus. Nicht falsch verstehen: Wir lieben die konsistente Benutzerführung an Contao und wir sind auch überzeugt davon, dass sie mit ein entscheidender Erfolgsfaktor für unser CMS war und nach wie vor ist. Aber es gibt schon Bereiche, in denen wir gerne Verbesserungen anbringen würden - wie bspw. die Idee einer dritten Spalte, um den vorhandenen Platz bei grossen Bildschirmen besser zu nutzen.

Warum das bisher nie geschehen ist, ist relativ einfach erklärt: Es wäre unfassbar aufwändig und komplex. Dies liegt an der Art und Weise, wie Contao die Darstellung und Speicherung der Daten mit den DC_* Treibern und dem dazugehörigen DCA fix verdrahtet. Wir können beispielsweise nicht die Listenansicht wiederverwenden, die Daten aber von einer anderen Quelle laden lassen. Wir können nicht einfach eine neue Spalte einfügen, ohne alle bestehenden Ansichten, von der Listen- bis zur Baumansicht, zu überarbeiten. Wer die Standard-Darstellung von Daten im Backend haben möchte, muss sich auch an die Art und Weise der Speicherung der Daten halten, wie es im Core der Fall ist. Auch hier: Wir lieben die Einfachheit, mit der man eigene Felder schnell definieren und im Backend darstellen lassen kann und auch das - davon sind wir ebenfalls überzeugt - ist ein grosser Erfolgsfaktor. Wir werden selbstverständlich versuchen, die positiven Aspekte der aktuellen Lösung weiter beizubehalten. Aber wir müssen uns langsam aber sicher diesem Herzstück nähern und darüber nachdenken, wie wir Elemente wie das Filterpanel, Bearbeitungsmasken, Baumdarstellungen etc. flexibler und als eigenständige Komponenten wiederverwenden können.

Neben der flexibleren Wiederverwendung von Darstellungselementen, möchten wir auch die Datenspeicherung flexibler gestalten und uns längerfristig von den verschiedenen save_callbacks, onsubmit_callbacks und unseren eigenen Models verabschieden. Uns fehlt eine zentrale «Storage Engine» durch die jeglicher Inhalt in Contao läuft. Entwickler:innen werden sehr genau wissen, wovon ich spreche.

Die gute Nachricht: Wir waren uns über die Zukunft des Backends tatsächlich relativ einig und zum ersten Mal in all den Entwicklertreffen konnten wir eine gemeinsame Vision oder Vorstellung darüber festlegen, wie das Backend in Zukunft zumindest technisch funktionieren soll, so dass es uns die Flexibilität bieten kann, die wir für zukünftige Anpassungen brauchen.

Höchstwahrscheinlich werden wir an einem neuen Content Repository arbeiten. Doctrine ORM ist einfach nicht die richtige Lösung für ein erweiterbares Content Management System. Voraussichtlich werden wir auf Konzepte wie CQRS und (evtl. optional) auch Event Sourcing setzen, um Contao zusätzlich mit besseren Versionierungs- und Audit-Funktionen auszustatten.

Für mehr Flexibilität der grafischen Oberfläche, werden wir voraussichtlich auf den Hotwire-Stack aufsetzen, da dieser unseren Anforderungen am ehesten gerecht wird. Wir möchten unseren Anwendern das Gefühl von einer «Live-App» geben, ohne die Entwickler:innen dazu zu zwingen, tausende Zeilen an JavaScript schreiben zu müssen.

Alle Entscheidungen sind natürlich nicht in Stein gemeisselt und das Hauptziel muss und wird es sein, dass die Developer Experience (DX) nicht leidet, sondern sich im Idealfall sogar noch verbessert. Wir wollen bessere und einfacher verständliche Schnittstellen zur Verfügung stellen und mehr Komplexität in den Hintergrund verfrachten.

Lasst es mich so formulieren: Es ist natürlich ein Mammut-Projekt. Aber wir müssen der Realität auch ins Auge sehen: Irgendwann werden wir nicht mehr um einen Umbau herumkommen. Und es ist einfach viel sinnvoller, unsere Zeit in dieses Projekt zu investieren, als Wochen und Monate damit zu verbringen, neue Ideen in die alte Struktur reinzufriemeln um irgendwann festzustellen, dass wir eben doch nicht um einen Umbau herumkommen.

Wir reden ausserdem wie erwähnt über eine Vision. Visionen sind per Definition langfristiger Natur. Wir reden über eine 5.7 LTS oder vielleicht bis dahin auch schon 6.3 LTS. Des Weiteren ist es undenkbar, diese Konzepte rückwärtskompatibel in die bestehenden DC_*-Treiber einzubauen. Es ist daher viel wahrscheinlicher, dass wir diese Vision als eine Art neue, schöne Parallel-Welt zur aktuellen Umgebung einführen werden. Der aktuelle Plan sieht vor, dies womöglich anhand eines neuen blog-bundles zu tun, welches eben parallel zum aktuellen news-bundle existieren könnte. So könnte wahlweise das eine oder das andere Bundle eingesetzt werden, je nachdem welche Funktionen und Erweiterungen gerade benötigt werden. Auch gibt es bereits Entwürfe zu einem neuen Dateimanager, der ebenfalls parallel zur aktuellen Dateiverwaltung existieren könnte. Auf jeden Fall fühlt sich der Entwurf durch die ganzen «realtime» Turbo-Streams halt einfach an, wie sich eine moderne Applikation eben anfühlen soll. 🔥

Selbstverständlich werden wir daneben auch weiterhin neue Features bauen und unser Bestes geben, Contao wie gewohnt weiterzubringen. Also lasst uns doch direkt damit weiterfahren.

Verschachtelte Inhaltselemente

Martin, Leo und Moritz haben sich mit einem neuen Entwurf von verschachtelten Inhaltselementen beschäftigt. Wir kennen bereits heute das Konzept von «Wrappern», die wir beispielsweise beim Slider oder bei Akkordeons nutzen. Allerdings kennen sich der öffnende und der schliessende Wrapper nicht und es ist problemlos möglich, bspw. den schliessenden Wrapper zu vergessen bzw. zu löschen. Das neue Konzept sieht vor, dass Inhaltselemente selbst definieren können, dass sie Kind-Inhaltselemente erwarten, womit sie selber den öffnenden und schliessenden Teil enthalten und entsprechende Bedienungsfehler nicht mehr möglich wären. Weiter soll man definieren können, welche «Slots» ein solches Inhaltselement zur Verfügung stellt. Kinderelemente könnten dann nur den vorgesehenen Slots zugewiesen werden. Die Anwendung wäre rekursiv denkbar, sodass beliebig tief verschachtelt werden könnte.

Auch das Speichern von Vorlagen, also Kombinationen von verschachtelten Elementen, zur schnelleren Wiederverwendung war ein Thema.

Langfristig gesehen könnte dann auch das heutige Konzept von «Artikeln» wegfallen, da diese im Endeffekt nichts anderes sind als ein Inhaltselement, das in einem bestimmten Slot ausgegeben wird und wiederum aus Kindelementen bestehen kann. Ob das im Backend dann weiterhin «Artikel» heisst und nur technisch die gleiche Logik benutzt oder wir da auch eine andere Bezeichnung finden, sei mal dahingestellt.

JSON-Datentyp im DCA

Ich habe versucht, dem DCA bzw. den DC_*-Treibern die Speicherung von Feldern in einem zentralen JSON-Datenfeld beizubringen. Der grosse Vorteil wäre, dass man nicht mehr für jedes Feld eine dazu passende Spalte in der Datenbanktabelle anlegen müsste. Dieses Vorhaben musste ich aber irgendwann aufgeben, da - und hier wären wir wieder bei der bereits beschriebenen Problematik - zu viele Funktionen in den Treibern sich einfach darauf verlassen, dass die Datenstruktur in einem gewissen Schema vorhanden und ein Datenbankfeld pro Feld existiert. Von der toggle-Operation, filter und search-Attribute, diverse Callbacks, der Diff-Ansicht bis hin zu Subpaletten und submitOnChange uvm.

Wir haben uns schlussendlich darauf geeinigt, dass die Einführung eines solchen Features womöglich für mehr Probleme sorgen würde, als es welche lösen würde.

Berechtigungen im Dateisystem

Seit Contao 4.13 verfügen wir über ein virtuelles Dateisystem, das sich zwar noch immer im «experimental» Status befindet, aber mit jeder neuen Version wächst und besser wird. Eine der letzten (ich wage die Behauptung mal) Hürden für eine neue Dateiverwaltung, ist ein brauchbares Berechtigungssystem. Und hier beziehe ich mich noch nicht mal auf die Art und Weise, wie heute Berechtigungen vergeben werden, sondern auf deren technische Umsetzung. Hier konnten wir eine Lösung finden, die uns in Zukunft auch die Flexibilität geben sollte, unser heutiges Berechtigungssystem auszubauen. Heute sind wir nur in der Lage, Filemounts und erlaubte Operationen zu definieren. Wir können die Berechtigungen aber nicht pro Verzeichnis unterschiedlich einstellen. Also sowas wie Löschberechtigungen in Verzeichnis A aber nicht in Verzeichnis B ist heute nicht möglich und wäre auch sehr schwer umzusetzen. Die neue Lösung wird uns die dazu nötige Flexibilität geben. An der Umsetzung dieser Lösung hat Moritz gewerkelt.

Crawler für geschützte Seiten

David hat sich - wie eigentlich bei jedem Entwicklertreffen - mal wieder mit Security beschäftigt. Es gibt scheinbar in diesem Bereich immer irgendetwas zu tun. Vielleicht liegt es auch einfach an der Tatsache, dass ein gutes Content Management System so einiges mit Sicherheit, Authentifizierung und Autorisierung am Hut hat. Auf jeden Fall war er mit einer token-basierten Authentifizierungsmöglichkeit beschäftigt, die es irgendwann ermöglich soll, unserem contao:crawl Kommando das Crawlen und somit auch Indexieren von geschützten Seiten beizubringen.

Content Security Policy

Die Content Security Policy (CSP) ist eine zusätzliche Sicherheitsebene, die dazu beiträgt, bestimmte Arten von Angriffen wie Cross-Site Scripting (XSS) und Dateninjektionsangriffe zu erkennen und zu entschärfen. Diese Angriffe werden für alles Mögliche genutzt, vom Datendiebstahl über die Verunstaltung von Websites bis hin zur Verbreitung von Malware. Wer sich bereits ein bisschen damit beschäftigt hat, hat vielleicht auch bereits festgestellt, dass die Integration in einem CMS wie Contao gar nicht so leicht ist. In unserem ständigen Bestreben, Contao so sicher wie möglich zu machen, haben wir uns entsprechend über mögliche Lösungen für dieses Problem unterhalten und einen Lösungsansatz gefunden. So soll es in Zukunft möglich sein, in den Rootseiteneinstellungen die automatisierte Erstellung einer Content Security Policy zu aktivieren. Im Prinzip soll es analog der in 4.13 eingeführten Lösung für Canonical-Links funktionieren: Administratoren können die grundlegende Policy selber festlegen. Contao bietet dann ein Framework, mit dem Inhaltselemente bzw. deren Templates und somit auch alle Erweiterungen diese Policy selber mit dynamisch inkludierten JavaScript-Dateien, Styles, iFrames etc. erweitern können. Inklusive automatischer Nonce-Verwaltung. Im Idealfall wäre das dann also eine weitere Funktion, die für Anwender:innen von Contao das Aktivieren einer einzigen Checkbox bedeuten würde. Den Rest übernimmt Contao. 🚀

Bugfixes und Diverses

Die Entwicklertreffen bieten auch immer wieder die Gelegenheit, komplexere Bugs zu besprechen und entsprechende Bugfixes zu finden. Auch dieses Mal waren es wieder zu viele, um sie alle einzeln zu erwähnen, aber vielleicht habt ihr auch festgestellt, dass die Benutzer-Session ganz schön gross werden kann. Die Ursache haben wir gefunden und die Logik gleich auch noch verbessert. Daneben kann man jetzt dann contao:crawl mit einer Job-ID nutzen und ein schon länger bestehendes Problem im Zusammenhang mit Berechtigungen und dem Picker wurde behoben.

Neben Bugfixes haben wir den Code allgemein ein bisschen aufgeräumt, nutzen den Combiner im Backend nicht mehr und Andy hat stundenlang alte Backend-Permissions auf unser neues Security-Voter-System umgebaut. Eine der vielen, vielen eher langweiligen aber aufwändigen und nicht weniger wichtigen Aufräumarbeiten, zu denen ich nicht wirklich viel erzählen kann, aber die für Contao natürlich genauso wertvoll sind.

Organisatorisches

Neben den ganzen technischen Herausforderungen haben wir uns auch noch zum Thema Release-Planung unterhalten. Der aktuelle Release-Plan sieht vor, dass die Release Candidates von neuen Minor-Versionen jeweils Mitte Januar und Mitte Juli veröffentlicht werden. Das bedeutet im Umkehrschluss, dass alle neuen Funktionen in den Wochen zuvor fertiggestellt und vom Core-Team überprüft werden müssen. Diese äusserst aufwändige Arbeit fällt somit exakt in die Urlaubs- und Weihnachtszeit und ist entsprechend etwas suboptimal. Allerdings sind die Daten auch bewusst so gelegt, dass sich unsere LTS-Versionen mit den LTS-Zeiträumen von Symfony decken. Wir haben einige Alternativen durchgespielt, konnten uns aber noch nicht auf eine bessere Lösung einigen. Sobald es Neuigkeiten dazu gibt, würden wir diese natürlich über diesen Kanal auch ankündigen.

That's all Folks! Vielleicht ist das ein oder andere hier angeschnittene Thema dann auch ein Bestandteil eines Vortrags auf der Contao Konferenz vom 19. - 20.10.2023 in Kiel - see you there?!

– Yanick

Alle News anzeigen

Kommentare

Kommentar von Marcus Lelle |

Super, liebes Core-Team und vielen Dank, Yanick, für den ausführlichen Bericht.
Ihr alle macht einen geilen Job und ich freue mich schon auf viele neue Features, auch wenn manche unsichtbar „unter der Haube sind“.

Gruß Marcus

Kommentar von Ernst Jendritzki |

Super, da sind wir auf einem guten Weg, würde ich sagen.
Sehr spannend, und auch richtig, mutige Architekturentscheidungen zu treffen, damit Contao zukunftssicher bleibt.
Führt das vielleicht auch zu einer GUI für mobile Apps?

Kommentar von Arachnophilia |

Moin
Für mich sind die Entwicklungen an einem Produkt grundsätzlich wichtig um eine Weiterentwicklung und damit einen Fortbestand zu sichern! Vieles entwickelt sich einfach mit neuen Möglichkeiten weiter.
Ich setzte derzeit die aktuellste Version der 4.13.x Serie ein und würde liebend gerne auf die Version 5.1.x wechseln.
Aber die Kompatibilität vieler eingesetzten Erweiterungen unter der V4.x kann den "rasanten" Änderungen der V5.x nicht Stand halten. Das hält mich an dem Einsatz der V5 ab.
Möglicherweise werden dadurch in Zukunft tolle Erweiterungen nicht mehr weitergepflegt oder angepasst. Auf diese Weise sind bereits einige Erweiterungen verwaist.

Isofern wünsche ich mir als reiner Anwender, dass die Entwickler von Erweiterungen der Entwicklung der V5 nicht immer hinterhecheln müssen sondern gute Schnittstellen bekommen um mit der Entwicklung der eigenen Produkte mithalten können.
LG

Antwort von Yanick Witschi

Erweiterungen können grundsätzlich problemlos für Contao 4.13 und 5.x kompatibel gemacht werden. Das hängt natürlich von der Grösse und Komplexität der Erweiterung ab. Aber die Änderungen in 5.x kommen eigentlich weder "rasant" noch überraschend. Version 4 ist bald 6 Jahre alt - eine halbe Ewigkeit in unserer Branche :-)

Der wahre Grund dafür, dass gewisse Erweiterungen ggf. noch nicht kompatibel sind oder es nie sein werden dürfte eher darin liegen, dass sie keine oder viel zu wenig finanzielle Unterstützung erfahren.

Die Diskussion ist eröffnet und darf gerne im Forum oder bei Slack weitergeführt werden :-)

Einen Kommentar schreiben

Bitte rechnen Sie 3 plus 5.