Das ganz normale Chaos, täglich frisch auf den Tisch. Direkt aus der hintersten Provinz in die Metropolen von Groß-Blogistan.


CMS

Fri, 03 Jul 2009 09:55:59 +0200

Die letzten 2 Tage habe ich mal wieder viel gebastelt. Ich verwende ja für meine Seiten (auch für dieses Blog) eine Art selbstgeschriebenes CMS. Nicht, dass ich andere Systeme für schlecht halte. Aber egal, ob Typo3, Joomla oder Drupal, oder wie sie noch alle heissen, sie haben alle einen für mich signifikanten Nachteil: Sie setzen PHP und MySQL auf dem Server voraus. Auf meinem uralt-Webspace habe ich aber nichts Dergleichen. Praktisch die einzige Möglichkeit, die ich auf meinem Webspace habe, ist, statische Seiten zur Verfügung zu stellen. Gut ja, es gibt da so ein paar vorgefertigte PHP Scripte wie z.B. ein Gästebuch oder ein einfaches Forum. Ich habe damit auch schon experimentiert. Aber die Ergebnisse genügen bei Weitem nicht meinen Anforderungen. Also ist selber machen angesagt.

Das hier verwendete CMS erlaubt scriptgesteuert die Erstellung der Seiten lokal auf dem heimischen PC, sowie teilweise die Verwaltung der Site als Ganzes. Die komplett lokal erstellte Site wird dann (bei mir per sitecopy), ebenfalls scriptgesteuert, hochgeladen. Das hat nebenbei den Vorteil, dass ich immer ein Backup habe. Genau genommen ist die öffentlich verfügbare Version das Backup, und meine heimische Version das Original. Aber dieser Unterschied ist eher marginal. Die Tatsache, dass ich automatisch, durch den Erstellungsprozess als solchen, immer ein Backup habe, hat mich schon mal gerettet. Erinnert sich noch Jemand and den Daten-GAU bei Strato vor ein paar Jahren? Ich war auch davon betroffen. Aber kein Problem: Einfach noch mal Alles hochladen und gut. Trotzdem bin ich damals zu 1und1 gewechselt. Sicher ist sicher.

Nun arbeite ich an der Nachfolgeversion dieses CMS. Die letzten 2 Tage habe ich das Ganze auf eine völlig neue Grundlage gestellt. Zum Einen werden die handgefertigten Originaldateien nun keine XML-Dateien mehr sein, sondern so wie im Blog reine Textdateien. Zum Zweiten werden diese Textdateien nun per Textile formatiert. Das vereinfacht die Erstellung nochmals deutlich. Und zum Dritten ist es nun kein Shellscript mehr, sondern Perl. Es wurde Zeit, dass ich meine alten Perl-Kenntnisse mal wieder auffrische.

Aktuell bin ich so weit, dass die ersten 2 Schritte in der Erstellung einer normalen Webseite funktionieren. Die Webseiten werden aus einer Textdatei erstellt, die relativ einfach strukturiert ist: Solch eine Datei besteht aus einem oder mehreren Abschnitten, die durch einen Sprachbezeichner in eckigen Klammern eingeleitet wird (also z.B. [de]). Einfach diesen Bezeichner und sonst Nichts. Damit wird die grundsätzliche Sprache dieses Inhalts festgelegt. Da mehrere solcher Abschnitte bestehen können, können damit mehrere Sprachversionen der gleichen Seite gepflegt werden. Rorkvell gibt es ja seit Urzeiten in Deutsch und Englisch (ausser diesem Blog). Das war also eine der grundlegenden Anforderungen: Eine Seite in mehreren Sprachen muss durch eine Quelldatei verwaltet werden. So bleibt zusammen, was zusammen gehört.

Direkt anschließend an diesen Sprachbezeichner folgt ein einfacher Header. Dieser besteht aus mehreren direkt aufeinanderfolgenden Zeilen, die jeweils ein Schlüsselwort, gefolgt von einem oder zwei Datenfeldern. Damit werden Titel, Links und Meta-Informationen abgelegt. Über die Links erfolgt dann auch die Einbindung der Seite in die gesamte Webpräsenz.

Anschließend folgt eine Leerzeile, gefolgt vom Inhalt im Format Textile. Ganz einfach.

