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:
<html><head><title>PHP Mag - Sample</title></head><body>[[Wayfinder? &startId='0' &level='1' &sortBy='menuindex' &rowTpl='nav_row']]</body></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.



