Was ist neu in Version 1.5?
Mehr Sicherheit
Zuerst schaue ich bei jedem Release, wo ich potentielle Sicherheitslücken finden und schließen kann. Und da ich gerade einen Internet-Intern-Beitrag zum Thema Sicherheit geschrieben habe, fließt das frisch recherchierte Wissen auch gleich in CMBasic ein. So habe ich beispielsweise den Chorizo-Scanner (die Variante mit dem hochwertigeren, normalerweise kostenpflichtigen Account!) mehrfach über meine Präsenz gejagt. Der soll Sicherheitslücken finden. Allerdings mit mäßigem Erfolg. Entweder CMBasic ist supersicher oder der Scanner patzt. (Ich tippe auf Letzteres.)
Scanner hin, Scanner her: Damit das Aufspüren evtl. Sicherheitslücken noch schwerer wird, habe ich die PHP-Include-Dateien für das Frontend zusätzlich mit einer Konstante abgesichert. Mit anderen Worten: Ich sorge auf diese Weise dafür, dass diese Dateien erfolgreich nur direkt von CMBasic aus und nicht von außen abgerufen werden können. Und sollten sie doch einmal von Neugierigen direkt aufgerufen werden, plaudern sie keinerlei Details aus. Also auch keine Fehlermeldungen. Außerdem mussten (fast) alle SERVER-Variablen raus, die sind auch anfällig für Manipulationen. Außerdem habe ich das Verzeichnis mit der Konfigurationsdatei config.inc.php zusätzlich mit einer allgemeinen .htaccess-Datei gesperrt.
Einfache Zugriffsstatistik
Eigentlich war sie erst für das nächste Release geplant, doch ab sofort wird es auch eine einfache Zugriffsstatistik geben. Ich habe sie so programmiert, dass sie wenig Systemressourcen verbraucht und sicher auch bei Dienstleistern eingesetzt werden kann, die sonst das Führen eigener Statistiken vertraglich untersagen. Die Daten werden in einfachen Textdateien gesichert.

