Programmieren für MODx Revolution

Achtung: dieser Beitrag ist alt! Es kann gut sein, dass seine Inhalte nicht mehr aktuell sind.

Nachdem ich nun schon mehrere Projekte mit MODx Revolution, der zweiten Ausfertigung des besten CMS der Welt, bearbeiten durfte, dachte ich, es würde sich anbieten ein kleines Tutorial über Programmierung für MODx Revolution zu schreiben. Es gibt zwar eins in der offiziellen Dokumentation, aber das ist erstens Englisch und zweitens hat es sich als zumindest für mich nicht sehr hilfreich herausgestellt – warum auch immer. Jedenfalls habe ich mich anderweitig in die Materie eingegraben und dieser Artikel ist das erste Resultat meiner Forschungen. Im folgenden geht es erst mal nur um jene Dinge, die man für die vielen kleinen Snippets braucht, die für jede Seite anfallen. Etwas vertiefend-nerdigeres wird dann sicher irgendwann die Tage folgen.

OOP Ahoi

Der große Unterschied zwischen Programmierung für MODx Evolution und MODx Revolution ist, dass in Revolution alles Objektorientiert ist. Während es früher quasi nur ein Objekt, $modx, gab, das allerlei nützliche Methoden hatte, dient $modx in Revolution vor allem dazu, an andere Objekte heranzukommen. Diese haben dann ihrerseits Methoden. Angenommen wir wollten erfahren, welches das Elterndokument von Dokument Nummer 42 ist, würde man im alten MODx Evolution folgendes schreiben:

$doc = $modx->getDocument(42);
echo $doc['parent'];

In Revolution ist der Unterschied, dass man mit Hilfe der allmächtigen getObject()-Methode ein Dokument-Objekt vom Typ modResource aus der Datenbank holt und sich das Elterndokument über dessen get()-Methode holt.

$doc = $modx->getObject('modResource', 42);
echo $doc->get('parent');

Warum so und nicht anders? Nun, mit dem Wissen um diese beiden Zeilen ist man bereits völlig dafür gerüstet, beliebige Daten aus jedem beliebigen MODx-Objekten zu holen. Es ist völlig egal, ob man Informationen über Dokumente, Chunks, Snippets, User oder Zugriffsberechtigungen haben möchte – getObject(), get(), fertig.

// ID des Chunks "foo"
$chunk = $modx->getObject('modChunk', 'foo');
echo $chunk->get('id');

// Kategorie des Templates 1337
$template = $modx->getObject('modTemplate', 1337);
echo $template->get('category');

// Name des Users 42
$user = $modx->getObject('modUser', 42);
echo $user->get('username');

Die ganzen verschiedenen Methoden, die man sich früher für solcherlei Operationen merken musste, darf man also getrost vergessen.

Klassen und Methoden

Die komplette Liste der Objekte, die man sich mittels getObject() holen kann, findet man unter http://api.modxcms.com/. Die für den Hausgebrauch Interessanten Dinge sind unter modxClasses zu finden, wo auch die diversen Methoden der einzelnen Objekte dokumentiert sind – denn natürlich ist get() nicht alles. Jedes Objekt hat eigene, spezialisierte Methoden mit denen man praktische Dinge anstellen kann. Man möchte wissen, welchen Wert die Template Variable foo im Dokument 42 hat? Kein Problem:

$doc = $modx->getObject('modResource', 42);
echo $doc->getTVValue('foo');

Nützliches und Veraltetes aus $modx

Früher war $modx das Ein und Alles der MODx-Programmierung doch mittlerweile ist es fast nur noch für getObject() wichtig. Es enthält zwar noch allerlei Überbleibsel aus MODx 1.x – so sind etwa weiterhin $modx->documentObject und $modx->db an Bord – allerdings nur noch übergangweise. Spätestens zur Version 2.1 wird hier aufgeräumt und die Altlasten fliegen raus. Deshalb sollte man, wenn es etwas Neues gebaut wird, die Finger hiervon lassen und auch veraltete Snippets wie Ditto (wird u.A. durch getResources ersetzt) sind zwar noch da, aber bereits zum Entfernen vorgemerkt.

