Sonntag, 5. Februar 2012


Artikel

Juli 2010 | Artikel

MODx: Revolution

(Link zum Artikel: http://www.entwickler-magazin.de/php/artikel/3190)

Ein Anwenderbericht zum Content Management Framework

Text: Stefan Gruber
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Viele werden es auch bereits hinter sich haben: Die Suche nach "DEM" Content-Management-System! So erging es auch mir vor einigen Jahren, also habe ich mal zu googeln begonnen und doch etliche Systeme getestet …
Teil 1   Teil 2   Teil 3   Teil 4   Teil 5   

Ich hatte mir dazu eine Anforderungsliste mit "must haves" und "nice to haves" erstellt. Aber da ich schon zuvor mit einigen Systemen gearbeitet habe, war eines der wichtigsten Kriterien das CMS-Backend. Jener Bereich, den Entwickler und auch Anwender mehr oder weniger gut nutzen können und der sich dementsprechend auf die Motivation auswirkt. Einfach zu verstehen und übersichtlich, so sollte dieser Bereich gestaltet sein. Die gängigen Module und Plug-ins sind bei den Content-Management-Systemen ja meistens bereits Bestandteil, aber wie Anwender damit arbeiten können, war und ist weiterhin einfach elementar.

MODx Facts

MODx ist ein Fork von Etomite und 2005 entstanden. Ausgehend von den Gründern Raymond Irving und Ryan Thrash wurde das Projekt von einem engagierten Team vorangetrieben. 2007 wurde MODx von Packt Publishing als das vielversprechenste neue CMS ausgezeichnet.

Und hier hat die Liebe (auf den ersten Blick) zu MODx begonnen, wobei mir zu Beginn noch gar nicht klar war, welch beeindruckendes und doch einigermaßen simples Framework dahinter steckt.

Wie oder wo kann MODx nun eingeordnet werden?

Verglichen mit den populären Systemen wie TYPO3, Drupal, Joomla! oder WordPress orientiert sich MODx schon eher an TYPO3, wobei ein direkter Vergleich hinken würde, so wie die Geschichte mit den Äpfeln und Birnen. MODx ist im eigentlichen Sinne auch ein Content-Management-Framework, welches mit einem kompletten Backend und einem entsprechenden API standardmäßig ausgestattet ist.

MODx-Funktionsüberblick

  • Mehrsprachigkeit
  • Installationsprozess
  • Web Standards
  • Content- und Datenverwaltung
  • Flexible und erweiterbare Dateneingabemasken
  • Meta-Verwaltung
  • SEO
  • Berechtigung über User, Rollen und Workflow
  • Internes Message System
  • System- und Benutzerlogs
  • Import/Export
  • Backup
  • Frontend Editing
  • Backend Erweiterbar durch Komponenten und Plug-ins

Im Basispaket werden die wichtigsten Add-Ons (Snippets, Plug-ins und Komponenten), inklusive einer Demosite (Struktur und Inhalt/Dokumente, Templates und Chunks) ausgeliefert.

Die Zeiten der Core-Hacks sind (schon lange) vorbei

Aufgebaut ist das CMS über einen Softwarekern, der im Grunde nie angefasst werden muss. Das genial Einfache: Mit der MODx-Terminologie, bestehend aus Dokumenten, Links und Template -Variablen für das Erfassen von Inhalten und Templates, Chunks, Snippets, Plug-ins und Komponenten für die Verarbeitung und Ausgabe von Inhalten, wird es zu einem sehr flexiblen und anpassungsfähigen Tool, welches sich nicht hinter den anderen prominenten Systemen verstecken muss.

Terminologie

Ressource: Eine Ressource dient zur Speicherung von Inhalten innerhalb von MODx. Es gibt vier verschiedene Ressource-Typen:

  • Dokument: Standardressouce für die Datenerfassung
  • Weblink: Ein Verweis auf eine interne oder externe Seite
  • Symlink: Ein symbolischer Link, wobei die Darstellung durch ein anderes Template verändert werden kann.
  • Statische Ressource: Die Einbindung von einer Datei bzw. Script über das Filesystem

Template Variablen

Bei MODx ist prinzipiell jedes Formular mit dem Inhalte oder Strukturen (Ressourcen) erfasst werden, gleich aufgebaut, zb. Titel, SEO-Alias, Menütitel, Inhalt. Nun können mit Template-Variablen einzelne Felder (zb. Text, Rich Text Editor, Bildverknüpfung, Checkbox) einem Inhaltsformular zusätzlich zugewiesen und so können entsprechend die Anforderungen der Seite erweitert werden. Einbindungssyntax:

[[*bild]]

Templates

Das HTML-Grundgerüst einer Seite wird einer Ressource zugeordnet und bestimmt dessen Aussehen. Im Template selbst können Platzhalterlogiken (Chunks, Snippets) eingebunden werden.

Chunks

HTML-Fragmente, werden einmal definiert und können beliebig in Templates, Snippets, Chunks(!) und Plug-ins eingebunden werden. Umgekehrt ist aber auch die Einbindung von Snippets und Chunks möglich und eignen sich vor allem für wiederverwendete Elemente. Einbindungssyntax:

{{$mein_chunk]]

Snippets

Die eigentlichen Erweiterungen von MODx, ohne Snippets geht nichts! Vergleichbar mit Modulen oder Plug-ins bei anderen Systemen. Die Snippets führen PHP-Code aus und haben vollen Zugriff auf das MODx-API. Einbindungssyntax mit optionalen Parametern:

[[mein_snippet ¶m1='value1'¶m2='value2']]

Plug-ins

Eine Art "Event-Override-System" und das Geniale an MODx; Plug-ins führen wiederum PHP-Code mit vollem Zugriff auf das API aus, werden aber keinen Inhalten zugewiesen, sondern greifen bei Events ein. Standardmäßig gibt es ca. 100 Events, welche sowohl für die Frontend-Seitengenerierung, als auch für das Backend eingesetzt werden können. Zum Beispiel: OnParseDocument, OnLoadWebDocument, OnWebAuthentication, OnBeforeManagerPageInit, OnChunkFormPrerender, um nur einige dieser Lebensretter zu nennen.

Kurzum: Bei der Ausführung eines Events wird der PHP-Code angewendet und kann die Ausgabe, den Prozess, die PHP-Variablen uvm. ändern.

Komponenten

Erweitern die Funktionen im Backend, zum Beispiel Newsletter, Massenoperationen, etc. Bis zur Version Evolution hießen "Komponenten" → "Module". Schemenhafte Terminologie (Frontend):

Teil 1   Teil 2   Teil 3   Teil 4   Teil 5   

Kommentare

Gravatar Marc Hinse 06.07.2010
um 12:01 Uhr
Hallo Stefan,

vielen Dank für den ausführlichen Artikel über MODx und damit auch danke für mehr Reichweite dieses Systems!

Ein paar Anmerkungen zum Artikel:

1. MODx Revo wird MODx Evo nicht "ablösen". Beide Zweige werden weiter parallel gepflegt. Das Hauptaugenmerk liegt dabei in Zukunft natürlich auf Revo. Dennoch wird Evo weiterhin mit Updates und Bugfixes versorgt, das Core Team hat das ganz deutlich herausgestellt. Nicht dass Leute, die Evo benutzen, Angst davor haben, updaten zu MÜSSEN. Das Gegenteil ist der Fall. Evo wird weiterhin das System der Wahl sein, wenn es eher um kleinere Websites geht, bei denen es nicht auf die vorteile von Revo ankommt.

2. Die "must have" Addons auf Seite 4 sind allesamt für MODx Evo. Wayfinder ist auch für Revo erhältlich und wird auch weiterentwickelt. Ditto hingegen ist "depraced". Es existiert zwar eine Revo-Version, die jedoch nicht sonderlich performant ist. Ditto ist generell ein ziemliches Schwergewicht, mit dem sich zwar so gut wie alles anstellen lassen kann, aber eben desöfteren auf Kosten der Performance. In diese Presche springt das Snippet "getResources", das zwar (noch) nicht alle Features von Ditto aufweist, aber deutlich schlanker arbeitet.

Ähnliches gilt für:
eForm -> formIt
phx/If -> Im Core (also Standardparser) eingebaut
Document Manager: Gibt es imho noch nichts vergleichbares. Wobei die Sortierfunktion im Baum direkt funktioniert.

3. Mehrsprachigkeit
Hmmm, das stimmt so nicht ganz. Die Lexicon-Geschichte sorgt für das Übersetzen von einzelnen Strings. Diese werden in der Regel von Backend-Komponenten, Snippets etc verwendet und bei der Installation einer Erweiterung gleich mitinstalliert (bzw. falls nicht vorhanden, selbst übersetzt). Dies ist aber noch keine Frontend-Mehrsprachigkeit im herkömmlichen Sinne. Wie man sich diese einrichtet, bleibt einem selbst überlassen. In der Regel pflegt man einfach mehrere Bäume für die Sprachen, wobei man für die Zuordnung der einzelnen Sprachversionen noch Hand anlegen muss. Für Evo gibt es eine Erweiterung "YAMS", mit der in den Dokumenten selbst die andersprachigen Inhalte eingepflegt werden können. Nachteil: Eine echte 1:1-Übersetzung aller Inhalte ist schon fast ein Muss. Auf der Roadmap steht aber sowohl Versionierung (auch das fehlt bisher) als auch Internationalisierung im Frontend.

Die Community ist zwar eher klein, aber sehr fein. Von in manch anderen Foren üblicher Anfeindung und Arroganz ist hier zum Glück nichts zu spüren. Liegt wohl auch daran, dass es eben kein System für Leute ist, die überhaupt keine Ahnung von HTML+CSS haben. Ein Zusammenklicken des Systems ist kaum möglich, ohne nicht auch selbst zu definieren was man will. Und das ist das Schöne daran.

Danke nochmal für den Artikel!
Gruß Marc Hinse (aka MadeMyDay)
#zitieren
Gravatar Stefan 06.07.2010
um 17:41 Uhr
Hallo Marc,

macht man für MODx gerne und vielen Dank für deinen Input ...

@1: "Ablöse" ist vielleicht unglücklich ausgedrückt, aber so gemeint wie du es beschreibst. Wobei künftig hoffentlich nur mehr Revo verwendet wird ;-)

