TYPO3 Neos: Ein Blick unter die Haube

TYPO3 Neos: Ein Blick unter die Haube

Als das TYPO3-Entwicklerteam auf der T3CON in Stuttgart das Next-Generation-CMS Neos ankündigte, hatte dieses System bereits einen weiten Weg hinter sich. So wurde es 2008 zunächst als TYPO3 5.0 angekündigt und trug zwischendurch den Namen Phoenix. Quasi als „Nebenprodukt“ entstand das Applikations-Framework TYPO3 Flow (ehemals FLOW3). Seit letzter Woche steht die erste Alpha-Version des neuen CMS zum Download zur Verfügung – Grund genug, dem neuem System einmal unter die Haube zu schauen.

  1. Verwaltung von Inhalten
  2. Einführung
  3. Definition eigener Knotentypen
  4. Tipps und Tricks
  5. Hilfe, ich habe alles kaputt gemacht!
  6. Geschwindigkeitsvorteil durch Kontextwechsel
  7. Fazit

Wichtigste Funktion eines CMS ist, wie der Name bereits besagt, das Verwalten von Inhalten. Neos verfolgt in dieser Hinsicht einen etwas anderen Ansatz als aus TYPO3 bekannt, daher möchte ich in diesem Artikel zunächst einmal einen Blick darauf werfen, wie Neos mit Inhalten umgeht. Im zweiten Abschnitt des Artikels betrachte ich anschließend noch ein paar typische Problemstellungen, die sich beim Arbeiten mit der Alpha-Version ergeben könnten, und wie diese angegangen werden können.

Verwaltung von Inhalten

Einführung

typo3 conent types

Ein bedeutender Unterschied im Vergleich zu TYPO3 liegt bei Neos in der Art und Weise, wie Inhalte verarbeitet werden. Zur Erinnerung: Struktur und Inhalte einer Webseite werden in TYPO3 über Seiten und Inhaltselemente abgebildet. Dabei kann jede Seite beliebige Unterseiten haben und Inhaltselemente beinhalten. Eine Verschachtelung von Inhaltselementen ist standardmäßig jedoch nicht vorgesehen, bzw. nur über Umwege wie Grid Elements oder Templavoilà möglich.

In Neos sind Inhalte einer Website anders modelliert: Die aus TYPO3 bekannte strikte Trennung von Seiten und Inhaltselementen wurde aufgehoben. Eine Neos-Seite besteht nun nur noch aus Knoten (engl. nodes), die in nahezu beliebigen Hierarchien angeordnet werden können. Ein solcher Knoten kann beispielsweise eine Seite sein, aber auch ein klassisches Text-Inhaltselement oder ein Strukturelement wie beispielsweise ein zweispaltiger Container. Somit unterstützt Neos von Haus aus ein beliebig tief verschachtelbares Content-Modell.

Um die Knoten-Struktur einer Seite zu betrachten, könnt Ihr den Inspect-Button verwenden, der sich in der unteren linken Ecke des Backends befindet.

Definition eigener Knotentypen

Auch die Definition eigener Knoten-Typen ist über das ebenfalls neu eingeführte TypoScript 2 problemlos möglich. Mit folgenden TypoScript kann beispielsweise ein neuer Knotentyp definiert werden. Zum Rendern des Knotens wird ein benutzerdefiniertes Template verwendet.

Der neue Inhaltstyp kann dem System anschließend per Konfiguration bekannt gemacht werden (üblicherweise in der Settings.yaml Eures Pakets):

Auf diese Art und Weise angelegte Inhaltselemente stehen den Redakteuren der Seite im Backend sofort zur Verfügung. Das genaue Vorgehen zum Erstellen eigener Inhaltselemente zu beschreiben würde an dieser Stelle zu weit führen. Dennoch kann man an obigem Beispiel sehr gut sehen, wie einfach es ist, mit nur ein paar Zeilen TypoScript das System nach komplett eigenen Vorstellungen erweitern oder verändern zu können.

Tipps und Tricks

Hilfe, ich habe alles kaputt gemacht!

Falls Ihr nach ein wenig Experimentieren den Ausgangszustand der Seite wieder herstellen möchtet, könnt ihr hierzu den eingebauten Flow-Kommandozeilen-Client verwenden. Mit den folgenden beiden Kommandos könnt Ihr zunächst die aktuelle Seite komplett löschen, und anschließend aus dem Paket TYPO3.PhoenixDemoTypo3Org wieder die Standard-Inhalte einspielen:

Wollt ihr hingegen Änderungen an Eurer Seite sichern, um diese später wiederherstellen zu können, geht dies auch ohne Probleme. Mittels des Kommandozeilen-Clients könnt ihr eine komplette Seite ins XML-Format exportieren und auch wieder importieren:

