# MODX

MODX ist ein freies Content-Management-Framework (CMF) zum Erstellen von Websites. Es basiert ursprünglich auf dem CMS Etomite und war in seiner ersten Version ein Mod dieses Systems, woraus sich der Name MODX ableitet.
MODX besitzt einen schlanken Kern und SEO-Funktionalität. MODX ist in der Programmiersprache PHP implementiert und benutzt ein Datenbankmanagesystem wie z. B. MySQL. Das Back-End basiert auf MooTools.
MODX wurde im November 2007 von Packt Publishing zum vielversprechendsten CMS des Jahres gekürt. 2010 erhielt es bei den ebenfalls von Packt Publishing ausgerichteten Open Source Awards den dritten Platz im Bereich CMS. Ziel der Entwickler ist ein Content-Management-Framework mit objektorientiertem Kern, das Webdesignern ein hohes Maß an Flexibilität erlaubt und den Einsatz der neuesten AJAX und Web-2.0-Technologien ermöglicht.
Zu diesem Zweck wurde der Framework-Kern auf Basis der neu entwickelten ORB-Bibliothek OpenExpedio (einer freien Erweiterung der Datenbankabstraktionsebene PDO) mittlerweile gegenüber dem Vorgänger Etomite vollständig umgeschrieben.
MODX steht unter GPL und ist kostenlos verfügbar, mittlerweile wird auch ein kostenpflichtiger Support angeboten.

## Grundlegende Funktionsweise

MODX zeichnet sich vor allem durch seine Anpassbarkeit und Flexibilität aus. So kann es in der Beispielinstallation der Version Evolution 1.0.7 mit den Erweiterungen (Plug-ins) für die wichtigsten CMS-Funktionen – Wayfinder, eForm, Weblogin, AjaxSearch, Breadcrumbs, Ditto und Jot – konfiguriert werden. Diese Erweiterungen können jedoch auch ausgetauscht oder ganz weggelassen werden.
Anders als bei manch anderen CMS müssen die Parameter dieser Anwendungen nicht zentral und damit einheitlich für alle mit ihnen erstellten Dokumente vorgegeben werden, sondern können in jedem Dokument unterschiedlich eingestellt werden.
Ein wesentliches technisches Merkmal ist die strikte Trennung von HTML, CSS und PHP.
MODX folgt strikt dem Paradigma Model View Controller, was vor allem für Entwickler interessant ist.
Für Anwender ist das System flexibel anpassbar, so dass auch ungeübte Redakteure Inhalte einfach, sicher und schnell verwalten können.

## Templates, Template-Variablen, Snippets und Chunks
### Templates

Die Seitengestaltung in MODX basiert auf Templates, welche die Struktur und Platzierung von Inhalt von Dokumenten vorgeben. Die Anzahl der Templates ist beliebig. Jedem Dokument kann bei Bedarf ein individuelles Template zugewiesen werden.
Templates können frei und W3C-konform gestaltet werden. Der gesamte HTML-Code einer Seite kann frei definiert werden. Dynamische Inhalts-Elemente und Navigationsstrukturen werden in den Templates mittels einer Platzhalter-Notation eingebunden. Dabei wird zwischen Template-Variablen, Snippets und Chunks unterschieden.

### Template-Variablen

Template-Variablen werden beim Anlegen mit einem oder mehreren Templates verknüpft. Wird ein neues Dokument im Backend erzeugt, können diese Variablen über die Verknüpfung von Template ↔ Template-Variable im Backend in der Bearbeitungsmaske des jeweiligen Dokuments genutzt werden. Template-Variablen können entweder direkt in das Template geschrieben werden oder vom Redakteur direkt im Content platziert werden.

### Chunks