@2: Stimmt natürlich, war nicht so einfach zwischen Evo und Revo zu switchen … sind meines Erachtens trotzdem die besten Beispiele :-)

@3: Aus meiner Sicht schon, denn sobald sich mehrsprachige Seiten (sogar auf mehrere Arten) einrichten lasssen, ist ja die Möglichkeit gegeben und mit einer fixen Funktion oä. würden sich nicht mehr verschiedene Varianten (über Baumstruktur oder Templatevariablen) abbilden lassen.

@4: Bei Revolution wäre es, meines Erachtens, schon möglich ohne „HTML+CSS“ Kenntnisse eine Seite zusammenzuklicken (mit vorhandenen freien Templates über den Packagemanager), es wird natürlich nicht soweit gehen wie bei Wordpress.


Schöne Grüße,
Stefan
#zitieren
Gravatar Phoenix 15.07.2010
um 08:13 Uhr
Hallo

sehr schöner Artikel! Ich hatte auch einmal Kontakt mit ModX, allerdings war mir das Publizieren von verschiedenen Inhaltssituationen einfach zu kompliziert.
Ein Beispiel wäre:
Ich habe auf einer Seite oben Text, dann folgt ein Downloadblock mit 3-4 PDFs, danach kommt wieder einfacher Text und abschließend eine Galerie oder ein individuelles Kontaktformular.

Solche Situationen konnte ich nicht mit Modx lösen, sollte es aber machbar sein, wäre es schön wenn es auch noch genannt wird, denn meist scheiden Systeme bei einer Auswahl schon aus, da die Art und Weise Inhalte zu publizieren einfach zu schwer ist.

Danke ;)
#zitieren
Gravatar Marc 15.07.2010
um 08:46 Uhr
@Phoenix: So etwas lässt sich auf verschiedene Weise erzeugen. Es gibt das durchaus mächtige Instrument der Template Variablen (TVs) sowie die HTML-Fragmente namens Chunks. Diese lassen sich gegenseit referenzieren und einbinden. Also Könntest Du entweder mittels TV sagen, welche Elemente Du auf der Seite haben willst (Einfache Checkboxen zum Beispiel für Galerie, Formular etc.) oder diese direkt per Chunks im Contentfeld einbinden. Eine völlig flexible und sortierbare Inhaltsverwaltung (im Sinne von jetzt ein Formularblock, jetzt ein Textabsatz, dann wieder ein Formular) gibt es allerdings nicht. In der deutschen Community haben wir so etwas in der Mache (bloX/Xedit) inklusive Frontend-Editing, ist aber noch nicht so ganz fertig. #zitieren
Gravatar Sebastian 30.07.2010
um 19:34 Uhr

Phoenix:
Hallo

sehr schöner Artikel! Ich hatte auch einmal Kontakt mit ModX, allerdings war mir das Publizieren von verschiedenen Inhaltssituationen einfach zu kompliziert.

Ein Beispiel wäre:

Ich habe auf einer Seite oben Text, dann folgt ein Downloadblock mit 3-4 PDFs, danach kommt wieder einfacher Text und abschließend eine Galerie oder ein individuelles Kontaktformular.



Solche Situationen konnte ich nicht mit Modx lösen, sollte es aber machbar sein, wäre es schön wenn es auch noch genannt wird, denn meist scheiden Systeme bei einer Auswahl schon aus, da die Art und Weise Inhalte zu publizieren einfach zu schwer ist.



Danke ;)


Das tolle an MODx ist, dass du viele auf viele Wege lösen kannst. Z. B. könntest du die PDFs und die Galerie auch direkt im Dokument per Snippet (PHP-Schnipsel) aufrufen.
Dafür gibt es Snippets, die Dokumente zum Download anbieten - der Pfad zum Dokument könnte beispielsweise über die Parameter geliefert werden - und für Galerien gibt es ein paar Snippets. Es gibt welche, die sich automatisch aus einem Datei-Ordner generieren, und welche bei denen du über das Front-End Bilder einpflegen lassen kannst.

Insgesamt kannst du das ganze sicher sowohl über das Backend als auch über das Frontend lösen.

Ich habe bisher nur mit Evo(lution) produktiv gearbeitet, in Revo(lution) nur reingeschnuppert. Aber was bei Evo geht, geht bei Revo auch und eher einfacher (soweit ich das bisher beurteilen kann). Bei Revo kann es allerdings sein, dass noch ein paar Erweiterungen "fehlen" die Sachen flott lösbar machen - die werden aber wohl bald alle kommen - jetzt stürzen sich alle auf Revolution.

Insgesamt gilt bei sowas: Einfach mal im Forum fragen - in der Regel kommen innerhalb weniger Stunden oder weniger Tage Antworten, die in der Qualität zwischen Tipps, Links zu anderen Beiträgen und kompletten Lösungen variieren.

MODx rockt!
#zitieren