Simple Base is an open source CMS. You Simple Base? Support the Team with a coffee.



Das "Property Bag" einer AbstractPage-Seite

In Simple Base gibt es schon seit längerem ein sogenanntes "Property Bag", welches an jeder "Abstract Page" instance hängt. Das ist ein Array, welches dazu genutzt werden kann Informationen/Daten für eine bestimmte Seite zu speichern, ohne eigene Datenbank Tabellen erstellen zu müssen.

 

Der Aufruf ist ganz einfach:

 

isset($this->Properties->PropertyBag["MyPropertyBagKey"])

 

$myValue = $this->Properties->PropertyBag["MyPropertyBagKey"];

 

$this->Properties->PropertyBag["MyPropertyBagKey"] = "My Property Bag Value";
$this->Properties->PropertyBag->Update();

 

 

 

Man kann auch eigene Objekte serialisiert in dem Property Bag speichern, es sollte allerdings nicht zu viel in dem Property Bag gespeichert werden



Erstellen eines Packages: Pagelayout registrieren

Möchte man in seinem package ein neues Pagelayout registrieren, muss man dies - wie üblich - über eine XML-Datei machen. Die package.xml muss wie folgt definiert werden:

 

<package>
  <id>id.of.package</id>
  <name>Custom Package</name>
  <folder>CustomPackage</folder>
  <description></description>
  <version>0.0.0.1</version>
  <date>02.05.2014</date>
  <author>www.sb-websolutions.de</author>
  <authorurl>www.sb-websolutions.de</authorurl>
  <commands type="install">
    <command type="pagelayout">packages/CustomPackage/pagelayout.xml</command>
  </commands>
</package>

Das fertige TAR-Archiv schaut in der Ordnerstruktur wie folgt aus:

  • package.xml
  • packages
    • CustomPackage
      • pagelayout.xml

Die pagelayout.xml zum registrieren von einem oder mehreren Pagelayouts schaut dann wie folgt aus:

 

<?xml version="1.0" encoding="UTF-8"?>
<pagelayouts>
    <pagelayout>
        <name><![CDATA[Custom Pagelayout]]></name>
        <file>custom_layout.tpl</file>
        <description><![CDATA[Custom Pagelayout description]]></description>
    </pagelayout>
</pagelayouts>
Eigenschaft Wert/Typ Pflichtfeld Beschreibung
pagelayouts - Ja Stammelement
pagelayout - Ja Definiert ein einziges Pagelayout. Es können beliebig viele Pagelayouts unterhalb vom Stammknoten definiert werden.
name string Ja Anzeigename des Pagelayouts,...



Erstellen eines Packages: Benutzerrechte einfügen

Wenn man ein package erstellt, kann man mittels XML eigene Benutzerrechte einfügen, die dann über das ACP verwaltet werden können. Diese spezifischen Rechte können dann in Simple Base abgefragt/überprüft werden. Die package.xml muss wie folgt definiert werden:

<package>
  <id>id.of.package</id>
  <name>Custom Package</name>
  <folder>CustomPackage</folder>
  <description></description>
  <version>0.0.0.1</version>
  <date>02.05.2014</date>
  <author>www.sb-websolutions.de</author>
  <authorurl>www.sb-websolutions.de</authorurl>
  <commands type="install">
    <command type="userPermission">packages/CustomPackage/userPermission.xml</command>
  </commands>
</package>

 

Das fertige TAR-Archiv schaut in der Ordnerstruktur wie folgt aus:

  • package.xml
  • packages
    • CustomPackage
      • userPermission.xml

Die userPermission.xml zum definieren von einer oder mehreren Berechtigungen schaut dann wie folgt aus:

 

<?xml version="1.0" encoding="UTF-8"?>
<permissions>
  <permission>
    <key>CanDoSomething</key>
    <type>boolean</type>
    <defaultValue>0</defaultValue>
    <displayText><![CDATA[Can do something]]></displayText>
    <description><![CDATA[Can do something description]]></description>
    <permissionGroup><![CDATA[Group/Fieldset name]]></permissionGroup>
	<groupPermissionValues>
		<groupPermissionValue group="Administrator">1</groupPermissionValue>
	</groupPermissionValues>
 ...



Erstellen eines Packages: Neuen Navigationsknoten im ACP einfügen

Wenn man ein package erstellt, kann man mittels XML auch einen neuen Navigationsknoten im ACP einfügen. In der package.xml muss das Command wie folgt "referenziert" werden:

<package>
  <id>id.of.package</id>
  <name>Custom Package</name>
  <folder>CustomPackage</folder>
  <description></description>
  <version>0.0.0.1</version>
  <date>02.05.2014</date>
  <author>www.sb-websolutions.de</author>
  <authorurl>www.sb-websolutions.de</authorurl>
  <commands type="install">
    <command type="acpMenu">packages/CustomPackage/acpMenu.xml</command>
  </commands>
</package>

 

Das fertige TAR-Archiv schaut in der Ordnerstruktur wie folgt aus:

  • package.xml
  • packages
    • CustomPackage
      • acpMenu.xml

Die axpMenu.xml zum definieren von einem oder mehreren Knoten schaut dann wie folgt aus:

 

<?xml version="1.0" encoding="UTF-8"?>
<acpmenus>
  <acpmenu>
    <link>index.php?action=MyNewNavItem</link>
    <name>My New Nav Item</name>
    <parentID>0</parentID>
    <position>0</position>
  </acpmenu>
</acpmenus>

 

Eigenschaft Wert/Typ Pflichtfeld Beschreibung
acpmenus - Ja Stammelement.
acpmenu - Ja Definiert einen einzelnen Knoten. Es können beliebig viele Knoten definiert werden
link String Ja URL zur navigierenden Seite.
name String Ja Anzeigename des Knoten, man kann auch den Language-Key...



Caching in Simple Base

Vor kurzem wurde eine Caching-Funktion in Simple Base eingebaut. Das Cachen erfolgt in Dateien auf dem Server unter dem Ordner {Stammverzeichnis}/cache/sb

 

Die Cache-Klasse hat folgende Methoden:

 

 public static function Get($key, $delegateFunction = null)
{}

public static function Set($key, $value, $durationTime = 3600)
{}

public static function Clear($key)
{}

public static function ClearAll()
{}

Was genau welche Methode macht, ist wohl selbsterklärend:

Die Get-Methode: Mit einem eindeutigen Key kann man sich die Werte aus dem Cache holen. Über den zusätzlichen Parameter $delegateFunction kann man eine function mit angeben, die ausgeführt werden soll, wenn es noch kein Cache-Objekt mit diesem Key gibt. Wenn der Cache nicht mehr "gültig" ist ($durationTime aus der Set-Methode), wird automatisch die $delegateFunction ausgeführt bzw. null zurückgegeben.

Die Set-Methode: Damit kann man den Cache "setzen". Dazu den eindeutigen Key übergeben und den Wert, der gecached werden soll. Zusätzlich kann man "cachingzeit" angeben. Also sprich, wie lange der cache gültig ist und wann muss er neu "geholt" werden.

Die Clear-Methode: Löscht den Cache anhand eines eindeutigen Keys.

Die ClearAll-Methode: Sie sollte mit bedacht ausgeführt werden, denn diese löscht alle Dateien im {Stammverzeichnis}/cache/sb Ordner.

 

Hier ein kleines Beispiel, wie man den Cache auslesen + setzen kann, wenn dieser nicht vorhanden ist:

 

$cacheKey =...



Erstellen eines Packages

Wenn man ein Package erstellen will muss der Aufbau der Ordner usw. genauso sein wie der von Simple Base. Was so viel bedeutet wie, will man eine neue Page (z. B. Kontaktformular) als Package bereitstellen, so müsste der Orderaufbau wie folgt sein:

 

  • library
    • Pages
      • Contact.class.php
  • js
    • Pages
      • ContactPage.js
  • package.xml
  • packages
    • Contact
      • component.xml

 

In dem Übergeordneten/Stamm Ordner muss eine package.xml-Datei enthalten sein. Der Gesamte Ordnerinhalt muss dann als TAR-Packet bereitgestellt werden. Die XML-Dateien die in der package.xml Datei angegegen werden (sogenannte Commands), müssen in einem Unterordner unter dem {sbroot}/packages Ordner liegen. Die package.xml hat dabei folgenden aufbau:

 

<package>
  <id>id.of.package</id>
  <name>Custom Package</name>
  <folder>CustomPackage</folder>
  <description></description>
  <version>0.0.0.1</version>
  <>02.05.2014</date>
  <author>www.sb-websolutions.de</author>
  <authorurl>www.sb-websolutions.de</authorurl>
  <commands type="install">
    <command type="acpMenu">packages/CustomPackage/acpMenu.xml</command>
    <command type="userPermission">packages/CustomPackage/permissions.xml</command>
    <command type="pagelayout">packages/CustomPackage/pagelayouts.xml</command>
    <command type="masterpage">packages/CustomPackage/masterpage.xml</command>
    <command...



Sessions werden nicht gespeichert nach refresh/submit

Folgende Situation: Ich habe den Simple Base Installer fertiggestellt und bei mir hat es auch wunderbar funktioniert auf dem Windows 7 Rechner mit Xampp und PHP 5.4. Nun wäre es natürlich zu schön um wahr zu sein, wenn es auch noch wo anders Funktionieren würde (Stichwort "Running on my machine bug"). Beim Versuch Simple Base auf einem Webspace (Linux Server) zu installieren, hat es aber schon probleme gegeben.

Was war das Problem?
Das Problem war, dass man nach dem ersten Schritt, der Eingabe der Datenbankzugangsdaten, die Werte in eine Session-Variable speichert um diese später in der Datei zu schreiben. Wollte man den zweiten Schritt beenden und Simple Base installieren, ist man wieder bei Schritt 1 gelandet. Für mich war es gleich klar, es liegt an der Session. Überall durchgeschaut, nicht verstanden was es sein kann. Die Session liegt vorallem im Schritt 2 noch vor, nach einem Refresh aber nicht mehr. Das (gefühlte) ganze Internet danach abgesucht und nichts (brauchbares) gefunden. Auch das übergeben der SID hat nichts gebracht, genauso wie das aufrufen der Methode session_write_close und schon gar nicht das setzen von ini-Werten. Langsam aber sicher bin ich echt verzweifelt gewesen. Doch dann die Lösung...

Die Lösung: Bevor man etwas ausbibt (echo, reines HTML oder sonst was) muss man die Session starten (session_start()) da Sie sonst nicht gespeichert wird. Da der Installer aber den Header und den Footer immer ausgibt (im nicht PHP-Bereich), habe ich also...