Um die Statistik einzuschalten, gehen Sie in die config.inc.php und entfernen Sie das Kommentarzeichen //
vor folgender Konstante
define('STATS', TRUE);
.
Wenn das nicht erfolgreich ist, müssen Sie den stats-Ordner ggf. mit chmod 755 oder 777 freigeben.
Berechtigung und mehrere CMBasics pro Domains
Es war kein Bug, sondern ein Feature. Denn wer bisher mehrere CMBasics pro Domain und damit auch pro Datenbanktabelle installierte, bemerkte eine interessante Eigenschaft. Wer einmal in dem einen CMBasic eingeloggt war, wurde automatisch auch in das oder die anderen Systeme eingelassen. Und zwar mit exakt der gleichen Berechtigungsstufe. Das war durchaus beabsichtigt und hat etwas mit der Sessionverwaltung zu tun. Gleicher Server, gleiche Session!
Auf vielfachen Wunsch habe ich das inzwischen geändert. Wer möchte, kann den Namen der Session verändern. Dann ist es auch möglich, mehrere Installation von CMBasic auf dem gleichen Server laufen zu lassen, ohne dass sich die Nutzerverwaltungen in die Quere kommen. Wie geht das? Dafür schauen Sie in die edit/config.inc.php. An letzter Stelle finden Sie folgende Zeile:
define('CMBASICLOG', 'Login')
Ändern Sie den Wert für Login, beispielsweise in Login120 oder in Lottozahl. Sie können jedoch alles auch bei den Standardwerten belassen und dann reagiert CMBasic so wie zuvor.
Einbau einer individuellen Startseite möglich
Sie möchten die volle Kontrolle über Ihr Design? Dann erstellen Sie doch eine individuelle Startseite, die Sie komplett vom CMS abkoppeln. Das geht in der neuen Version ganz ohne Probleme! Und zwar mit der Konstantedefine('SPLASH', 'splash.html');
in der config.inc.php. Um dieses Features zu aktivieren, entfernen Sie die Kommentarzeichen //
vor dieser Konstante. Den Dateinamen können Sie frei festlegen, im Beispiel lautet er splash.html
.
PNG-Bildformat zugelassen
Natürlich konnten Sie per FTP schon immer PNG-Bilder hochladen und diese dann auch per Drag & Drop einbinden. Allerdings nur per Drag & Drop und eben nicht per Symbolbefehl. Das geht nun. Und endlich versteht auch der Bilduploader das PNG-Format.
Symbolbefehle präzisiert
Apropos Symbolbefehle: Die Befehle zum Einfügen von Bildern oder Plug-Ins habe ich präziser gemacht. Sie reagieren jetzt nur noch, wenn Sie wirklich ein Bild oder eine Plug-In-Datei einbinden. So ist es nun nicht mehr so tragisch, wenn Sie mal außer der Reihe so eine eckige Klammer oder eine Raute irgendwo in den Text einfügen wollen. Ich habe also die im Hintergrund arbeitenden Suchmuster (reguläre Ausdrücke) verfeinert.
Listen als dritte Ebene durch die Hintertür
Immer wieder bin ich nach einer dritten Menüebene gefragt worden und immer wieder habe ich »Nein« gesagt. Zwei Gründe habe ich dafür: Ich wollte die Datenbanktabelle nicht um ein weiteres Feld wie Ebene3 erweitern müssen. CMBasic sollte stets kompatibel zu den Ursprungs-Datenbanktabellen sein. Und ich wäre sicher an der Programmierung dieses noch tiefer verschachtelten Menüs hoffnungslos gescheitert. Vor allem an der Funktion, die sich um die automatische Neunummerierung kümmert - die war schon bei zwei Ebenen ein Krampf.
Trotzdem fehlten mir immer wieder Listen: Sei es, um bei einem Haupteintrag alle Untereinträge aufzuführen, sei es, um eine gepflegte Liste mit News einzubinden. Die neusten Neuigkeiten sollten dabei ganz oben erscheinen. Langer Rede kurzer Sinn: Dieses Feature gibt es nun. Ich verwende einen simplen Symbolbefehl.
Symbolbefehl für die Listen
Die Syntax dieses Symbolbefehls ist ganz einfach. Es gibt ein geschweiftes Klammernpaar und ein Vier-Buchstaben-Wort. Das Vier-Buchstaben-Wort heißt entweder list
: Dann werden alle Einträge schön artig untereinander aufgelistet. (Oder nebeneinander, wenn Sie es per CSS entsprechend ändern. Die id
für die entsprechende ul
habe ich list
genannt.)
Oder es heißt blog
und dann wird die Liste etwas dicker. Es erscheinen Überschriften und Anreißertexte, gepaart mit einem Mehr-lesen-Link.
Dieser Symbolbefehl kann auch erweitert werden. Und zwar duch ein Komma und eine Zahl. Diese Zahl erzwingt die gewünschte Ebene1, deren Unterelemente aufgelistet werden sollen. Ideal, wenn es eben nicht die Unterpunkte der aktuellen Ebene sein sollen!
Setze ich eine 2 ein, werden alle Unterpunkte der Ebene2 aufgelistet: list,2
. Lasse ich die Zahl weg, werden die Unterpunkte der aktuellen Hauptebene eingeblendet.
Dritte Ebene für News
Das ist aber noch nicht alles! Angenommen, Sie wollen zu einem Eintrag der 2. Ebene weitere Untermenüpunkte angeben. Na das geht auch mit dieser fabelhaften neuen Liste! Erstellen Sie zuallererst einmal diese Untermenüpunkte. Der Trick: Vergeben Sie als Ebene1 mindestens eine 100. Denn neuerdings werden Einträge mit Ebene1 >= 100 nicht mehr im Menü angezeigt. Sie bleiben versteckt, können auf diese Weise jedoch großartig beispielsweise dem Untermenüpunkt 10.1 namens News zugeordnet werden.
Wie gelingt diese Zuordnung? Schreiben Sie folgenden Symbolbefehl: list,100
. Und schon erscheinen alle Untermenüpunkte der Ebene 100 untereinander.
Navigieren Sie einmal zu einem dieser Unter-Unter-Menüpunkte. Dort sehen Sie nun einen neuen Link Zurück zum übergeordneten Eintrag. Der ist wichtig, damit der Besucher aus der Verschachtelung auch wieder herauskommt. Auch der Navigationspfad ist nun viergliedrig geworden. Aber das ist noch nicht alles. Klicken Sie doch einmal, auf dieser Unter-Unterstufe angelangt - auf Neu
Und tatsächlich wird nun in das Feld Ebene1 automatisch die Hauptebene der Newseinträge eingetragen. Im Beispiel ist es die 100. Und im Feld Ebene2 erscheint eine 1. Sie müssen sich also um diese Werte gar nicht mehr kümmern sondern können gleich Ihren Newsbeitrag schreiben. Nach dem Speichern wird dieser zu 100.1 - alle anderen Newsbeiträge rutschen automatisch eine Position nach unten. So stehen stets die neusten News zuoberst in dieser Liste. Und wenn Sie statt list
gar noch blog
schreiben, haben Sie auch einen kleinen Anreißertext!
Menü endlich XHTML-kompatibel
Sicher hat es kaum jemand bemerkt. Aber die Templates konnten bisher nur als gültiges HTML 4, nicht jedoch als XHTML 1 gespeichert werden. Grund: Die <li>
-Tags bei den Listen der Menüs waren nicht geschlossen. Und zwar aus programmiertechnischen Gründen, denn gerade das Hauptmenü musste ja verschachtelt werden. Das ist in HTML 4 noch zulässig, in XHTML jedoch nicht mehr. Inzwischen habe ich das Problem jedoch gelöst. Nun besitzt jedes <li>
-Tag auch ein korrespondierendes End-Tag! Ab sofort können Templates also auch im strengeren XHTML-Format vorgesehen werden. (Ich empfehle aber, weiterhin beim fehlertoleranteren Format HTML 4 transitional zu bleiben.)