Der erste Schritt ist nun, zunächst einmal die CSS Stilinformationen in die Seite einzubauen. Da es lästig wäre, diese Informationen jedes Mal wieder in die Textdatei zu schreiben, wird das automatisch erledigt. Dazu wird im Wurzelverzeichnis ein Verzeichnis "style" erstellt. CSS-Dateien in diesem Verzeichnis werden gefunden und eingebaut. Dabei werden zunächst alle CSS-Dateien eingebaut, die nicht "all.css", "screen.css", "print.css", "handheld.css" und noch so ein paar heissen. Ohne Titel und ohne media Attribut. Anschließend folgen eben diese, wobei das media-Attribut aus dem Namen gesetzt wird. Ebenfalls noch ohne Titel.

Anschließend werden in allen Unterverzeichnissen von "style" weitere CSS-Dateien gesucht. Auch diese werden eingebunden, nach dem gleichen Schema wie oben. Doch diese Stylesheets bekommen als Titel den Namen des Unterverzeichnisses. Alle werden zu alternate stylesheets, ausser die, in denen eine Datei damens "default" gefunden wird. Die Stylesheets dort werden also zu default stylesheets.

Schritt 2 ist nun, die oben beschriebene Datei einzulesen, aus der ersten Zeile die Sprachinformation zu gewinnen, aus dem folgenden Block den Header zu generieren, und aus den folgenden Blöcken den Inhalt. Fertige Werkzeuge dafür gibt es nicht, aber es gibt welche, die Teilaufgaben erledigen. Wegen Schritt 3, der noch folgen muss, soll die interne Repräsentation der XHTML-Seite auch sauber als Perl DOM Objekt generiert werden. Das ist für den Header relativ einfach. Die Integration des Textile formatierten Inhalts war weniger einfach. Es gibt da eine Perl Lib namens libtext-textile-perl, die die Formatierung im Wesentlichen macht. Ein Bisschen habe ich die Lib bearbeitet, aber nur wenig. Doch diese Lib erzeugt kein DOM-Objekt, sondern einfach nur Text (der xml-artig aussieht). Wie bekomme ich diesen Text nun an die richtige Stelle des DOM-Objekts als DOM Subtree eingebaut? Das hat mich einige Zeit des Experimentierens gekostet, da ich dazu keine Dokumentation gefunden habe. Aber ich habe es gestern Abend geschafft.

Zur Zeit wird damit ein sauberes, aber sehr einfaches XHTML erzeugt. Aber das reicht noch nicht ganz. Der nun folgende dritte Schritt wird auf das so erstellte DOM-Objekt nun eine XSL Transformation anwenden, über ein externes XSL Stylesheet. Damit können beliebige Umformungen vorgenommen werden. Das wird die Arbeit der nächsten Tage werden. Wenn das steht, ist die Grundlage gelegt. Es sollen noch viele Details kommen, wie z.B. die automatische Generierung einer breadcrumb Navigation und einer keyword Datenbank, aber das sind dann Details.

Der Prozess sorgt nun dafür, dass so erstellt Webseiten von Haus aus ein gewisses Mindestmaß an sauber strukturiertem semantischen Markup mitbringen. Dennoch erlaubt dieser Prozess eine sehr weitreichende Getaltung der Seiten. Da wird zum Ersten ein XSL Stylesheet darauf angewandt. Dies könnte z.B. die Seite so umformen, dass sie für YAML geeignet ist. Oder für was auch sonst immer. Der Phantasie sind hier kaum Grenzen gesetzt. Und das konkrete Aussehen wird dann über die CSS Stylesheets festgelegt. Damit kann man jede denkbare Seitenform erzeugen.

Wenn es grundlegend funktioniert, gibt es das Script bei mir zum Download.

Auch mein Blog wird später durch ein sehr ähnliches System generiert werden. Es wird jetzt schon aus Textdateien generiert, die einen sehr ähnlichen Aufbau haben. Nur die Textile Formatierung wird noch dazu kommen. Allerdings wird das Perl Script daraus dann keine XHTML-Seiten erstellen, sondern rss-Dateien. Aber das dann darauf angewandte XSL Stylesheet kann eben daraus auch XHTML erzeugen. So funktioniert das ja schon bisher. Mein XSL Stylesheet kann ich dann also einfach übernehmen.

Kommentare müssen leider immer noch warten, bis ich wieder Arbeit und ein Einkommen habe. Erst dann werde ich mir einen neuen Webspace mit PHP leisten können. Aber die PHP-Scripte dazu liegen bereits in der Schublade.


0 Kommentare