Facebook
Twitter
Google+
Kommentare
12

Hands On Silverstripe

PHP5, Objekt-Relationales-Mapping, MVC-Architektur? Das klingt auf den ersten Blick nicht unbedingt nach Eigenschaften, die ein CMS interessant machen. – Und in der Tat, verglichen mit den Platzhirschen im Content Management Revier, bringt Silverstripe standardmäßig nur die Basis-Austattung für die Verwaltung von Inhalten mit.

  • Verwaltung von textuellem Inhalt mit Rich Text Editor, Versionierung und Drafts (Entwürfen)
  • Verwaltung von Bildern (inkl. automatischem Resizing)
  • Hinzufügen, löschen und umarrangieren von Seiten
  • Datei-Management
  • Tagging für die Kategorisierung von Seiten
  • „Schöne“ URLs
  • Meta Daten einstellbar für jede einzelne Seite
  • Optionale Kommentarfunktion für jede Seite

Jeder, der jedoch schon mal an WordPress herumgebogen hat, um ihm eine Funktionalität zu entlocken, die eine Blog-Engine eigentlich nicht unbedingt haben muss, weiss, dass heute auch kleine Seiten weit mehr als nur Inhaltsverwalter benötigen.

Genau das ist die Lücke, in die Silverstripe vorstößt: es bietet ein schlankes System mit gut ausgebauten Basisfunktionen und definiertem Raum für das Implementieren eigener Anwendungslogik. Das ist nicht dasselbe wie die Plugins-Schnittstelle in WordPress oder Extensions in Typo3. Das ist eher eine objektorientierte Version der functions.php Datei, die es in WordPress ermöglicht, Funktionalität für das aktuelle Theme zu hinterlegen.

Im Gegensatz zu Systemen wie Typo3, geht es hier also nicht darum, Redakteuren vollkommene Freiheit bei der Gestaltung aller Seiten zu ermöglichen. Der Ansatz ist viel mehr die Bereitstellung definierter Seitentypen durch den Entwickler. Seiten im CMS erben dann quasi von diesen Seitentypen und können durch den Redakteur mit Inhalt befüllt und arrangiert werden.

Das besondere daran? Es ist von vornherein vorgesehen, dass Seitentypen Geschäftslogik kapseln können – ohne dass erst Extensions oder Plugins geschrieben werden müssen (das geht natürlich trotzdem). Diese Geschäftslogik ist dann die Funktionalität, die der Seite im CMS über den reinen Inhalt hinaus zur Verfügung stellen kann.

Ein Beispiel?

Jeder Seitentyp in Silverstripe besteht aus einer Model Klasse für die Definition der Datenfelder, die es auf dieser Art von Seite geben soll, einer Controller Klasse für die Funktionalität und einem dazugehörigen Template.
Legt man in einem jungfräulichen Silverstripe eine Seite an, so ist diese vom Typ Page.


class Page extends SiteTree {
public static $db = array(
);
public static $has_one = array(
);
}

class Page_Controller extends ContentController {...}

Damit hat man eigentlich schon alles, was man braucht, um loszulegen. Das Page Model bietet ein Textfeld für eine Überschrift und einen Rich Text Editor für ein Textfeld.

Spannend wird es, sobald man das erweitern möchte. Soll eine Page jeweils noch ein Bild ausserhalb des Textfelds bereitstellen, fügt man es im Model hinzu. Zum einen wird das Datenfeld mit dem Eintrag im Array $has_one definiert und zum anderen wird in der Methode getCMSFields() definiert, wo und unter welchem Namen das zusätzliche Feld auftauchen soll. Hier wird ein zusätzlicher Tab mit dem Namen MainImage erstellt.


class HomePage extends SiteTree {
static $db = array(
);
static $has_one = array(
'MainImage' => 'Image',
);
function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab("Root.Content.MainImage", new ImageField('MainImage', 'Image'));
return $fields;
}
}

Es gibt ein außerordentlich gutes Tutorial, das in drei Teilen (das sind drei Links…) erklärt, wie man auf diese Art und Weise eine Website mit Basisfunktionalitäten gut umsetzen kann. Heraus kommt dann beispielsweise so etwas.

Ein CMS als Anwendungs-Laufzeit

Viel interessanter ist jedoch der Umstand, dass alle public Methods einer Controller Klasse zum einen im Template der entsprechenden View zur Verfügung stehen, zum anderen aber auch direkt über eine URL ansprechbar sind. Hier beginnt der eigentlich spannende Teil, denn so steht der Implementierung eigener Anwendungslogik nichts mehr im Weg.


class Page_Controller extends ContentController {
public function hello(){
echo „Hello World“;
}
}

Obiges Beispiel erweitert jede Seite vom Typ Page um die Funktionalität Hallo zu sagen. Das ist nicht besonders spannend? Dann könnte man statt Hallo ja auch mehrstufige Formular-Workflows implementieren oder Webservices ansprechen (es gibt sogar Ansätze Rails und Silverstripe miteinander zu verknüpfen).

Je mehr eigene Funktionalität man auf diese Art implementiert, desto mehr rückt das unter Silverstripe liegende Framework Sapphire in den Vordergrund und hier offenbart sich die weniger starke Seite von SIlverstripe. Nicht nur, dass Sapphire die eine oder andere diskussionsfähige Designentscheidung zu Grunde liegt und man darüber streiten kann, ob und wie viel statische Klassen mit Objektorientierung zu tun haben, am Ende des Tages bleibt Sapphire ein weiteres umfangreiches Custom-Framework.

Ralf Eggert hat hier schon einmal alles gesagt, was es in meinen Augen zu diesem Themenkomplex zu sagen gibt.

Als bei uns der Ernstfall eingetreten ist und wir Silverstripe als Anwendungs-Plattform genutzt haben, haben wir jedenfalls relativ schnell von Sapphire Abstand genommen und das Zend Framework hineingebastelt. – Glücklicherweise bietet SIlverstripe ja ausreichend Schnittstellen für so etwas.

Über den Autor

Alexander Thomas

Kommentare