Chunks sind statische HTML-Fragmente (vergleichbar mit einem Textbaustein in der Textverarbeitung), die mittels Platzhaltern in Templates oder Dokumenten eingebunden werden können. Die wichtigste Aufgabe von Chunks besteht darin, nicht den gesamten HTML-Code einer Seite in ein Template schreiben zu müssen, sondern wiederkehrende Elemente (z. B. ein Copyrighthinweis, eine Adresse, ein weiterführender Link), die in unterschiedlichen Templates verwendet werden, auszugliedern. Einerseits können dadurch neue Templates aus vorhandenen Chunk-Bausteinen zusammengesetzt werden, ohne jeweils den ganzen HTML-Code neu zu erstellen, andererseits ermöglichen Chunks die Änderung eines in mehreren Templates verwendeten Bausteines an zentraler Stelle, ohne alle Templates oder Dokumente einzeln bearbeiten zu müssen. Chunks können Template-Variablen, Plug-in-Aufrufe und Link-Platzhalter als Inhalts-Elemente enthalten und sind dadurch dynamisierbar. Chunks können kein PHP enthalten!

### Snippets

Snippets werden ebenfalls durch Platzhalter in Templates und Dokumenten eingebunden, unterscheiden sich von Chunks aber dadurch, dass sie keine statischen HTML-Fragmente sind, sondern eigene, auf der Programmiersprache PHP basierende Programmlogik enthalten und Datenbankzugriffe ausführen können. Sie sind damit die flexibelsten Template-Elemente.
Das Zusammenspiel von Template-Variablen, Chunks und Snippets stellt bei richtiger Verwendung die strikte Trennung von HTML-Code, Content und Programmlogik sicher und sorgt für eine außerordentliche Flexibilität und Erweiterbarkeit des Systems. MODX wird deshalb manchmal nicht als Content-Management-System, sondern als Content-Management-Framework bezeichnet. HTML/CSS-Kenntnisse sowie Programmierkenntnisse in der Sprache PHP für die Entwicklung von Snippets sind aber vonnöten, um das volle Potential des Systems zu nutzen.

## Plug-ins und Module

Abweichend von einigen anderen Content-Management-Systemen werden in MODX nur Erweiterungen der Backend-Funktionalität als Plug-in bezeichnet. Sie basieren auf PHP-Quellcode und werden aufgrund von definierten Systemereignissen ausgeführt. So ist zum Beispiel der in der Grundinstallation enthaltene WYSIWYG-Editor TinyMCE ein Plug-in. Module sind ebenfalls Erweiterungen der Backend-Funktionalität, werden aber nicht durch Systemereignisse ausgeführt, sondern weitgehend unabhängig vom Kernsystem eingebunden. Es existieren verschiedene Module, z. B. zum Anlegen mehrerer Dokumente in einem Arbeitsschritt oder zum Import und Export von Daten.

## Sicherheit

MODX wurde bislang nicht Ziel systematischer Angriffe. User sollten dennoch aufgrund bekannt gewordener Schwachstellen immer auf die jeweils aktuelle Version upgraden.

## Versionen

Seit dem 22. Juli 2014 steht mit MODX Revolution (Versionsnummer: MODX Revolution 2.3.1-pl) eine neue Release-Version für MODX bereit. Der bis dahin geführte Entwicklungsstrang mit der Versionsnummer 1.0.14 (5. Juni 2014) wurde zudem in MODX Evolution umbenannt. Bei MODX Revolution handelt es sich um eine grundlegende Neuentwicklung, für die inzwischen mehr Snippets zur Verfügung stehen als für MODX Evolution. Für den produktiven Einsatz stehen damit zwei alternative Versionen bereit.

### Besondere Merkmale von MODX Revolution

* objektorientierter Kern auf der Basis von OpenExpedio (xPDO)
* objektorientierte und konsistentere API
* neuer Manager auf der Basis von Smarty, Ext (1.0) und MooTools
* flexiblere Installation und Aktualisierungen
* vereinfachte Erweiterung durch eine Pakete-Verwaltung (Package Manager)
* vereinheitlichtes Rollenmodell
* verbesserte Internationalisierung
* Konzept der Kontexte

## Rezeption

* Oliver Haase-Lobinger: Flexible Nische. Website mit MODX verwalten. In: c’t. Nr. 16, 2011, S. 164.