CMS

Seiten Bereiche

Einleitung

Die erste Frage, die man sich stellen könnte wäre: "Warum noch ein statisches CMS?"

Hier mal die Gründe, warum ich ein weiteres geschrieben habe:

Den Seitenaufbau habe ich von meiner alten Homepage übernommen. Ein kleines, aber wichtiges Detail hat sich geändert: Während die seiteninterne Navigation früher über Javascript lief, konnte ich es bei der Neuen komplett über CSS realisieren.

Kommen wir nun zum Allgemeinen Aufbau

Allgemeiner Aufbau

Das CMS besteht aus mehreren Komponenten:

Es wird folgende Ordnerstruktur verwendet:

Ausserdem verwende ich zusätzlich folgende Werkzeuge:

So ... weiter geht's zur Auszeichnungssprache

Auszeichnungssprache

Für die Quelltexte werden UTF8-codierte Unicode-Dateien mit Unix-Zeilenenden erwartet. Die Dateien werden zeilenweise gelesen und von Sonderzeichen befreit. Anschliessend werden sie in eine der folgenden Kategorien eingeteilt und entsprechend behandelt:

Die Anweisungen selbst lassen sich weiter unterteilen:

Struktur

Mit den folgenden Anweisungen kann man eine Seite weiter strukturieren:

Inhalte

Für Inhalte selbst steht vorerst nur folgende Anweisung zur Verfügung:

Links

Links lassen sich mit den folgenden Anweisungen einfügen:

Listen

Listen lassen sich mit den folgenden Befehlen bilden:

Code

Zum Schluss noch einige Befehle, um Code unter zu bringen:

Bevor es ans Automatisieren geht, noch einige Hinweise zum Seitenmenü

Seitenmenü

Um die einzelnen Seiten miteinander zu verbinden, gibt es auf jeder Seite ein Seitenmenü, das bei allen Seiten gleich ist.

Grundlage für dieses Menü ist die Seitenliste. Diese liegt im gleichen Ordner wie die Quelltexte der einzelnen Seiten und enthält die Dateinamen (mit Erweiterung, aber ohne Pfadangaben) der Quelltexte.

Dabei sollte folgendes beachtet werden:

Das CMS liest diese Datei, extrahiert aus den jeweiligen Quelltexten die Titel und bildet daraus eine Liste. Die einzelnen Elemente dieser Liste sind wiederum Listen die den Dateinamen ohne Erweiterung und den Seitentitel enthalten. Diese zweidimensionale Datenstruktur wird als JSON -Datei gespeichert.

Diese JSON -Datei wird allerdings nicht nur für das Seitenmenü verwendet. Der erste Eintrag bestimmt nähmlich auch die Startseite.

Um alles nicht jedesmal von Hand machen zu müssen, gibt es ein Makefile

Makefile

Ich bin kein Profi bei Makefiles. Daher behalte ich die von mir genutzte Datei für mich und zeige nur ein vereinfachtes Beispiel.

Als erstes werden ein paar einfache Variablen definiert. Die Variable CMS enthält dabei den Dateinamen des Python-Programms mit vollständigem Pfad.

CMS = ...
PAGEFILE = pages.json
INDEX = out/index.html
PAGELIST = src/pagelist

Danach werden die Variablen mit den Quelltexten und den HTML-Dateien gebildet:

SRC = ${addprefix src/, ${shell cat ${PAGELIST}}}
DST = ${SRC:src/%.cmss=out/html/%.html}

Es folgen einige Standard-Ziele:

all: ${DST} ${INDEX}

clean:
        @rm -f ${DST}
        @rm -f ${PAGEFILE}
        @rm -f ${INDEX}

Die folgenden Ziele erledigen die eigentliche Arbeit:

Zunächst mal eine einfache Möglichkeit, die Seitenliste zu erzeugen:

${PAGELIST}:
        @echo Create $@
        @(cd src; ls -1 *.cmss) > ${PAGELIST}

Hier wird die JSON -Datei erzeugt:

${PAGEFILE}: ${PAGELIST}
        @echo Create/update $@
        @${CMS} pages ${PAGELIST}

Hier die index.html mit der Weiterleitung auf die eigentliche Startseite:

${INDEX}: ${PAGEFILE}
        @echo Create/update $@
        @${CMS} index --destination="./out"

Und hier eine allgemeine Regel um aus den Quelltexten HTML-Seiten zu erzeugen:

out/html/%.html: src/%.cmss ${PAGEFILE}
        @echo Create/update $@
        @${CMS} convert $< $@

Ich bin sicher, selbst bei diesem einfachen Beispiel gibt es Verbesserungspotential ;-)

Kommen wir zum Synchronisieren

Synchronisieren

Synchronisieren geht relativ einfach ... vor allem, weil lftp eine gut funktionierende Möglichkeit zum Spiegeln mitbringt.

Auch hier vereinfache ich mir die Arbeit mit make .

Zunächst wieder ein paar Variablen:

FTP_SERVER = ...
FTP_USER = ...

Dann einige Ziele um zu synchronisieren, alles zu übertragen oder zu löschen:

sync:
        @lftp -u $FTP_USER -e "mirror --continue --delete --reverse out .;quit" ${FTP_SERVER}

sync-all:
        @lftp -u $FTP_USER -e "mirror --continue --delete --reverse --transfer-all out .;quit" ${FTP_SERVER}

sync-clean:
        @lftp -u $FTP_USER -e "glob -a rm -r *;quit" ${FTP_SERVER}

Und das wars ... mehr ist da nicht zu tun.

Noch ein paar Worte zum Abschluss

Abschluss

Mein CMS ist so weit, das ich es einsetzen kann. Aber fertig ist es noch nicht:

Aber es ist fertig ... vorerst ;-)