Geschwindigkeitsvorteil durch Kontextwechsel

Falls Ihr den Eindruck habt, dass sich Front- oder Backend langsamer verhalten, als sie es sollten, gibt es auch hierfür Abhilfe. Der Grund dafür, dass Neos im Auslieferungszustand im Vergleich zu anderen Web-Applikationen eher langsam wirkt, liegt in der Dateiüberwachung (engl. File Monitoring). So überprüft Flow bei jedem Klick diverse Dateien auf Änderungen; dies betrifft vor allem Konfigurations-, aber auch Code-Dateien.

Da beispielsweise das integrierte AOP-Framework mit Proxy-Klassen arbeitet, die in temporären PHP-Dateien gespeichert werden (um das Prinzip nachzuvollziehen schaut doch nach einigen Klicks im Frontend einfach mal in das Verzeichnis Data/Temporary/Development/Cache/Code/Flow_Object_Classes), muss Flow permanent die Original-Dateien auf Änderungen überwachen, um gegebenfalls neue Proxy-Klassen erstellen zu können. Das gleiche Prinzip gilt für Fluid-Templates, die ebenfalls in Form temporärer PHP-Dateien zwischengespeichert werden.

Während des Entwicklungsprozesses macht diese Überwachung von Dateien auf Änderungen grundsätzlich Sinn; immerhin hat sie den Effekt, dass Änderungen am Code –wie von anderen Web-Applikationen ja auch gewohnt – sofort sichtbar werden. Würde dies nicht geschehen, müsste der Entwickler nach jeder Änderung manuell den Cache leeren. Die Seite aus einem leeren (oder kalten) Cache immer wieder komplett neu aufzubauen würde letzten Endes noch mehr Geschwindigkeit kosten, als die Dateiüberwachung.

Wird an dem Projekt jedoch nicht mehr entwickelt, macht die Dateiüberwachung keinen Sinn mehr, denn im Produktivbetrieb muss nicht mehr damit gerechnet werden, dass sich der zugrunde liegende Code alle paar Minuten ändert. Aus diesem Grund unterscheidet Flow (und damit auch Neos) zwischen zwei sogenannten Kontexten: Dem Produktions- und dem Entwicklungskontext. Im Entwicklungskontext ist die Dateiüberwachung aktiv, darüber hinaus werden allgemein weniger Daten zwischengespeichert und das System präsentiert ausführlichere Debugging-Ausgaben. Im Produktionskontext hingegen wird sehr aggressiv gecacht, was die Performance der Seite stark verbessert.

Standardmäßig operiert jede Flow-Applikation erst einmal im Entwicklungskontext. Das Aktivieren des Produktionskontexts ist über eine Umgebungsvariable möglich, die entweder in der VirtualHost-Konfiguration des Webservers oder in einer .htaccess-Datei gesetzt werden kann. Um den Produktionskontext per .htaccess zu aktivieren, könnt Ihr einfach die Anweisung SetEnv FLOW_CONTEXT Production in die Datei Web/.htaccess eintragen.

Hinweis: In den von Mittwald bereitgestellten TYPO3 Neos Testaccount ist der Produktionskontext bereits standardmäßig aktiviert. Um wieder zurück in den Entwicklungskontext zu wechseln, könnt Ihr einfach die entsprechende Anweisung in der .htaccess wieder entfernen bzw. auskommentieren.

Funktionierende Paketverwaltung

Eventuell wird Euch auch bereits der PHP-Fehler aufgefallen sein, der im Neos-Backend in der Paketverwaltung auftritt. Hierbei handelt es sich um einen bereits bekannten Bug der Version 1.0-alpha1. Einen Patch zur Behebung ist in unseren Test-Accounts standardmäßig bereits eingespielt.

Fazit

Obwohl sich Neos noch in der Entwicklungsphase befindet, macht die erste Alpha-Version bereits einen vielversprechenden Eindruck. Das flexible Content-Modell ist ein deutlicher Vorteil gegenüber des starren Modells früherer TYPO3-Versionen. Die Konfigurationssprache TypoScript 2 greift die Philosophie des klassischen TypoScripts auf, nach der alles konfigurierbar ist, und erweitert den Sprachumfang dabei um sinnvolle Konzepte wie beispielsweise die Prototypenbasierte Objektorientierung.