Das DocumentObject braucht eigentlich auch niemand mehr. Die ID des gerade aufgerufenen Dokuments findet man unter $modx->resourceIdentifier und unter $modx->resource findet man ein komplettes modResource-Objekt, das man wie bekannt mit get() und all seinen anderen Methoden bearbeiten kann. Wir halten also fest: Fast alles, was früher in irgendwelchen Arrays steckte, ist jetzt schön in Objekten sortiert. Wenn man das weiß, ist man schon ganz gut gerüstet.

Fazit

Wie also programmiert es sich so in MODx Revolution? Gar nicht so schlecht, man muss nur alles vergessen, was man in MODx 1.x gemacht hat (abzüglich der Basisprinzipien, also Chunks, Snippets etc) und in der API-Dokumentation etwas heimisch werden. Die dem Objektsystem zu verdankenden Vereinheitlichungen machen, so jedenfalls mein Eindruck, schon hin und wieder die Dinge einfacher – wenn man weiß, dass man an jedes beliebige Feld einfach mit $irgendwas->get('sonstwas') herankommt, kann man sein Hirnschmalz in die wirklich wichtigen Dinge investieren: Content und Design. Und so sollte es ja eigentlich in MODx immer sein.

Kommentare (33)

  1. Sebastian Gebhard

    10. Mai 2010, 13:41 Uhr

    In wie weit unterstützt MODx Revo Paradigmen wie MVC oder Domain Driven Design? Ich will gar nicht mit Buzzword-Bingo anfangen, aber das sind Dinge, die ich in den neueren Entwicklungen von TYPO3 (Extbase und FLOW3) zu schätzen gelernt habe.

    Die gezeigten Snippets lassen zumindest eine MVC-Orientierung vermuten (zumindest scheinen die Model-Klassen separiert)..

  2. Peter

    10. Mai 2010, 14:23 Uhr

    Revo ist komplett MVC. Das werde ich dann in den nächsten Artikeln auch noch auswalzen. Der Wikipedia-Artikel zu DDD hat mir nicht so ganz eingeleuchtet, deswegen bin ich da in der Einschätzung etwas überfordert :(

  3. Sebastian Gebhard

    10. Mai 2010, 14:40 Uhr

    Danke für die Info. Ja, der Wikipedia beschreibt -übrigens genau wie das Buch von Eric Evans- sehr hochtrabend und theoretisch eine eigentlich ganz simple Technik. Typisches Beispiel einer Erklärung, die man erst verstehen kann, wenn man das Thema schon verstanden hat.

  4. Benjamin Weigl

    10. Mai 2010, 14:54 Uhr

    Feines Ding; ich bin gespannt auf das Ausgewalzte ... gut gewürzt und mit Tiefgang bitte :-)

    ... des besten CMS der Welt

    ... jetzt brauchen wir nur noch ne Stable für den produktiven Einsatz und dann ist gut.

  5. Stefan

    10. Mai 2010, 16:40 Uhr

    Du benutzt RC-Software (die im Übrigen seit Monaten ihren Status nicht geändert hat) für Projekte? Etwa am echten Kunden?

  6. Peter

    10. Mai 2010, 17:20 Uhr

    Nicht meine Entscheidung. Macht aber auch keine Probleme.

  7. fwolf

    10. Mai 2010, 17:21 Uhr

    Zitat Stefan:

    Du benutzt RC-Software (die im Übrigen seit Monaten ihren Status nicht geändert hat) für Projekte? Etwa am echten Kunden?

    Ganz ehrlich: Warum nicht? Vielerlei Software, die offiziell als Final Build vorliegt - z.B. WordPress - ist trotzdem noch total bug-ridden. Andere Software, wie etwa Habari, sind in der Alpha-Version "stabiler" als in der Endfassung. Ubuntu basiert auch auf dem Dev- und Unstable-Zweigen von Debian (also letztlich RC- und Beta-Test-Software!). Wie es um MODx Revo steht, weiß ich nicht. Aber wenn die Code-Qualität entsprechend hochwertig ist, tun "böse" Release Candidates nicht weh. Letztlich von Fall zu Fall unterschiedlich (siehe etwa schon genanntes Habari).

    cu, w0lf.

  8. Stefan

    10. Mai 2010, 17:47 Uhr

    Zitat fwolf:

    Zitat Stefan:

    Ganz ehrlich: Warum nicht?

    Das wird dir im Zweifel der Anwalt des Kunden sagen :-D

  9. Robert Agthe

    10. Mai 2010, 17:48 Uhr

    Seit wann erreicht Software je den Status "Final"?

  10. Peter

    10. Mai 2010, 18:02 Uhr

    Ich persönlich bin ja ein Fan von Semantic Versioning. Dann ergeben sich solche Debatten gar nicht erst.

  11. fwolf

    10. Mai 2010, 18:15 Uhr

    Zitat Stefan:

    Zitat fwolf:

    Das wird dir im Zweifel der Anwalt des Kunden sagen :-D

    Geil. Jetzt werd ich im Web auch schon bedroht ;)

    cu, w0lf.

  12. fwolf

    10. Mai 2010, 18:19 Uhr

    Zitat Peter:

    Ich persönlich bin ja ein Fan von Semantic Versioning. Dann ergeben sich solche Debatten gar nicht erst.

    Hm .. hübsche Idee. Nach diesem Prinzip müsste Habari inzwischen bei Version 8.0 angelangt sein (und nicht 0.8alpha) ;)
    Fühlt sich in jedem Fall so an ..

    cu, w0lf.

  13. rr

    11. Mai 2010, 05:42 Uhr

    Nette Sache. Das einzig störende sind die losen Zeichenkettenverknüpfungen im Methodenaufruf. Für sowas benutzt man doch üblicher Weise Konstanten, oder?

  14. Ruthe

    11. Mai 2010, 08:16 Uhr

    Modx wird massiv überbewertet. Ist viel zu kompliziert, geht viel einfacher.

  15. Peter

    11. Mai 2010, 10:40 Uhr

    Zitat Ruthe:

    Modx wird massiv überbewertet. Ist viel zu kompliziert, geht viel einfacher.

    Lass mich raten... mit Typo3? :)

  16. Ruthe

    11. Mai 2010, 11:09 Uhr

    No way. Typo3 ist für mich eine Krankheit. Das System hat seine Popularität nur weil es als erstes vor gefühlten 10 Jahren erschienen ist und nicht weil so toll ist. Typo3 ist für mich das schlechteste CMS das ist kenne.

  17. Benjamin Weigl

    11. Mai 2010, 11:56 Uhr

    Sie arbeitet mit Joomla :-D

  18. Ruthe

    11. Mai 2010, 12:08 Uhr

    Joomla ist kein CMS sondern eine Krankheit. Und nein, auch Drupal kann ich nichts abgewinnen.

  19. Benjamin Weigl

    11. Mai 2010, 12:18 Uhr

    Dann verrate uns doch dein System :-) Geht viel einfacher als das Ratespiel hier. Wenn du MODx schon als Krankheit betitelst, dann bekehrst du uns ja bestimmt mit deinem System ?! :-)

  20. Peter

    11. Mai 2010, 12:52 Uhr

    Ich wollte eigentlich jetzt noch ein lustiges CMS unterstellen, aber mir fällt nichts schlimmeres als Joomla oder Typo3 ein... hm... schwierig.

  21. Daniel

    11. Mai 2010, 13:09 Uhr

    Ich benutze Typolight für meine Websites. In wieweit kann man vom Verständnis her auf MODx umsteigen?
    Hab mir mal die Demo angeschaut und noch nicht so richtig durchgesehen.
    Die Templates für die Ausgabe scheinen ja in jedem Beitrag zu sein, oder kann das allgemein definiert werden?
    Gibt es für die Revolution schon Dokumentationen?
    Welche Boards, außer dem offiziellen, könnt ihr zum Einstieg empfehlen?

  22. Ruthe

    11. Mai 2010, 13:09 Uhr

    Zitat Peter:

    Ich wollte eigentlich jetzt noch ein lustiges CMS unterstellen, aber mir fällt nichts schlimmeres als Joomla oder Typo3 ein... hm... schwierig.

    Das ist auch nicht möglich, da beides die behindertsten Systeme sind die es so gibt.

  23. Benjamin Weigl

    11. Mai 2010, 13:28 Uhr

    Zitat Peter:

    Ich wollte eigentlich jetzt noch ein lustiges CMS unterstellen, aber mir fällt nichts schlimmeres als Joomla oder Typo3 ein... hm... schwierig.

    Oh doch, mir würde da schon noch was einfallen. Ich erinnere mich mal an die OpenSourceExpo in Karlsruhe zurück :-)

    Wobei; was ist schon schlimm ? Ich find Redaxo auch irgendwie «schlimm», einfach weil mir dieses tausend mal <input type="... tierisch auf den Geist gehen würde; trotzdem ist es ein schlankes und sauberes CMS.

    Ich glaub ja inzwischen das Ruth gar kein CMS verwendet sondern nen «Homepaitsch-Baukasten», sonst hätten wir ja schon längst das über CMS kennen gelernt.

    Typolight find ich übrigens auch grausig.

  24. Hans

    11. Mai 2010, 16:02 Uhr

    Warum wird eigentlich von Heise das Thema "modx" völlig totgeschwiegen? Weder im Print- noch im Online-Bereich gibt's irgendwelche Infos (nur im Bereich Software/Download). Ich verstehe das einfach nicht! Die Jungs schlafen doch sonst auch nicht hinterm Mond!

    best
    Hans

  25. Ingo

    11. Mai 2010, 20:56 Uhr

    Zitat Robert Agthe:

    Seit wann erreicht Software je den Status "Final"?

    TeX ist bald final (morbide, morbide, ich dachte es wär bereits von Donald als final erklärt).

  26. Sebastian Gebhard

    12. Mai 2010, 05:36 Uhr

    $bashedCMS = 'Fill in your most hated CMS..';
    $favedCMS = 'Fill in your most liked CMS..';

    OMG du arbeitest mit $bashedCMS?

    Das ist das behinderste System überhaupt! Ich hab mal vor 4 Jahren Version 1.4alpha2 angetestet und das war ein total Reinfall. Die Community kann man auch total vergessen - und die Code Base! Die Entwickler müssten verklagt werden! Ich hab auch mal ne Website gesehen, die mit $bashedCMS gemacht war, die war so grottig!!

    Mit $favedCMS setz ich eine gute Website in gerade mal 8 Stunden auf und kriege damit alles hin was ich will. Vor allem die bald erscheinende Version 3 hat echt gute Features!

  27. Andreas

    17. Mai 2010, 10:47 Uhr

    Zitat Sebastian Gebhard:

    $bashedCMS = 'Fill in your most hated CMS..';
    $favedCMS = 'Fill in your most liked CMS..';

    OMG du arbeitest mit $bashedCMS?

    Das ist das behinderste System überhaupt! Ich hab mal vor 4 Jahren Version 1.4alpha2 angetestet und das war ein total Reinfall. Die Community kann man auch total vergessen - und die Code Base! Die Entwickler müssten verklagt werden! Ich hab auch mal ne Website gesehen, die mit $bashedCMS gemacht war, die war so grottig!!

    Mit $favedCMS setz ich eine gute Website in gerade mal 8 Stunden auf und kriege damit alles hin was ich will. Vor allem die bald erscheinende Version 3 hat echt gute Features!

    Made My Day!

    Danke Peter für den tollen Einstieg in Revo! Habe durch diesen Blog modx kennen und lieben gelernt!

  28. Günther

    4. August 2010, 08:55 Uhr

    ich finde modx revolution nach 2 stunden herumklicken auch sehr gut. aber ich mag auch joomla und typo3...

  29. Chris T.

    11. August 2010, 09:37 Uhr

    Sehr schöner Beitrag.
    Also wenn ich z.B. mit $doc->getTVValue('foo'); den Wert der TV auslesen kann. Gibt es auch eine Funktion mit der ich den Wert der TV überschreiben/ändern kann?

  30. hanshorst

    14. April 2011, 09:54 Uhr

    ich finde cms auch nur für 0815-projekte gut. natürlich nur unter der voraussetzung, der kunde will seine inhalte wirklich selber pflegen.

    ansonsten würde ich eigene seite/webanwendungen immer selbst "basteln"/entwickeln. der anfängliche mehraufwand ist überschaubar und man kann viel eher auf "seltsame" kundenwünsche eingehen.

  31. Florian

    15. April 2011, 08:12 Uhr

    Zitat Sebastian Gebhard:

    $bashedCMS = 'Fill in your most hated CMS..';
    $favedCMS = 'Fill in your most liked CMS..';

    OMG du arbeitest mit $bashedCMS?

    Das ist das behinderste System überhaupt! Ich hab mal vor 4 Jahren Version 1.4alpha2 angetestet und das war ein total Reinfall. Die Community kann man auch total vergessen - und die Code Base! Die Entwickler müssten verklagt werden! Ich hab auch mal ne Website gesehen, die mit $bashedCMS gemacht war, die war so grottig!!

    Mit $favedCMS setz ich eine gute Website in gerade mal 8 Stunden auf und kriege damit alles hin was ich will. Vor allem die bald erscheinende Version 3 hat echt gute Features!

    thumbs up! :)

  32. Oliver

    31. August 2013, 10:45 Uhr

    Ist zwar ein alter Post, aber ich will auch mal meinen Senf dazu geben :)

    Ich habe bis vor kurzem nicht viel von MODX gehört, bin aber gerade dabei, es für ein eigenes Projekt auszutesten.

    Was mir hier auffällt, ist das ständige Bashing gegen andere Systeme. Jedes System hat seine Berechtigung und die eierlegende Wollmilchsau hab ich leider noch nicht gefunden.

    Wordpress ist eigentlich nicht als CMS, sondern als reines Blog System auf den Markt gekommen, die CMS Funktionalität kam erst nach und nach, da CMS und Blogs mit der Zeit immer mehr zusammengewachsen sind.

    Man kommt mit allen Systemen irgendwie zum Ziel, trotzdem würde ich Typo3 niemals für einen Web Blog in Erwägung ziehen, ebenso wenig würde ich versuchen, die mehrsprachige Website eines internationalen Konzerns in Wordpress umzusetzen.

    Typo3 ist ein sehr komplexes System, das dank Typoscript und verschiedener Template Systeme extrem flexibel ist. Die Flexibilität hat aber ihren Preis, Typo3 lernt man nicht in 1 Woche und der Enduser wird sich nicht so intuitiv im Backend zurecht finden, wie bei Wordpress.

    Wenn es so sein sollte, dass MODX alle Vorteile von Typo3 und Wordpress vereint und dabei noch relativ einfach zu bedienen ist ( für Designer, Entwickler und Enduser ), dann kommen wir der eierlegenden Wollmilchsau schon recht nah :)

    Ganz nebenher noch ein hier unerwähntes System, welches für kleinere Websites definitiv einen Blick wert ist: Concrete5, in Deutschland bisher eher unbekannt, aber mit seinen ganz eigenen Vorteilen.

    Das wollte ich nur mal loswerden, in ein paar Wochen werde ich mein Fazit zum Thema MODX ziehen, hoffentlich wird es positiv ausfallen.

  33. Thomas

    10. September 2013, 21:17 Uhr

    Ich habe hier noch überhaupt nichts von webEdition gehört?
    Ist ja nun seit einigen Jahren auch OpenSource und damit kostenfrei.

    Ich habe damit schon ein paar Seiten realisiert und bisher waren alle zufrieden, vor allem der Redakteur. Denn für Redakteure finde ich Typo3 echt grausig.
    Hingegen sind die vielen AddIns für Typo3 echt von Vorteil, wenn man nicht jeden Code selber schreiben will ;-)

    Viele Grüße
    Thomas aus Berlin

Die Kommentarfunktion ist seit Juli 2014 deaktiviert, weil sie zu sehr von Suchmaschinenoptimierern für manuellen Spam mißbraucht wurde. Wenn du Anmerkungen oder Fragen zum Artikel hast, schreib mir eine E-Mail oder melde dich via Twitter.

Folgt mir!

Kauft mein Zeug!

Cover der HTML5-DVD
Infos auf html5-dvd.de, kaufen bei Amazon

Cover des HTML5-Buchs
Infos auf html5-buch.de, kaufen bei Amazon

Cover des CSS3-Buchs
Infos auf css3-buch.de, kaufen bei Amazon