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 modx
→Classes
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)
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)..
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 :(
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.
Benjamin Weigl ¶
10. Mai 2010, 14:54 Uhr
Feines Ding; ich bin gespannt auf das Ausgewalzte ... gut gewürzt und mit Tiefgang bitte :-)
... jetzt brauchen wir nur noch ne Stable für den produktiven Einsatz und dann ist gut.
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?
Peter ¶
10. Mai 2010, 17:20 Uhr
Nicht meine Entscheidung. Macht aber auch keine Probleme.
fwolf ¶
10. Mai 2010, 17:21 Uhr
Zitat Stefan:
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.
Stefan ¶
10. Mai 2010, 17:47 Uhr
Zitat fwolf:
Das wird dir im Zweifel der Anwalt des Kunden sagen :-D
Robert Agthe ¶
10. Mai 2010, 17:48 Uhr
Seit wann erreicht Software je den Status "Final"?
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.
fwolf ¶
10. Mai 2010, 18:15 Uhr
Zitat Stefan:
Geil. Jetzt werd ich im Web auch schon bedroht ;)
cu, w0lf.
fwolf ¶
10. Mai 2010, 18:19 Uhr
Zitat Peter:
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.
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?
Ruthe ¶
11. Mai 2010, 08:16 Uhr
Modx wird massiv überbewertet. Ist viel zu kompliziert, geht viel einfacher.
Peter ¶
11. Mai 2010, 10:40 Uhr
Zitat Ruthe:
Lass mich raten... mit Typo3? :)
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.
Benjamin Weigl ¶
11. Mai 2010, 11:56 Uhr
Sie arbeitet mit Joomla :-D
Ruthe ¶
11. Mai 2010, 12:08 Uhr
Joomla ist kein CMS sondern eine Krankheit. Und nein, auch Drupal kann ich nichts abgewinnen.
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 ?! :-)
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.
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?
Ruthe ¶
11. Mai 2010, 13:09 Uhr
Zitat Peter:
Das ist auch nicht möglich, da beides die behindertsten Systeme sind die es so gibt.
Benjamin Weigl ¶
11. Mai 2010, 13:28 Uhr
Zitat Peter:
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.
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
Ingo ¶
11. Mai 2010, 20:56 Uhr
Zitat Robert Agthe:
TeX ist bald final (morbide, morbide, ich dachte es wär bereits von Donald als final erklärt).
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!
Andreas ¶
17. Mai 2010, 10:47 Uhr
Zitat Sebastian Gebhard:
Made My Day!
Danke Peter für den tollen Einstieg in Revo! Habe durch diesen Blog modx kennen und lieben gelernt!
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...
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?
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.
Florian ¶
15. April 2011, 08:12 Uhr
Zitat Sebastian Gebhard:
thumbs up! :)
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.
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