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



Simple Base ist nun PHP 7.3 Ready

Lange hat es gedauert, aber nun wurde Simple Base endlich PHP 7.3 Kompatibel gemacht. Somit könnt ihr Simple Base mit der nächsten veröffentlichten Version ab der PHP Version 5.3 installieren :)

 

Übrigens: Simple Base selbst war bereits kompatibel. Nur Smarty, die verwendte Template Engine, war es nicht, zumindest nicht in der Version die SB verwendet hat




Vue.js ausprobiert mit einer "Breaking News"-Komponente als Beispiel. Integration in SB denkbar?

Ich hatte mir für ein Projekt Vue.js Framework (ausgesprochen wie "view") angeschaut und ausprobiert. Ich will nicht lange drum herum reden. Ich finde es Klasse! Es ist verdammt einfach die Anzeige auf dem Bildschirm anzupassen. Ich bin ja nun wirklich kein 100 Prozentiger "Frontendler" aber ich kenne mich ganz gut aus damit und es gibt kaum etwas - würde ich einfach mal behaupten - was ich nicht auch mit JavaScript bzw. jQuery hinbekomme. Deshalb verzeiht mir, wenn ihr bei meinen Vorgehen das ein oder andere "anders" oder vielleicht in euren Augen sogar "falsch" mache bzw. gemacht habe, aber - das möchte ich nochmals betonen - ich bin nun mal ein C# Entwickler.

 

Was ist der bisherige Ansatz gewesen?

Nehmen wir mal als Beispiel eine "Aufgabenliste". Diese Aufgabenliste soll im Browser angezeigt werden und dann auch noch gruppiert nach "neu", "in bearbeitung" und "erledigt". Dabei hat man entweder mit jQuery ein Array von Objekten aggregiert und diese in eine z. B. ul-li Liste eingebaut und dann im DOM gerendert oder ein Template Engine Framework verwendet um die Aufgaben darzustellen. Wenn der Benutzer dann den Status der Aufgabe (von Neu auf erledigt, in bearbeitung auf neu usw.) ändert oder eine neue Aufgabe anlegt, so war es in der Regel so, dass ein Event gegriffen hat, das Array mit den Objekten wurde verändert und die "Render"-Methode wurde wieder ausgeführt (Dabei wurde es z. B. am DOM direkt angehängt oder immer neu generiert).

 

Wie ist es mit...




CSS: Nummerierte Liste mit unterpunkten

Ich möchte euch heute einen kleinen CSS3 trick zeigen wie man automatisch nummerierte Listen (Ordered List <ol></ol>) mit unterpunkten oder unterüberschriften macht, so dass die auflistung mit 1, 1.1, 1.2, 1.2.1 usw. dargestellt wird. So wie z. B. in der Linken Navigation auf unseren Dokumentationsseiten.

 

Dazu einfach eine "normale" <ol><li> im HTML erstellen, wie z. B. hier:

 

<ol>
	<li>
		First
		<ol>
			<li>First child of first</li>
			<li>Second child of first</li>
		</ol>
	</li>
	<li>
		Second
		<ol>
			<li>
				First child of second
				<ol>
					<li>First child of second child</li>
					<li>Second child of second child</li>
				</ol>
			</li>
			<li>Second child of second</li>
		</ol>
	</li>
	<li>Third</li>
</ol>

 

Standardmäßig wird jeder Unterpunkt wieder bei "1" beginnen, was also zur Folge hat dass wir kein 1.1 hinbekommen z. B.. Dies sieht dann also so aus:

 

Um den Punkt "1. First child of first" auf "1.1 First child of first" zu ändern, greifen wir also nun mit CSS3 und dem :before Pseudo-Element ein. Dies schaut dann wie folgt aus:

 

ol {
    counter-reset: item;
    list-style: none;
}

ol li::before {
    content: counters(item,".",decimal) " ";
    counter-increment: item;
}

Dabei setzen wir den counter jedes mal zurück, zeigen den Standard listenstil (CSS-Attribut list-style) gar nicht mehr an und fügen mit dem CSS-Attribut "content" das Ganze wieder vorher ein, mit dem richtigen...




Preview: Neues ACP Design

Wie vor kurzem erst erwähnt, habe ich für die nächste Beta Version ein Re-Design für das Admin Control Panel (ACP) vorgesehen. Ich möchte nun kurz das neue Design zeigen. Meiner Meinung nach ist es sehr schick und modern geworden. Ich hoffe es gefällt euch ebenfalls (zum vergrößern bitte klicken):

 




SBW goes social

SB Websolutions ist nun auf den Sozialen Netzwerken Facebook und Twitter vertreten. Dabei liegt der Fokus allerdings auf Simple Base und eher weniger auf SBW, kann jeodch durchaus vorkommen, dass SBW spezifische Dinge erscheinen.

 

Auch neu seit heute: Unterstützung für das Team, damit Simpel Base weiterentwickelt wird. Dabei handelt es sich aus unserer Sicht um eine Recht coole Idee der websitenbetreiber von ko-fi.com

 

Was ist der Zweck?

Bei ko-fi.com kann man einer Person, einem Verein, einer website oder eben auch Simple Base einen "Kaffee" spenden. Dabei kostet "der Kaffee" 3 Euro und man kann beliebig viele Kaffees spenden. Dabei ist "der Kaffee" natürlich nur eine symbolische Leistung. Viel mehr handelt es sich um eine normale Spende.

 

Wir werden das Geld einerseits für das Hosting von SBW verwenden und für die Weiterentwicklung von Simple Base und zum anderen - wie soll es auch anders sein - für den Kaffee natürlich :)

 

Also bitten wir alle, die ein Vertrauen in Simple Base haben und es mögen uns zu unterstützen damit Simple Base erfolgreicher wird. Hier geht es zur Spendenaktion




Simple Base Dokumentation

Wie bereits angekündigt habe ich eine neue Seite angelegt für die Dokumentation zu Simple Base. Aktuell gibt es zwar nicht allzuviel Inhalt, doch ich werde mich bemühen dies nach und nach zu befüllen. Da es aktuell noch keine Möglichkeit gibt das ganze zu kommentieren, bitte ich alle Kommentare hier im Blog zu posten. Im späteren Verlauf wird es eine Kommentarmöglichkeit auf jeder (Dokumentations)Seite geben. Das Modul wird dann auch offiziell bereitgestellt in der Download-Datenbank. Dann kann es jeder herunterladen und auf einer Seite platzieren in einer Modulzone. Ich hoffe das die Dokumentation einigen behilflich sein wird.




Pläne für Simple Base Beta 7

Nachdem die Beta 6 nun offiziell veröffentlicht wurde, möchte ich natürlich weiter mit der Beta 7 fortsetzen.

 

In der neuen Version richtet sich wieder alles ans FrontEnd (also nicht das Admin Control Panel). Nach der Publizierung der Beta 6 sind einige Kleinigkeiten aufgefallen die ich gerne so schnell wie Möglich beheben will, diese möchte ich hier erwähnen:

 

  • HTML5 Doctype in der MasterPage einbinden.
  • BaseUrl setzen in der MasterPage.
  • Canonical URLs einbauen für Suchmaschinenoptimierung.
  • Diverse Designanpassungen.
  • Einige JavaScript Events sind "statisch" wie z. B. das Menü (Topnavigation) im Responsiven Design. Ich möchte dies etwas dynamischer machen, indem man dem Control nun Events mitgeben kann. Wenn keines angegeben wird, wird das Standard-Event verwendet. Damit lässt sich das Responsive Menü sehr leicht anpassen.
  • Dialog-Master und "Normale" Master sollen getrennt werden.
  • Sobald man eine neue Seite anlegt, muss geprüft werden ob eine Seite mit dieser URL schon existiert, wenn ja muss man eine andere URL verwenden.
  • Die Seiteneigenschaften müssen etwas optimiert werden, da man aktuell nicht genau weiß welche Titel, Beschreibung usw. verwendet werden.
  • Es soll möglich sein eine Seiten-URL im nachhinein zu ändern.
  • File Explorer für den WYSIWYG-Editor verbessern/erweitern.
  • Da das Installations-packet mittlerweile eine Dateigröße von >6MB hat, schaue ich ob es "altlasten" gibt die nicht mehr gebraucht werden und entferne diese dann, um...



Beta 6 wurde veröffentlicht

Soeben habe ich Simple Base in der Version 1.0.0.6 (Beta 6) veröffentlicht.

 

Auch die Demo läuft nun auf der Beta 6.

 

Herunterladen könnt ihr es wie gewohnt im Download-Bereich.
 




Neues Design

Wie bereits in meinem vorherigen Beitrag angekündigt, habe ich heute die SB Websolutions Seite auf Simple Base Beta 6 aktualisert. Im selben Zug habe ich einige kleinigkeiten am Blog und an der Download-Datenbank angepasst, die immer wieder angepasst werden, wenn ich zur Weiterentwicklung komme. Außerdem habe ich die SB Websolutions Seite mit dem neuen Design versehen.

Was haltet Ihr davon? Gefällt euch das neue Design? Schreibt eure Meinung als Kommentar in diesem Beitrag.

 

Simple Base Beta 6 wird übrigens demnächst auch offiziell veröffentlicht werden.

 

Außerdem werde ich nun auf SB Websolutions versuchen nach und nach neue Seiten anzulegen, die zur Dokumentation sowohl für die Entwickler als auch die Anwender dienen sollen. Damit haben die Anwender eine Hilfe bei der Bedienung und die Entwickler eine Hilfe für die Anpassung und Erweiterung von Simple Base.




Responsive Design: Meta Tag viewport für mobile Endgeräte

Vor längerer Zeit hatte ich eine statische HTML Seite zu Demo Zwecken erstellt. Diese Seite/Design sollte dann später in Simple Base eingeführt werden. Das Design war Responsive und hat auch auf den mobilen Endgeräten gut funktioniert.

 

Nun - circa 3 Monate später - habe ich das Deisgn in SB integriert. Die Breakpoints haben auch sehr gut gezogen, jedoch erstmal nur auf dem PC wenn man den Browser minimiert hatte. Auf den mobilen Endgeräten wurde die Seite einfach immer in der vollen Größe angezeigt. Habe alles erdenkliche versucht zu prüfen. Habe auch einen Designer zu Rate gezogen (ich bin ja keiner, sondern entwickler). Er wusste auch nicht genau woran es lag .- zumindest nicht auf die schnelle -  vor allem weil er auch nur die PC Breakpoints hernehmen konnte.

 

Dann habe ich es endlich gefunden. In den Head muss dann der meta tag mit dem Namen "viewport" eingefügt werden:

 

<meta name="viewport" content="width=device-width, initial-scale=1">

 

Und schon geht es auch auf den mobilen Endgeräten. Dieser Wert sagt einfach nur aus, dass nicht gezoomt bzw. rausgezoomt werden soll.




Wieder was gelernt...

Gestern habe ich Simple Base (Beta 6) auf einem Server installiert. Ich habe für einen Bekannten eine Website für seine Physiotherapie Praxis erstellt. Beim installieren wird natürlich der Datenbank Host gefragt. Den habe ich auch angegeben "localhost:3306" es ging zu Schritt zwei (normalerweise würde dies nicht gehen, wenn keine Verbindung zur Datenbank hergestellt werden konnte).

 

Beim letzten Schritt kam dann auf einmal ein Fehler. Irgendwas mit der SQL-Abfrage sei nicht korrekt. Was genau jedoch nicht korrekt war, hat der Server leider nicht ausgegeben. Habe hier und da versucht etwas zu machen, doch ich habe es einfach nicht geschafft.

 

Dann dachte ich mir, okay was solls, dann installiere ich es nicht sondern nehme die lokale Installation (über XAMPP) und exporiere/importiere die DB und kopiere alle Dateien über FTP auf den Server. Gesagt, getan! Dann noch schnell den CHMOD ändern für die Dateien, bevor ich es vergesse. Weil ich - zugegebenermaßen - zu faul war, habe ich einfach alle Ordner und Dateien auf CHMOD 0777 gestellt und dann die wichtigen Dateien wieder auf 0644. Und schon ging es, zumindest so halb :)

 

Beimn Aufruf der index.php gab es einen nicht wirklich verständlichen Fehler. In den Serverlogs habe ich dann was gefunden:

 

SoftException in Application.cpp:261: File "/public_html/index.php" is writeable by group

Hmmm, kurz gegoogelt, aaaaah okay.

 

The default file permission should be '0644'

 

Okay,...




Neue Version von SB, Neues Design, viele Veränderungen

Es ist seit längerem still im Blog geworden. Nun möchte ich einen kleines Update posten.

Im Hintergrund und im stillen wurde natürlich weiter an Simple Base entwickelt. Simple Base wird bald in der Version 1.0.0.0 Beta 6 Veröffentlicht. Die neue Version wird übrigens bald auch in einem Projekt eingesetzt, eine Praxis für Physiotherapie von einem Bekannten von mir.

 