Selbstverständlich kann Neos in der ersten Alpha-Version vom Funktionsumfang noch nicht mit dem „großen Bruder“ TYPO3 mithalten. Dennoch hinterlässt der Release einen durchweg positiven Eindruck und macht Lust auf mehr. Die In-Place-Bearbeitung von Inhalten im Backend ist ein Quantensprung gegenüber der zuweilen umständlichen TYPO3-Oberfläche, die bereits vorhandenen Backend-Administrationsoberflächen sind gut durchdacht und konsequent umgesetzt. Mittels TypoScript 2 kann nahezu jeder Aspekt des Systems an die eigenen Bedürfnisse angepasst werden und dank des sauber implementierten, objektorientierten Flow-Unterbaus kann nahezu jeder Aspekt des Systems erweitert oder angepasst werden.

Mir macht die Arbeit mit Neos ganz einfach nur Spaß, und ich freue mich auf die nächste Alpha-Version. :)

Kommentare

  1. Gravatar
    Wolfgang am

    Typo3 „Neos“ ist ein trauriges Beispiel dafür, wie man etwas Gutes durch allzu starrsinnigen Dogmatismus verhunzen kann. Schön, jetzt hat man also eine MVC-Struktur in den Extensions. Diese soll ja eigentlich dazu dienen, den Durchblick in von anderen erstellten Programmen zu erleichtern und ebenso die Teamarbeit. Und genau das ist aber nicht der Fall, das Gegenteil wurde erreicht. Alles ist viel komplizierter und dauert länger und Informationen im Netz zu ergoogeln ist auch kaum möglich weil Typo3 sich durch die „genialen“ Neuerungen auf dem absteigenden Ast befindet und sich immer weniger Leute damit beschäftigen. Literatur gibt es auch kaum ausser zwei mittlerweile hoffnungslos veralteten Büchern über Extebase/Fluid.
    A propos Fluid: Sieht verdächtig nach Smarty aus und das war auch schon immer Käse. Man kann Templates direkt mit PHP bauen, da muss man nicht erst extra umständlich noch eine Zwischensprache zusammenklabüstern.
    Sich mit ‚Fluid‘ (‚High Viscosity Grease‘ wäre ein besser Name) ein Template mit allen „Partials“ aus einer html-Vorlage zusammenzufriemeln und einzuspielen dauert auch sehr viel länger als die Sache mit dem genialen TemplaVoila zu erledigen. Der Kunde sieht nicht, ob das CMS seiner Website eine MVC-Struktur beinhaltet (da kann man sich als Programmierer noch so heftig einen runterholen beim Gedanken daran). Er sieht aber, dass die einfachsten Dinge auf einmal viel teurer sind (weil sie mehr Zeit benötigen).
    Fazit: Ich war mal Fan von Typo3, jetzt schaue ich mich (wie viele) lieber nach etwas Besserem um.

    Antworten
  2. Gravatar
    Stefan Krapf am

    Wollte auch mal Neos ausprobieren, wenn ich aber auf der Home-Seite mit „Create Account“ ein Benutzerkonto erstellen will, kann ich mich damit nicht einloggen im Backend!
    Was mache ich falsch?

    Antworten
    1. Martin Helmich am

      Hi Stefan,

      ich hab’s gerade selbst auch nochmal ausprobiert; das Plugin zum Erstellen von Benutzern scheint in der Alpha-Version tatsächlich nicht richtig funktionieren.

      Du kannst aber auch das Kommandozeilen-Tool verwenden, um einen neuen Benutzer anzulegen:


      # ./flow user:create --roles Administrator benutzername passwort vorname nachname

      Ich hoffe, ich konnte dir weiterhelfen. ;)

      Schönen Gruß,
      Martin

      Antworten
  3. Gravatar
    TechDivision am

    Wir haben jetzt mal versucht, in einem etwas umfangreicheren Blogbeitrag die Besonderheiten von TYPO3 Neos zu erläutern. Zudem haben wir ein kurzes Einführungsvideo erstellt, bei dem wir Neos und dessen Besonderheiten – insbesondere im Vergleich mit den bisherigen TYPO3-Versionen – nochmals etwas näher erläutern und zeigen. Das Ganze ist unter abrufbar.

    Antworten
  4. Gravatar
    Florian Wentzel am

    Als alter TypoScript Haase freu ich mich aber sehr auf diesen Ansatz und begrüße das Flexible Content Modell. Das bei TypoScript viele (teils undokumentierte) Wege nach Rom führen ist ja schon heute so…. um so schöner die Belohnung wenn man es mal wieder mit bordmitteln geschafft hat. „stdWrap für alle“ :-)

    Antworten
  5. Gravatar
    Wolfgang Wagner am

    Interessanter Artikel, der mir ein wenig mehr Durchblick verschafft hat, danke dafür. Wobei mir die Typoscripts im obigen Beispiel ziemlich kryptisch erscheinen, ich hoffe, dass hier noch eine ausführliche Doku folgt. Oder gibt es da vielleicht sogar schon was?

    Grüße
    Wolfgang

    Antworten

Kommentar hinzufügen