myPHPcms | Anleitung

Zuletzt aktualisiert am 28. November 2024 10 Minuten

Jetzt wird es historisch. Meine erste Webseite ab 1994 war aus purem handgestrickten HTML. Als meine Frau 2007 verstarb, hatte ich auf einmal das Bedürfnis, ein öffentliches Tagebuch zu führen. Ein Blog musste her. Weil mir WordPress ne Nummer zu groß war, hab ich mir mein eigenes spartanisches flatfile CMS entworfen. So sah das aus:

Einführung

Der Begriff Content-Management System ist vielleicht etwas übertrieben. Aber das, was im Untergrund meiner Web-Präsenz werkelt, kommt dem schon sehr nahe. Mein CMS versucht so einiges zu automatisieren, aber nicht alles.

Es entsteht aus dem Wunsch die volle Kontrolle, Freiheit und Flexibilität über Inhalt, Layout, und Engine zu haben. Eigentlich hab ich ja gar keine Zeit für so etwas, aber irgendwie kann ich nicht anders als das Rad nochmal zu erfinden. Mein CMS hat derzeit noch kein Web Interface für die Datenpflege/Administration. Die erfolgt quasi “hintenrum”, so wie du auch deine herkömmliche Webpräsenz pflegst: Lokal ändern, und dann via ftp auf den Server laden. Teile davon, das Comment-Modul (Comments, Gästebuch, und Weblog) lassen sich auch heute schon übers Web administrieren. Eine vollständige online Administration werde ich am Ende auch noch einbauen. Mein CMS wendet sich also derzeit eher an erfahrene Webworker, die meine kleine Skriptsammlung unter Beachtung der GPL nach Herzenslust verwenden, oder weiter verwursten dürfen. Viel Spaß damit :-)

Features

CMS-Systeme gibt es wie Sand am Meer, waren mir aber zu groß oder/und zu unflexibel. Da habe ich mir kurzerhand mein eigenes zusammen gestellt. Dabei waren mir folgende Anforderungen wichtig:

  • Einfach in der Anwendung, ohne zusätzliche Programmierung einsetzbar.
  • Mehrsprachigkeit, mit automatischer und manueller Umschaltung.
  • Freie Gestaltung der Seiten
  • Freundlich zu Suchmaschinen
  • Trennung von Code und Content, ohne Template Engine
  • Keine SQL Datenbank nötig !!!
  • Da ich nicht das Rad neu erfinden will, sollte sich das CMS mit Fremd-Skripten verstehen.
  • Globale Script und CSS Dateien. Für jede Webseite kann aber bei Bedarf automatisch spezieller Script-Code und CSS-Style Infos nachgeladen werden.

Folgende Module sollen hinzuladbar sein:

  • RSS-Feeds, filterbar, jahresbezogen, mit Archiv
  • Fotoalbum
  • Gästebuch, incl. Spamschutz
  • Blog, mit Kommentarfunktion, und was so dazugehört, incl. Spamschutz
  • Forum, evtl.
  • Mail-Formular, incl. Spamschutz
  • Kommentar Funktion für einzelne Seiten, incl. Spamschutz
  • Download-Manager, mit Statistik für Dateizugriffe
  • Statistik-Modul für Seitenzugriffe
  • Verwalten von Linklisten
  • Spamschutz-Modul
  • Paging Modul, um umfangreiche Inhalte auf mehrere Seiten zu verteilen.
  • Design-Umschalter, der nicht nur (aber auch) CSS-Stylesheets umschaltet, sondern das gesamte Layout einer Präsentation

Das CMS installieren

Das gezippte Archiv einfach hier runterladen, und in das Webverzeichnis des Webservers entpacken.

Ein paar Voraussetzungen

  • Apache - Ja
  • Minimum Web Space - 4 Mb
  • PHP Version - 4.3.3 or höher
  • GD 2 - Enabled
  • SendMail - Enabled
  • Session Support - Enabled
  • domxml - Enabled

Idealerweise sind Short-Tags zugelassen: <?= … ?> statt <?php … ?>. Ich mache reichlich Verwendung davon. Wenn nicht, musst du mit Suchen und Ersetzen durch die Scripte gehen. Das Parsen von HTML Dateien sollte aktiviert werden. Das erreichst Du indem Du folgende Zeilen in die .htaccess Datei im Root verzeichnis anlegst, oder ergänzt:

AddType x-mapp-php4 .php .php4 .htm .html

Falls Du das CMS nicht im Webroot Verzeichnis, sondern in einem Unterverzeichnis (zum Beispiel test/) installieren willst, musst Du dieses Verzeichnis in der Datei includes/global.config.php angeben: $cmsP[“install-directory”] = “test/”;

Jetzt kannst Du das CMS das erste mal über die url aufrufen:

Schnellstart

Wenn Du das CMS installiert hast, müsstest Du folgenden Startbildschirm sehen:

Als erstes solltest du jetzt hier -> Benutzer verwalten das Administrator Passwort ändern. Was Du sehen müsstest ist eine Seite mit nur einem Bereich, dessen Menü ausgeblendet ist, und dem Inhaltsverzeichnis des Bereiches auf der rechten Seite. Der Name des Bereichs ist index. Er hat drei Seiten: willkommen, weblog, und gästebuch:

Label[de]Dateiname
willkommenindex.html
weblogindex.weblog.html
gästebuchindex.gbook.html

Es ist ein Designset vorhanden: tasteofspring. Als Sprachen stehen deutsch und englisch zur Verfügung.

Seite zu einem Bereich hinzufügen

Dazu sind drei Schritte notwendig.

  • Einen mehrsprachigen Menüeintrag erzeugen
  • Den Seiteninhalt mindestens in der Standardsprache bereitstellen.
  • Die Einstiegsseite als Fassade anlegen

Schritt 1: Menüeinträge anlegen

Um dem Bereich eine neue Seite hinzuzufügen, wechselst du in das Verzeichnis ressourcen/menues das die Inhaltsverzeichnisse aller Bereiche, in alles Sprachen enthält. Zu dem Admin-Menü kommen wir später. Es gibt nur einen Bereich, und der heißt index. Das Inhaltsverzeichnis für den Bereich index steckt in den Dateien

DateinameSprache
index.menue.de.xmlDeutsch
index.menue.en.xmlEnglisch

Der Inhalt der beiden Dateien sieht wie folgt aus:

index.menue.de.xml

<resources>
    <resource key="index">willkommen</resource>
    <resource key="index.weblog">weblog</resource>
    <resource key="index.gbook">g&auml;stebuch</resource>
</resources>

index.menue.en.xml

<resources>
    <resource key="index">welcome</resource>
    <resource key="index.weblog">weblog</resource>
    <resource key="index.gbook">guestbook</resource>
</resources>

Das Attribut key enthält den Schlüssel. Das CMS ergänzt am Ende den Suffix .html um den Namen der HTML-Datei zu ermitteln. Füge jetzt in jeder der Dateien eine neue Zeile ein:

<resource key="index.test">neue Seite</resource>
<resource key="index.test">new Page</resource>

Aus diesen Informationen kann das CMS jetzt das Menü rendern. Jetzt fehlt uns noch der zugehörige Inhalt.

Schritt 2: Inhalte bereitstellen

Wechsle in das Verzeichnis ressourcen/. Hier findest du die sprachabhängigen Inhalte aller Webseiten. Es muss nicht zu jeder Sprache eine Datei vorhanden sein. Nur die Datei der Default-Sprache muss vorhanden sein. Als Default ist in der Beispielanwendung DE eingestellt. Dieser Inhalt wird immer dann angezeigt, wenn Übersetzungen fehlen.

Lege eine neue Datei an:

index.test.de.php

und fülle sie mit folgendem Inhalt:

<h1>Hallo Welt</h1>
<p>willkommen auf meiner neuen Seite
<?= $cmsSmilies->getSmilie(":thumb:"); ?>!!!</p>

Es gibt eine weitere, zusätzliche Möglichkeit sprachabhängige Inhalte bereitzustellen: in XML-Dateien. Dazu muss eine weitere sprachabhängige Datei gemäß den Namenskonvetionen angelegt werden.

Für unser Beispiel ist das: index.test.de.xml die mit folgendem Inhalt gefüllt wird:

<resources>
 <resource key="anzeige">Das ist eine Bekanntmachung</resource>
 <resource key="update-info">Es gibt %count% Aktualisierungen!</resource>
<resources>

Auf diese Informationen kann aus der Datei index.test.de.php wie folgt zugegriffen werden:

$text = $cmsRm_SiteContent_XML->getValue("anzeige");
echo $text;

Beachte den zweiten Eintrag. Er enthält einen Platzhalter, den wir nun zur Laufzeit ersetzen wollen. Dazu verwenden wir eine weitere Funktion des CMS: Die Template-Engine.

require_once($cmsPath."includes/library/Template.php");

...

// Berechneter Wert
$calculatedValue = ...

...

$my_tpl = new Template( $cmsRm_SiteContent_XML->getValue("update-info") );
$my_tpl->addPlaceholder("%count%", $calculatedValue );

echo echo $my_tpl->render();

Die Webseite muss letztlich natürlich auch über den Browser aufgerufen werden können. Dazu legen wir eine Fassade an…

Schritt 3: Einstiegsseite anlegen

Wechsle in das Root-Verzeichnis der Anwendung. Hier liegen alle HTML-Dateien die über den Webbrowser aufgerufen werden. Öffne die Datei index.html. Du findest dort nur die folgende Zeile PHP-Code:

<?php include "includes/global.contentloader.php"; ?>

Dieser Code steht in allen diesen Dateien. Damit deine Seite über das Web erreichbar ist, musst du eine Datei mit den Namen index.test.html erzeugen, und diese Zeile Code hinein kopieren. Achte darauf, das keine Leerzeichen, oder Zeilen vor dem <?php vorkommen.

Damit bist Du fertig..

Bereich hinzufügen

Das Bereichsmenü ist in der Beispielanwendung ausgeblendet, da bisher nur ein Bereich vorhanden war. Machen wir also zunächst das Bereichmenü sichtbar. Dazu wechselst du in das Verzeichnis includes/, und öffnest die Konfigurationsdatei global.config.php des CMS. Dort scrollst du ein wenig herunter, bis du folgende Einträge findest:

// Menü ausblenden, wenn nur ein Eintrag vorhanden ist.
$cmsP["menue.bereich.show-single-entry"] = false;
$cmsP["menue.site.show-single-entry"] = false;
Der erste Eintrag ist für die Sichtbarkeit des Bereich -Menüs zuständig. Setze den Wert  auf true. Wenn Du jetzt die Startseite erneut aufrufst sollte sie so aussehen:

Der erste Eintrag ist für die Sichtbarkeit des Bereich -Menüs zuständig. Setze den Wert auf true. Wenn Du jetzt die Startseite erneut aufrufst sollte sie so aussehen:

BILD

Oben wird ein Link mit der Bezeichnung start sichtbar. Jetzt wollen wir dieses Menü um einen Eintrag erweitern.

Schritt 1: Bereichsmenü erweitern

Wechsle in das Verzeichnis ressourcen/global. Hier findest du die sprachabhängigen Menüeinträge für die Bereiche:

  • global.bereiche.de.xml
  • global.bereiche.en.xml
  • global.bereiche.de.xml
<resources>
 <resource key="index">start</resource>
 <resource key="admin">admin</resource>
</resources>

global.bereiche.en.xml

<resources>
 <resource key="index">home</resource>
 <resource key="admin">admin</resource>
</resources>

Die Menüeinträge erscheinen in der Reihenfolge wie sie hier notiert werden in der Webseite. Füge jetzt zwischen den Zeilen index, und admin je eine neue Zeile mit folgendem Inhalt ein:

global.bereiche.de.xml

<resources>
 <resource key="index">start</resource>
 <resource key="testbereich">mein bereich</resource>
 <resource key="admin">admin</resource>
</resources>

global.bereiche.en.xml

<resources>
 <resource key="index">home</resource>
 <resource key="testbereich">my section</resource>
 <resource key="admin">admin</resource>
</resources>

Auch hier wird später vom CMS aus dem Key durch Anhängen der Endung .html der Dateiname gebildet: index.html, und admin.html. Der Admin Eintrag darf nicht verändert werden.

Schritt 2: Inhaltverzeichnis des Bereichs erstellen

Um dem Bereich eine neue Seite hinzuzufügen, wechselst du in das Verzeichnis ressourcen/menues das die Inhaltsverzeichnisse aller Bereiche, in alles Sprachen enthält.

Es existieren bereits Menüs für die Bereiche index, und admin. Erzeuge zwei Dateien mit folgendem Inhalt:

testbereich.menue.de.xml

<resources>
    <resource key="testbereich">einleitung</resource>
</resources>

testbereich.menue.en.xml

<resources>
    <resource key="testbereich">preface</resource>
</resources>

Damit ist der neue Bereich inclusive Startseite definiert. Die Index-Seite des Bereichs nennt sich testbereich.html Für diese Seite muss jetzt analog zum Kapitel Seite zu einem Bereich hinzufügen. auf Seite 7 der Inhalt und die Fassade bereitgestellt werden:

Schritt 3: Inhalt der Seite bereitstellen

Wechsle in das Verzeichnis ressourcen/. Hier findest du die sprachabhängigen Inhalte aller Webseiten. Es muss nicht zu jeder Sprache eine Datei vorhanden sein. Nur die Datei der Default-Sprache muss vorhanden sein. Als Default ist in der Beispielanwendung DE eingestellt. Dieser Inhalt wird immer angezeigt, wenn Übersetzungen fehlen. Lege eine neue Datei an:

testbereich.de.php

und fülle sie mit folgendem Inhalt:

<h1>Einleitung</h1>
<p>Das ist die Startseite meines neuen Bereichs</p>

Erstelle bei Bedarf noch eine Datei testbereich.en.php mit der englischen Übersetzung.

Schritt 4: Einstiegsseite anlegen

Als letztes fehlt noch die Fassade, damit die Seite über das Internet aufgerufen werden kann. Wechsle in das Root-Verzeichnis der Anwendung. Hier liegen alle HTML-Dateien die über den Webbrowser aufgerufen werden. Erzeuge eine Datei testbereich.html mit folgendem Inhalt:

<?php include "includes/global.contentloader.php"; ?>

Achte darauf, das keine Leerzeichen, oder Zeilen vor dem <?php vorkommen. Damit bist Du fertig..

Arbeitsumgebung einrichten

Meine bevorzugte Entwicklungsumgebung ist Netbeans. Zum lokalen entwickeln und Testen der Anwendung benutze ich eine XAMPP Installation.

Verzeichnisse

VerzeichnisnameBeschreibung
datenAlle Flatfile-Datenbanken
designsVerzeichnis für alle Designsets
designs/tasteofspring/Verzeichnis des Designsets, einthält das Template
designs/tasteofspring/images/Die Bilder des Designsets
designs/tasteofspring/script/Java-Skripte des Designsets
designs/tasteofspring/styles/CSS-Skripte des Designsets
downloadsEnthält alle Downloads (nächste Version)
imagesGlobale Grafikdateien, die von alles Designsets verwendet werden
includesKonfiguration
includes/library/Klassenbibliothek, Module
includes/preOutput/PHP Skripte die vor HTML-Ausgabe ausgeführt werden sollen
ressourcenMehrsprachiger Inhalt der Webseiten
ressourcen/global/Globale Ressourcen
ressourcen/menues/Die Inhalte der Menüs
ressourcen/meta/Header-Metadaten in allen Sprachen
ressourcen/modules/Ressourcen der Klassenbibliothek (Module)
scriptGlobale Skripte, die von allen Designsets verwendet werden
stylesGlobale CSS Styles, die von allen Designsets verwendet werden
templatesAlle globalen Vorlagen für die Template-Engine

Die Webseiten, und einige Systemskripte befinden sich im Root-Verzeichnis.

Wichtige Dateien

Es gibt natürlich einen ganzen Haufen wichtiger Dateien. Einige wichtige hab ich hier mal gelistet:

Name des SkriptsBeschreibung
include/global.config.phpZentrale Konfigurationsdatei
readme.lizenz.txtLizenzinformationen
download.phpEmpfängt Anforderungen für Downloads
switchStylesets.phpUmschalter für Stylesets
rss-feed.phpNimmt Anfragen zur Anzeige vom RSS-Feed entgegen.
system.download.build.cache.phpBaut den Download-Statistik Cache neu
system.reset.phpLöscht die Session

Das CMS Konfigurieren

Die Basiskonfiguration geschieht in der Datei include/global.config.php:

$cmsS["install-directory"]   = ""; // ggfs. Unterverzeichnis, zB.: "cms/"
$cmsS["users.database"]      = "daten/users.dat";
$cmsS["language.supported"]  = "de,en";
$cmsS["language.default"]    = "de";

Wie funktioniert das CMS: Internes

Über den Webbrowser wird die URL einer Webseite eingegeben. Diese HTML-Seite ist aber nur eine Fassade. Sie enthält lediglich einen Aufruf des CMS.

Namenskonvention für Webseiten im CMS

Die Webseiten liegen alle im Root Verzeichnis. Der Name einer Webseite beinhaltet Schlüsselinformationen für das CMS. Er hat zwei Ebenen, die durch einen Dezimalpunkt getrennt werden. Weitere Ebenen werden nicht berücksichtigt:

[name des bereichs].[seite].html

Beispiele für Webseiten:

  • home.html (Seitenname = Bereich = ‘home’)
  • home.aboutme.html (Bereich=‘home’, Seitenname = ‘home.aboutme’)

Beispiel für Webseiten mit mehr Ebenen:

  • home.bilder.01.html (Bereich = ‘home’, Seitenname = ‘home.bilder’)
  • home.bilder.02.alpha.html (Bereich = ‘home’, Seitenname = ‘02.alpha’)

Konventionen für PHP Variablen

Für Variablen gibt es auch eine Namenskonvention: Alle CMS Objekte, und Variablen beginnen mit dem Prefix $cms. Einige Beispiele für Systemvariablen:

  • $cmsPath

Benutzer verwalten

Nach der Installation des Systems sind zwei Nutzer verfügbar. Der Wichtigste ist der Administrator. Der Benutzername und Passwort ist admin. Das Passwort und ggfs. der Benutzername sollte nach der Installation sofort geändert werden. Adminrechte benötigst Du um im Gästebuch Einträge ändern, kommentieren, oder löschen zu können. Im Weblog darfst Du außerdem nur als Administrator Einträge vornehmen.

Info

Discontinued

An Anwendung entwickle ich nicht mehr weiter, da ich zu Wordpress gewechselt bin.