Es gab einige Anpassungen, Verbesserungen und Erweiterungen. Einer der größten Verbesserungen ist das Package System. Vorher wurden die Packages über XML-Definiert und alle darin registrierten Module, Komponenten, Controls usw. in der Datenbank abgelegt. Mittlerweile werden fast alle dieser Definitionen zwar weiterhin in XML beschrieben, jedoch nicht mehr in die Datenbank gespeichert. Stattdessen werden die XML Definitionen aus dem packages Ordner herangezogen für die aggregation der Daten. Dies wird jedoch vorher gecached. Der Vorteil ist der, dass man sich keine Gedanken machen muss, was genau man bei einem Update/Deinstallieren machen muss. Es wird einfach immer die aktuell gültige package.xml herangezogen. Außerdem spart man sich einige Datenbank Tabellen.

 

Auch ein großer Vorteil, vor allem während der Entwicklung: man kann einfach direkt die package.xml bearbeiten, den cache leeren und schon sind die Änderungen gültig. Man muss kein TAR-Archiv schnürren und auch kein Update des Packages durchführen.

 

Es wurden auch einige kleinere Anpassungen/Verbesserungen gemacht, wie z. B. am...




Textinhalt der Seite ganz einfach ändern/anpassen

​Oft muss man einen Text zum testen verändern, um zum Beispiel zu schauen was mit dem Design passiert, wenn man ewig langen Text eingibt.

Dies kann man natürlich auch über die Developer-Toolbar, FireBug und was es da sonst noch so gibt machen. Einfach mit dem Picker ein Element auswählen und das HTML bzw. den Text ändern.

 

Doch es geht noch leichter:

 

document.designMode = "on";

 

Wenn man diese kleine Codezeile in die Konsole der Developer-Toolbar, FireBug etc. ausführt, wird jeder Text der Seite änderbar, so als wäre es ein RTE (bloß eben ohne das Rich). Man kann aber wohl auch contentEditable="true"

 

Hinweis: Die Änderung gilt natürlich nur temporär. Nach einem refresh der Seite ist alles so wie es war.

 

Das funktioniert übrigens auch im IE9, jedoch wohl nicht, wenn die Seite im IE8er Modus läuft. Es gibt auch die Möglichkeit mit

document.body.contentEditable = true;

 

den Text zu ändern. Der Unterschied ist allerdings, dass document.designMode das komplette Dokument bearbeitbar macht, während contentEditable ein einzelnes/spezifisches Element und die Knoten darunter editierbar macht (in dem Beispiel oben ist das spezifische Element eben document.body).

 

Hier noch ein Bild wie es funktioniert bzw. ausschaut (nicht von mir):




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: Masterpage registrieren

Genau so wie beim registrieren des Pagelayouts, kann man in seinem package eine neue Masterpage registrieren. Der Aufbau der XML-Datei ist ähnlich wie der Aufbau der XML-Datei zum registrieren des Pagelayouts. 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="masterpage">packages/CustomPackage/masterpage.xml</command>
  </commands>
</package>

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

  • package.xml
  • packages
    • CustomPackage
      • masterpage.xml

Die masterpage.xml zum registrieren von einem oder mehreren Masterpages schaut dann wie folgt aus:

 

<?xml version="1.0" encoding="UTF-8"?>
<masterpages>
    <masterpage>
        <name><![CDATA[Custom Masterpage]]></name>
        <file>customMaster.tpl</file>
        <description><![CDATA[Custom Masterpage Description]]></description>
    </masterpage>
</masterpages>
Eigenschaft Wert/Typ Pflichtfeld Beschreibung
masterpages - Ja Stammelement
masterpage - Ja Definiert eine einzige Masterpage. Es können beliebig viele Masterpages unterhalb vom Stammknoten...



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,...



Simple Base Beta 5 ist veröffentlicht

Nun ist es endlich geschafft. Nicht nur SB-Websolutions ist auf die Beta 5 umgestiegen, mit neuem Design und einigen Veränderungen. Nein, nun ist auch Simple Base offiziell in der Version 1.0.0.0 Beta 5 verfügbar und steht zum Download bereit. Habt spaß damit und gibt uns auch Feedback über die Kommentar-Funktion.

 

DOWNLOADEN




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 =...