Donnerstag, 24. Mai 2012


Artikel

Juli 2010 | Artikel

MODx: Revolution Fortsetzung, Teil 2

Teil 1   Teil 2   Teil 3   Teil 4   Teil 5   

Frontendseitig gibt es weder Vorgaben noch Beschränkungen, Sie können HTML mit Tabellenlayouts "vergewaltigen" oder standardkonforme, barrierefreie Layouts erstellen, wobei systemseitig eine Trennung von Code, Layout und Inhalten besteht. Außerdem herrscht auch Entscheidungsfreiheit, welche JavaScript-Bibliothek eingesetzt werden soll. "Out of the box" sind bei dem System auch die gängigen SEO-Komponenten dabei, für jedes Dokument können URL-Alias, Metadaten und wie zuvor erwähnt das komplette HTML an die SEO-Anforderungen angepasst werden.

Derzeit wird an zwei verschiedenen Zweigen gearbeitet, die aktuell stabile 1.x-Version (Evolution) besteht seit der Gründungszeit und wird voraussichtlich in den nächsten Wochen durch eine finale Version 2.0 (Revolution) abgelöst. Im Großen und Ganzen ist Evolution eine nette Sache, ja wäre da nicht eval. Bei einigen Funktionen wird der PHP-Code noch durch eval erzeugt, aber nach dem Motto "eval is evil" wird diese Funktion in Revolution zum Glück beseitigt sein.

Vive la Revolution!

Mit diesem reißerischen Titel hat Ryan Thrash am 14. Juli 2008 die MODx Community auf die Version Revolution 2.0 (Kurzform: Revo) eingestimmt. Die komplette Neuprogrammierung einer Software ist ja eigentlich in gewisser Weise ein Umsturz und sollten die vorgenommenen Ziele erreicht werden, dann ist es wahrlich eine Revolution für MODx.

Die neue Applikation setzt komplett auf ein objektorientiertes MVC-Framework und nutzt dabei die ORB-Library xPDO. Damit wurde ein skalierbares und datenbankunabhängiges System geschaffen. Ein Detail am Rande: Jason Coward, seines Zeichens MODx-Lead Architect, steckt auch hinter xPDO. Das hat natürlich den Vorteil, dass die beiden Tools gut aufeinander abgestimmt werden können.

Die Terminologie (Ressourcen, Templates, Snippets, Plugins ...) der Ursprungsversion bleibt aber erhalten, was in jedem Fall sinnvoll ist und wahrscheinlich auch den Erfolg des Systems bisher ermöglicht hat. An manchen Stellen findet auch eine Erweiterung und Verbesserung statt.

Navigations- und Inhaltsstrukturen

"The resource is your friend", somit wäre im Großen und Ganzen dazu alles gesagt, oder? Nun, vielleicht nicht alles, aber aufgrund des einfachen Aufbaus, wird das in ein paar Zeilen erledigt sein.

Die Frontend Navigations- und Inhaltsstrukturen werden im Backend im selben Baummenü hierarchisch abgebildet, siehe Abbildung 2. Nun kann ein Dokument oder Link (ab Version 2.0 gibt es mehrere Linkarten: Weblinks, Statische Links, Symlinks) angelegt werden und je nach Verwendung, wird daraus ein Menüpunkt oder Artikel, in welchem zum Beispiel angegeben wird, ob das Dokument im Menü angezeigt wird. Auch Listenansichten lassen sich so einfach erstellen, hier sorgt dann das jeweilige Template, wie der Inhalt dargestellt wird.

Mit den zur Verfügung stehenden Add-Ons können die Daten entsprechend ausgegeben und formatiert werden. Das funktioniert über einfache und verständliche Anweisungslogiken, z.B. eine Menüausgabe:

  1. <html>
  2. <head><title>PHP Mag - Sample</title></head>
  3. <body>
  4. [[Wayfinder? &startId='0' &level='1' &sortBy='menuindex' &rowTpl='nav_row']]
  5. </body>
  6. </html>

Aufbau der Anweisungs- bzw. Platzhalter-Logik

  • [[+]] Tagdefinition
  • [[+Snippetname]] Name des Snippets
  • [[+Snippetname ¶meter1='wert1' ¶meter2='wert2' ¶meter3='wert3']] Einbindung von den nötigen Parametern, wobei es hier keine Vorgaben gibt, Parameter können frei für jedes Snippet und Chunk definiert werden, auch deren eingesetzte Anzahl.

Die Anweisungslogiken sind in Dokumenten, Templates, Chunks und auch in Snippets (über eine PHP-Funktion) einsetzbar. Bei Kundenprojekten eignet sich der Aufruf innerhalb der Templates, damit der Kunde (Laie) die Anweisungen nicht sehen oder manipulieren kann.

Mit dieser Logik und diesem Aufbau besteht übrigens ein großer Unterschied zu anderen Systemen, die mit Modulen – z.B. einem News-Modul – arbeiten. Bei MODx ist alles erst einmal ein Dokument (oder Link) – was im Endeffekt daraus wird, sprich ein Menüpunkt, Listenelement, Detailartikel oder "weiß der Kuckuck was", bestimmt die Zuordnung und Einstellung der einzelnen Parameter.

Besonders interessant ist bei Revo der Ausbau des MODx-APIs, wobei hier Zugriff auf alle relevanten MODx-Kernobjekte zur Verfügung steht und durch die neue Strukturierung die Performance des APIs deutlich erhöht wird. Einiges haben sich die Entwickler auch für das neue Backend einfallen lassen:

Als erstes wurde das Frameset ersetzt, so kann das Backend (wird in MODx übrigens Manager genannt) komplett "customized" werden. Für diese Anpassbarkeit wird die Template Engine von Smarty, in Kombination mit dem JavaScript-Framework ExtJS eingesetzt.

Auch die Bedienung wurde weiter verbessert und vereinfacht, wobei ich leider auch feststellen muss, dass hier durch den Einsatz von ExtJS und vor allem AJAX-Action die Performance noch etwas zu wünschen übrig lässt. Bei einem mittelmäßigen Internetzugang, Webserver und Desktoprechner dauert die Seitengenerierung am Client (vor allem beim Firefox mit Firebug) doch überdurchschnittlich lange, aber da es sich (zum Zeitpunkt in dem dieser Artikel geschrieben wurde) noch um eine Betaversion (5) handelt (und wir mittlerweile beim RC 2 angekommen sind, Anm. d. Red.), bin ich bezüglich einer Verbesserung sehr zuversichtlich. Es wäre doch schade, sollte das am Ende für einige Neuanwender gleich ein Knock-out-Kriterium werden.

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