12 Comments

  1. Schöner Artikel und macht wirklich sehr neugierig.
    Jedoch fehlte bis jetzt leider die Zeit sich das genauer anzuschauen. Sollte mir die Zeit aber doch lieber nehmen.

    Etwas irreführend fand ich die drei Link zu dem Tutorial. Wieso hast du den drei Links gesetzt, schließlich sind die einzelnen Teile miteinander verlinkt. 😉

    Reply
  2. Ich habe den Artikel nur überflogen, da ich derzeit kein Interesse habe an einem CMS 🙂

    Aber ein paar Dinge fallen mir direkt auf. Die Features sind doch recht ähnlich wie die Windows SharePoint Services. Das Admininterface ist nicht benutzbar, weil es einfach überladen ist.

    Sollte heute jemand ein CMS suchen, scheint Simploo CMS http://www.simploo.de das passendere zu sein, sowohl für Redakteure als auch Entwickler, da dort direkt das Zend Framework als Basis verwendet wurde.

    Reply
  3. Als ich mich für den Einsatz von Silverstripe entschieden habe, wusste ich, dass es sich um eine simple Webseite handelt und es auch eine solche bleiben würde. Ich bin sehr zufrieden, sowohl mit der Definition eigener Seitentypen, als auch mit dem Aufwand sich dort einzuarbeiten. Letzterer ist echt überschaubar.

    Vor allem die Administrationsoberfläche finde ich ganz gelungen und kann da meinen Vorredner nicht verstehen. Natürlich rückt die Frage nach der Qualität einer Systemarchitektur dann in den Mittelpunkt, wenn man mit einem solchen CMS etwas mehr anstellen will. Grundsätzlich kann man also Silverstripe an der Stelle also auch nicht als schlecht brandmarken.

    Viele Grüße
    Tobi

    Reply
  4. Ich kann Tobi nur zustimmen. Auf den ersten Blick scheint Simploo CMS auch nicht so „simple“ zu sein, außerdem ist es für kommerzielle Projekte nicht kostenlos. Mit Silverstripe und dem darunterliegenden Sapphire Framework kann man ohne größeren Aufwand und recht objektorientiert Vieles ermöglichen. Zusätzlich bietet es viele kleine Helfer, wie ORM (Datenbank ist als Klasse gemappt), Scaffolding (ähnlich wie Ruby on Rails), Consolentools und viele Addons, die einem die Arbeit erleitern. Aus diesen Gründen kann man auch größere Webseiten mit Silverstripe realisieren. Mehr Infos gibts hier: http://www.silverstripe.org, http://www.silverstripes.de und http://www.ssbits.com

    Viele Grüße, Björn

    Reply
  5. @Kaiuwe Die Templatesprache ist noch mal ein ganz eigenes Kapitel. Ich frage mich das auch. Vorallem, weil es tatsächlich wichtige Features gibt, die nicht funktionieren: das Aufrufen von Funktionen mit dynamischen Parametern zum Beispiel!

    Reply
  6. „…haben wir jedenfalls relativ schnell von Sapphire Abstand genommen und das Zend Framework hineingebastelt.“
    mich würde sehr interessieren wie das im detail aussieht. wurde zend zum rendering verwendet? wie kommt zend an die daten – direkt über die db? würde mich freuen wenn dazu noch ein paar worte schreiben könntest.
    beste grüße, max

    Reply
  7. So nett ich das backend von silverstripe (und die damit vorhandenen möglichkeiten liebe) das frontend templating spotet jeder beschreibung.

    diese ganzen regexps die über die templates gejagt werden sind echt ein kraus… hab schon mal ein paar stunden investiert um SS mit smarty zu verheiraten, zig helper methoden dafür geschrieben, aber wirklich rund lief das auch nicht.

    Aber Silverstripe ist ja noch jung, mal sehen was die zukunft bringt.

    Reply
  8. Mag sein, dass SS so einiges kann. Aber nicht wirklich etwas, dass andere nicht auch könnten. Die sind gut im Marketing aber gut heiße Luft verkaufen, das können heutzutage auch andere gut.

    Doch mal ehrlich Leute: warum sollte ich einem Framework vertrauen, dass seine elementaren Hausaufgaben nicht macht und solche Sachen, wie im Artikel
    beschrieben (und andere) vera(u)nstaltet? Wenn man etwas „verkaufen“ will, muss man zumindest die grundlegenden Dinge beachten.

    Lessons not learned, oder wie der Rheinländer sagt: die haben den Knall nicht gehört.

    Reply
  9. Die Template Sprache finde ich persönlich besser gelungen als die von Smarty. Ob man so viele Statische Funktionen verwenden sollte, ist fraglich. Aber denn noch kann man mit SilverStripe in relativ kurzer Zeit sehr komplexe Sachen anstellen. Es gibt dazu glaube ich auch ein Buch, wo mit nur 300 Zeilen Code eine komplette Jobbörse mitsamt Einbindung in Backend realisiert wurde.
    Alles in allem finde ich SilverStripe nicht wirklich schlecht, da sich meiner Meinung nach mit kaum einem Konkurrenz Produkt so schnell hochwertige Erfolge erzielen lassen!

    Reply
  10. Nutze SilverStripe schon seit einiger Zeit, habe mir auch das Buch zu gelegt.
    Kann es nur jedem empfehlen, der mal fix eine kleine Seite aufsetzen möchte. Das Ding ist schlank und mächtig zu gleich und im Backend sollte jeder DAU zurecht kommen.

    Schade ist nur, dass die Community derzeit etwas klein ist, doch sie ist stetig am wachsen.

    Für größere Projekte lohnt sich Typo3 dann doch mehr, zumindest hat man da dann nicht so einen Aufwand. SilverStripe rockt. 😉

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen