Homephp ist ein geniales Tool um schnell und einfach (cd, mkdir, vi) sehr viel Content zu verwalten (git). Es ist allerdings ganz schlecht geeignet, wenn man ein webbasiertes CMS benötigt. Nach genauer Analyse habe ich allerdings dafür auch einen kleinen Diamanten entdeckt: Plone. Anders als Homephp, welches ausschließlich Dateien kennt und darauf eine html Sicht bietet, arbeitet es sehr content-basiert und bietet dutzende verschiedene Sichten auf den gleichen Content.

Plone

Plone hat man sehr schnell installiert (egal ob auf Linux oder Windows) und mit dem buildout System sind auch add-ons einfach hinzugefügt. Das ganze System ist extrem in sich abgeschlossen und benötigt nur den selbst mitgelieferten Python Interpreter. Es kann als Art Betriebsystem betrachtet welches seinen eigenen Filesystem (ZopeDB) samt Metadatenunterstützung, Applikationenserver (Zope) und integrierten Http, Ftp und Dav Server mitbringt.

Content-Migration

Nach dem diese Entscheidung gefallen war, gab es noch zwei anstehende Probleme: Wie kann ich den Content und wie das Layout migrieren? Für die Content-Migration habe ich ein Tool migrator geschrieben welches von einer lokalen Kopie (mittels wget -r) einer der Webseiten, die das alte CMS verwendet haben, in einem Rutsch nach Plone befördert.

Dazu wird zuerst das nicht-konforme, latin1 codierte HTML4 zu konformen, utf8 codierten XHTML konvertiert, mittels xpath der Content herausgeschnitten, die ganzen harten Formatierungen entfernt und Plone damit über Webdav gefüttert. Das Programm ist in C++ geschrieben. Als Build System habe ich CMake verwendet, von dem ich jetzt restlos begeistert bin. Die Syntax ist extrem einfach, es kann jede Bibliothek mit minimalen Aufwand gefunden werden aber das beste ist: Die ganze Projektstruktur ist extrem sauber (nur eine CMakeLists.txt) pro Ordner und modular (jede dieser CMakeLists.txt ist genau für diesen Ordner zuständig!).

Das Repo ist via git verfügbar:

git-clone git://www.markus-raab.org/git/migrator
Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif