Grundlagen für Entwickler und Designer

Version 1.7.1

1 Einführung

Das Simploo CMS basiert auf PHP 5 und MySQL 5 und verwendet das Zend Framework in der Version 1.8 als Grundlage. Für die Umschreibung der virtuellen URLs setzt das Simploo CMS optional auf das Apache Module mod_rewrite. In diesem Fall wird eine enstprechende .htaccess-Datei vorausgesetzt. Standardmäßig ist das Simploo CMS allerdings auch ohne mod_rewrite lauffähig.

URL-Syntax ohne mod_rewrite

  • www.ihre-domain.de/index.php/produkte/infos

URL-Syntax mit mod_rewrite

  • www.ihre-domain.de/index.php/produkte/infos

In diesem Handbuch erfahren Sie den grundlegenden Aufbau des Simploo CMS und erhalten einen Einstieg in die Anpassung und Weiterentwicklung unserer Software.

2 Aufbau und Struktur

2.1 Verzeichnisstruktur

Nach der Installation des Simploo CMS finden Sie eine wie folgt dargestellte Verzeichnisstruktur wieder. Zentraler Einstiegspunkt ist die Datei index.php, die alle Anfragen entgegenimmt und an die entsprechenden Controllern weitergibt. Die index.php inkludiert zudem die bootstrap.php, in der die grundlegende Initialisierung des Systems vorgenommen wird.

Die verschiedenen Ordner enthalten folgende Inhalte:

  • application
    Enthält den eigentlichen Kern des Systems und ist im Auslieferungszustand in zwei Module untereilt. Im Unterordner sicore sind alle Backend-, sowie Kernfunktionalitäten abgelegt – im Unterordner sifront lagern die Funktionen zur Anzeige der Webseiten.
  • config
    Hier finden Sie alle Konfigurationseinstellungen. Das Simploo CMS liefert alle Standard-Konfigurationseinstellungen im Unterordner system, die allerdings nach Belieben im Unterordner custom überschrieben werden können.
  • data
    Speicherort für alle dynamischen Daten wie hochgeladene Bilder, temporär angelegte Dateien vom System, Cache-Dateien und Logfiles.
  • languages
    In diesem Ordner finden Sie die Array-basierten Sprachdateien für das Simploo CMS. Wie bei den Konfigurationsdateien werden vom System bereits Standard-Sprachdateien im Unterordner system mitgeliefert, die im Unterordner custom ebenfalls projekt- und kundenspezifisch erweitert und angepasst werden können.
  • lib
    Alle externe Bibliotheken und Module wie das Zend Framework, das Javascript Framework jQuery, sowie Bibliotheken der Simploo GmbH, wie der selbstentwickelte Inhaltseditor liegen im Ordner lib.
  • templates
    Selbsterklärend liegen hier die Templates für das Backend und das Frontend. Für das Frontend unterliegen die Templates, wie die Konfigurations- und Sprachdateien, einem Fallback-Mechanismus.

2.2 Fallback-System

Das bereits angesprochene Fallback-System dient der leichteren Anpassbarkeit des Systems und vermeidet Probleme bei Updates. Es findet auf folgende drei Bereiche Anwendung.

2.2.1 Konfigurationsdateien

Das Simploo CMS liefert bereits alle Konfigurationseinstellungen mit, die entsprechend angepasst werden können. Wird beim Aufruf des Simploo CMS nun intern beispielsweise eine Datenbankverbindung aufgebaut, holt sich das System die entsprechenden Zugangsdaten aus den Konfigurationsdateien in folgender Reihenfolge:

  1. Als erstes wird der entsprechende Eintrag in der Datei config/custom/base.ini.php gesuch.
  2. Wird er dort nicht gefunden, werden die Einträge aus config/system/base.ini.php geladen.

So können also alle Einträge aus dem System-Ordner nach Belieben angepasst werden. Diese bleiben auch bei einem Update des Simploo CMS erhalten, da lediglich die Dateien im System-Ordner überschrieben werden.

2.2.2 Sprachdateien

Das gleiche Prinzip gilt für die Sprachdateien. Für alle Ausgaben im Simploo CMS Backend und teilweise auch im Frontend werden entsprechende Platzhalter (z.B. LL_GENERAL_LOGIN) verwendet. Für diese Platzhalter sucht das Simploo CMS erneut in der folgenden Reihenfolge nach einer Übersetzung

  1. language/custom/de.php
  2. language/system/de.php
Die Unterstützung mehrerer Sprachen ist derzeit in Arbeit und wird voraussichtlich in der Version 1.9 veröffentlicht.

2.2.3 Templates

Ebenso wie bei den vorherigen beiden Beispielen lässt sich der Fallback-Mechanismus auch auf die Frontend-Templates, also das letztendliche Design der Webseite, übertragen. Das Simploo CMS bringt bereits zwei Design-Ordner mit, die in folgenden Reihenfolge abgearbeitet werden:

  1. Im Ordner templates/frontend/sibase befindet sich das Startlayout pagelayout.phtml des Simploo CMS, sowie Fehlerseiten für z.B. 404-Fehler.
  2. Am Ende geht das System den Ordner templates/frontend/sicore durch. Dort befinden sich verschiedene Systemplates für z.B. die Anzeige von Inhalten, Navigationsmenüs oder ein Loginformular.

Wird nun von Ihnen ein individuelles Layout im Ordner templates/frontend/custom erstellt und entsprechend aktiviert (siehe Handbuch "Integration von Templates"), wird dieser vor den oben genannten zwei Design-Ordnern durchsucht. Das heißt, dass Sie alle Templates aus den Ordnern sibase und sicore in Ihrem eigenen Designordner erstellen und damit entsprechend überschreiben können.

Zusätzlich können auch noch Templates in eigenen Simploo CMS Modulen abgespeichert werden, lesen Sie dazu das Handbuch Eigene Module erstellen.

Wollen Sie als Beispiel eine eigene 404-Fehlerseite ausgeben lassen, kopieren Sie die Datei templates/frontend/sibase/error404.phtml einfach nach templates/frontend/custom/error404.phtml und passen sie Ihren Wünschen nach an. Und schon wird bei der nächsten nicht gefundenen Webseite Ihre eigene, individuelle 404-Fehlerseite im Browser ausgegeben.

System-Konfigurationsdateien, System-Sprachdateien und System-Templates sollten Sie niemals direkt anpassen, sondern die dafür vorgesehenen custom-Ordner verwenden.

Sie vermeiden damit Probleme beim Einspielen von Updates!

2.3 Module und Controller

Das Simploo CMS ist unterteilt in Module, die wiederum verschiedene Controller enthalten. Innerhalb dieser Controller werden Anfragen in sogenannten Actions verarbeitet und entsprechende Inhalte zurückgegeben.

Mehr dazu finden Sie in der Zend Framework Dokumentation unter:

2.3.1 Modul "Sifront"

Dieses Modul übernimmt die eigentliche Seitenausgabe und verfügt im Ordner application/Sifront/Controllers über folgende Controller:

  • PageController
    Dieser Controller wird standardmäßig mit der Funktion showAction() aufgerufen und dient der eigentlichen Darstellung der Webseiten.
  • ContentController
    Dieser Controller behandelt die Darstellung von Inhalten.
  • ErrorController
    Darstellung von Fehlermeldungen

2.3.2 Modul "Sicore"

Das eigentliche Herz des Simploo CMS ist das Modul Sicore, mit folgenden Controllern im Ordner application/Sicore/Controllers. Die meisten dieser Controller werden per AJAX-Anfragen aufgerufen.

  • PageController
    Analog zum Modul Sifront der Einstiegspunkt in den Redaktionsbereich, der in der showAction()-Methode einige Administrations-Einstellungen vornimmt und im "Administrations-Modus" direkt zur Sifront::showAction() weiterleitet.
  • UserController
    Controller für unter anderem das Ein- und Ausloggen des aktuellen (Redaktions-)Benutzers.
  • MenuController
    Darstellung der Menü-Elemente im Simploo CMS Administrationsbereich.
  • PagesController
    Controller für die Verwaltung der Seiten-/Navigationsstruktur.
  • ContentController
    Controller für die Verwaltung der Inhaltselemente.
  • MediaController
    Controller für die Dateiverwaltung.
  • FileController
    Controller für das Bearbeiten/Hochladen von Dateien.
  • FolderController
    Controller für das Bearbeiten von Ordnern in der Dateiverwaltung.
  • UsersController
    Controller für die Benutzerverwaltung.
  • DesignController
    Controller für die Template- und Designverwaltung.
  • SettingsControlles
    Controller für die Verwaltung der Administrationseinstellungen.
  • UpdatesController
    Controller für die Verwaltung und Einspielung von Updates.

2.3.3 Eigene Module

Selbstverständlich können Sie auch eigene Module mit eigenen Controllern erstellen, um direkt über den Browser oder auch im Rahmen des Simploo CMS (z.B. spezielle Inhaltselemente) auf diese Funktionalitäten zugreifen zu können. Sollten Sie ein eigenes Modul erstellt haben, müssen Sie dieses dem Simploo CMS bekannt machen. In der Konfigurationsdatei config/system/base.ini.php finden Sie folgende Standard-Einstellung

[general]
modules[] = Sifront
modules[] = Sicore

Ergänzen Sie für die korrekte Funktionsweise Ihres neuen Moduls die config/custom/base.ini.php daher einfach um folgende Zeilen:

[general]
modules[] = IHR_MODULNAME

Mehr Informationen dazu erhalten Sie im Handbuch Eigene Module erstellen.

2.4 Ablauf Seitenaufruf

Das Simploo CMS kann über zwei verschiedene URL-Formate aufgerufen werden. Wie beim Zend Framework gewohnt über den Syntax

  • www.ihredomain.de/index.php/MODUL/CONTROLLER/ACTION

oder über virtuelle URLs für die Frontend-Ausgabe im Simploo CMS

  • www.ihredomain.de/index.php/EINE/VIRTUELLE/URL

2.4.1 Standard Zend Framework Aufruf

Beim Aufruf über den Standard Zend Framework Syntax werden die entsprechenden Action-Methoden im angeforderten Controller und Modul aufgerufen. Die entsprechenden Module müssen dabei im Simploo CMS registriert sein.

Mehr dazu finden Sie in der Online Hilfe zum Zend Framework unter:

2.4.2 Aufruf über virtuelle URLs

Die zweite Möglichkeit das Simploo CMS um Inhalte zu bitten, ist der Aufruf von virtuellen URLs, die in der Simploo CMS Datenbank hinterlegt sind. Dabei handelt es sich letztendlich um (über das CMS angelegte) Webseiten, deren Inhalt daraufhin an den Browser zurückgegeben werden.

Nehmen wir an ein Besucher Ihrer Seite klickt auf einen Navigationspunkt und fordert von Ihrem Simploo CMS folgende virtuelle URL an:

Damit setzt sich folgender Vorgang im Simploo CMS in Gang:

  1. In der index.php wird der Front-Controller initalisiert und entsprechend aufgerufen
  2. Dieser leitet die angefragte URL an ein Plugin weiter, dass die URL analysiert. Erkennt das Plugin eine Anfrage an ein registriertes Modul, übernimmt dieses Modul die Anfrage und leitet sie an einen entsprechenden Controller weiter. Die Schritte 3-4 entfallen.
  3. Ansonsten stellt das Plugin eine Datenbankabfrage und holt sich zum virtuellen URL-Alias unternehmen/impressum die entsprechende interne Seiten-ID aus der Tabelle si_urlalias.
  4. Wird kein entsprechender Eintrag gefunden, gibt der Sifront::ErrorController eine 404-Fehlermeldung "Seite nicht gefunden" aus.
  5. Wird eine dazugehörige Seite gefunden, werden die entsprechenden Inhalte geladen und die Seite anhand des aktuellen Layouts/Templates an den Browser zurückgegeben.

3 Datenbank

3.1 Tabellen

Im folgenden werden die wichtigsten Tabellen der Simploo CMS Datenbank kurz beschrieben:

  • si_nodes
    In dieser Tabelle werden die Seiten und deren Inhalte abgelegt. Sowohl Seiten, als auch Inhalte stellen einen Knoten/Node dar und werden in dieser Tabelle inhaltlich nicht unterschieden. Jeder Knoten hat eine UID und einen entsprechend korrespondierenden Eintrag in der Tabelle si_tree.
  • si_tree
    In der Tabelle si_tree wird die Baumstruktur anhand eines Parent-Model abgebildet. In dieser Tabelle ist auch festgelegt, ob der entsprechende Eintrag in si_nodes eine Seite oder ein Inhaltselement ist (ispage = 1 oder ispage = 0) .
  • si_tree_tree
    Um schneller – ohne Rekursion wie beim Parent-Model eigentlich nötig - auf alle Eltern- oder Kinderelemente eines Knoten in der Baumstruktur zugreifen zu können, werden in dieser Tabelle zusätzlich alle Kind-Eltern-Verknüpfungen gespeichert.
  • si_urlalias
    Jeder Knoten hat einen URL-Alias, bzw. eine virtuelle URL, über die mit dem Browser auf die entsprechende Seite (oder den entsprechenden Inhalt) zugegriffen werden kann. Ein Eintrag mit version = -1 bedeutet dabei, dass die eingetragene virtuelle URL nicht mehr verfügbar, bzw. abgeändert wurde. Das Simploo CMS leitet automatisch mit einem "301 – permanently moved" –Header an den Browser auf die aktuelle virtuelle URL weiter.
  • si_folders und si_folders_folders
    Speicherung der Ordner-Baumstruktur analog zu si_tree und si_tree_tree.
  • si_files
    Speicherung der hochgeladenen Dateien mit Zuordnung zu einem Ordner in si_folder
  • si_users und si_users_users
    Speicherung der Benutzerstruktur analog zu si_tree und si_tree_tree. In der Tabelle si_users werden sowohl Benutzer als auch Gruppen (isgroup = 1) gespeichert. Dadurch können Berechtigungen relativ leicht und performant von "oben nach unten" vererbt werden.

3.2 Erweiterung

3.2.1 Erweiterbare Tabellen

Folgende Tabellen können Sie für Ihre Seite mit eigenen Datenbankfeldern erweitern:

  • si_nodes
    zusätzliche Seiteneigenschaften, wie zum Beispiel eine Seitenüberschrift oder Headergrafik.
  • si_users
    zusätzliche Benutzerinformationen, wie zum Beispiel einen Firmennamen.
  • si_folders und si_files
    zusätzliche Informationen und Felder zu Ordnern oder Dateien.

3.2.2 Vorgehensweise

Als Beispiel wollen wir die Webseiten um einen über das Simploo CMS pflegbaren Seitentitel erweitern, der im Layout beispielsweise im Header als H1-Überschrift dargestellt werden könnte.

Legen Sie dazu in der Datenbanktabelle si_nodes ein neues Feld mit dem Namen cust_title an. Als Typ könnte ein varchar(255) für diesen Fall die richtige Wahl sein. Der Namen des Feldes ist prinzipiell frei wählbar, das Voranstellen von cust_ sollten Sie sich aber aus Gründen der Übersichtlichkeit und Update-Fähigkeit angewöhnen:

ALTER  TABLE  `si_nodes`  ADD  `cust_title` VARCHAR( 255  ) DEFAULT NULL ;

Als zweiten Schritt müssen Sie das neue Feld dem Simploo CMS bekannt machen. Ergänzen Sie dazu einfach den entsprechenden Eintrag in der config/system/base.ini.php in Ihrer config/custom/base.ini.php um den neu hinzugefügten Feldnamen:

[database]
tables.si_nodes.fields = "cust_title"

Sollten Sie mehrere benutzerdefinierte Datenbankfelder verwenden, trennen Sie diese bitte per Komma. Ganz zum Schluss sollten Sie das neue Datenbankfeld noch konfigurieren, um es entsprechend über das Simploo CMS pflegen zu können. Dies erledigen Sie in der config/custom/nodes.ini.php:

[Sicore_Models_Node_Page]
properties.cust_title.type = Sicore_Models_Node_Property_String
properties.cust_title.form.type = Zend_Form_Element_Text

subforms.general.fields = ..., cust_title
In der zweiten Zeile definieren Sie den internen Typ des Feldes, in der dritten Zeile die entsprechende Darstellung im Formular zur Pflege in der Seitenverwaltung. In der letzten Zeile wird dieses Formularelement dann unter dem entsprechendem Reiter (in diesem Beispiel der Reiter Allgemein bei den Seiteneigenschaften) eingehängt.