<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Themen</title>
		<link>http://www.thoma.info/home/themen/</link>
		<atom:link href="http://www.thoma.info/home/themen/" rel="self" type="application/rss+xml" />
		<description></description>

		
		<item>
			<title>Browser-Kompatibilität von CSS3-Schriftarten</title>
			<link>http://www.thoma.info/home/themen/browser-kompatibilitaet-von-css3-schriftarten/</link>
			<description>&amp;lt;p&amp;gt;Um auf der Webseite CSS3-Schrifarten verwenden zu können, muss jede zu verwendende Schriftart im CSS definiert werden. Um die korrekte Schriftart jedoch in möglichst vielen Browsern korrekt darzustellen, müssen einige Dinge beachtet werden. Im Folgenden wird die Kompatibilität und Verwendung erklärt.&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;Browser-Kompatibilität&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;@font-face&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Die Definition @font-face wird von folgenden Browsern unterstützt:&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Internet Explorer 4+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Mozilla Firefox 3.5+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Google Chrome 4+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Safari 3.1+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Opera 10+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;Damit sind alle aktuell verwendeten Browser abgedeckt.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Bei den Schriftarten-Dateien ist es mit der Kompatibilität etwas komplizierter:&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;WOFF-Schriftarten&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Internet Explorer 9+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Mozilla Firefox 3.6+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Google Chrome 6+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Opera 11.1+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;OpenType-Schriftarten&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Mozilla Firefox 3.5+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Google Chrome 4+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Safari 3.1+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Opera 10+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;iOS Mobile Safari 4.2+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;TrueType-Schriftarten&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt; &amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Internet Explorer 9+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Mozilla Firefox 3.5+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Google Chrome 4+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Safari 3.1+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Opera 10+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;iOS Mobile Safari 4.2+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;EOT-Schriftarten&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt; &amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Internet Explorer 4+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;SVG-Schriftarten&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt; &amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Google Chrome 4+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Safari 3.1+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Opera 10+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;iOS Mobile Safari 3.2+&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;Das heisst, dass man in der Praxis WOFF, TrueType (oder OpenType), EOT und SVG Schriftarten verwenden sollte um möglichst viele Browser abzudecken.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Folgende Browser werden jedoch gar nicht unterstützt:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Firefox &amp;amp;lt; 3.5 (herausgegeben am 30.06.2009, heute verfügbar: 5.0)&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Chrome &amp;amp;lt; 4.0 (herausgegeben am 25.01.2010, heute verfügbar: 12.0)&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Safari &amp;amp;lt; 3.1 (herausgegeben am 18.03.2008, heute verfügbar: 5.0)&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Opera &amp;amp;lt; 10 (herausgegeben am 01.09.2009, heute verfügbar: 11.5)&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;Je nachdem welche Schriftarten vorhanden sind oder man aus rechtlichen Gründen verwenden darf, wird die Unterstützung recht schwiereig. Wenn beispielsweise nur die Formate WOFF und EOT vorhanden sind, werden folgende Browser nicht unterstützt:&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Opera &amp;amp;lt; 11.1 (herausgegeben am 12.04.2011)&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Safari alle Versionen inkl. iOS mobile Safari&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Chrome &amp;amp;lt; 6.0 (herausgegeben am 02.09.2010)&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Firefox &amp;amp;lt; 3.6 (herausgegeben am 21.01.2010)&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;h2&amp;gt;Definition&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Jede Schriftart wird doppelt mit verschiedenen Schriftarten-Dateien definiert, um die Schriftart in allen Browsern korrekt anzeigen zu können.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Nachfolgend eine Beispiels-Definition einer Schriftart „TestSchriftRegular“:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;@font-face {&amp;lt;br/&amp;gt;    /* Diese Deklaration spricht den Internet Explorer an */&amp;lt;br/&amp;gt;    font-family: &amp;quot;TestSchriftRegular&amp;quot;;&amp;lt;br/&amp;gt;    src: url(&amp;quot;TestSchrift-Regular.eot&amp;quot;);&amp;lt;br/&amp;gt;}&amp;lt;br/&amp;gt;@font-face {&amp;lt;br/&amp;gt;    /* Diese Deklaration spricht alle anderen Browser an */&amp;lt;br/&amp;gt;    font-family: &amp;quot;TestSchriftRegular&amp;quot;;&amp;lt;br/&amp;gt;    src:    url(//:) format(&amp;quot;no404&amp;quot;), &amp;lt;br/&amp;gt;            url(&amp;quot;TestSchrift-Regular.woff&amp;quot;) format(&amp;quot;woff&amp;quot;), &amp;lt;br/&amp;gt;            url(&amp;quot;TestSchrift-Regular.ttf&amp;quot;) format(&amp;quot;truetype&amp;quot;), &amp;lt;br/&amp;gt;            url(&amp;quot;TestSchrift-Regular.svg#TestSchriftRegular&amp;quot;) format(&amp;quot;svg&amp;quot;);&amp;lt;br/&amp;gt;    font-weight: normal;&amp;lt;br/&amp;gt;    font-style: normal;&amp;lt;br/&amp;gt;}&amp;lt;/pre&amp;gt;&amp;lt;h2&amp;gt;Verwendung&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Nachdem die obige Definition eingefügt wurde, kann im CSS die definierte Schriftart ganz normal verwendet werden:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;h1 {&amp;lt;br/&amp;gt;    font-family: TestSchriftRegular, Arial, sans-serif;&amp;lt;br/&amp;gt;}&amp;lt;/pre&amp;gt;&amp;lt;h2&amp;gt;Konfiguration&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Die Mime-Typen für die Schriftarten-Dateien müssen im Webserver konfiguriert werden.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Folgende Mime-Typen müssen konfiguriert werden:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;.woff       application/x-font-woff&amp;lt;br/&amp;gt;.eot        application/vnd.ms-fontobject&amp;lt;br/&amp;gt;.ttf        application/x-font-ttf&amp;lt;br/&amp;gt;.otf        application/x-font-opentype&amp;lt;br/&amp;gt;.svg        image/svg+xml&amp;lt;/pre&amp;gt;</description>
			<pubDate>Wed, 13 Jul 2011 02:20:18 +0200</pubDate>
			
			
			<guid>http://www.thoma.info/home/themen/browser-kompatibilitaet-von-css3-schriftarten/</guid>
		</item>
		
		<item>
			<title>Silverstripe: RSS-Feed auf allen Seiten anzeigen</title>
			<link>http://www.thoma.info/home/themen/silverstripe-rss-feed-auf-allen-seiten-anzeigen/</link>
			<description>&amp;lt;p&amp;gt;In der &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/sapphire/en/reference/rssfeed&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Silverstripe-Dokumentation &amp;lt;/a&amp;gt;wird beschrieben, wie man das Link-Tag für einen RSS-Feed auf einer Seite ausgibt. Um dieses Tag aber auf allen Seiten eines Auftritts auszugeben, braucht es ein paar Anpassungen.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Als Beispiel nehme ich hier ein News-Modul, das für die Übersichtsseite den Seitentyp NewsOverview und für die einzelnen Einträge NewsPage verwendet.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Um das Link-Tag für den RSS-Feed auf allen Seiten ausgeben zu können, muss die in der Dokumentation beschriebene Methode init() generalisiert und auf alle Seiten erweitert werden. Dazu wird eine Extension für den Page_Controller implementiert, der für jede Instanz des Seitentyps NewsOverview ein Link-Tag generiert:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;class NewsRssExtension extends Extension{&amp;lt;br/&amp;gt;    function onBeforeInit(){&amp;lt;br/&amp;gt;        $aOverviewPages = DataObject::get(&amp;quot;NewsOverview&amp;quot;);&amp;lt;br/&amp;gt;        foreach($aOverviewPages as $page) { &amp;lt;br/&amp;gt;            RSSFeed::linkToFeed($page-&amp;amp;gt;Link(&amp;quot;rss&amp;quot;), $page-&amp;amp;gt;Title.&amp;quot; as RSS feed&amp;quot;);&amp;lt;br/&amp;gt;        }&amp;lt;br/&amp;gt;    }&amp;lt;br/&amp;gt;}&amp;lt;/pre&amp;gt;&amp;lt;p&amp;gt;Diese Extension wird in der Datei _config.php dem Page_Controller angehängt:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;Object::add_extension(&amp;#39;Page_Controller&amp;#39;,&amp;#39;NewsRssExtension&amp;#39;);&amp;lt;/pre&amp;gt;&amp;lt;p&amp;gt;In der Klasse NewsOverview_Controller wird (wie in der Silverstripe-Dokumentation beschrieben) die rss-Methode integriert, welche die Newseinträge ausgibt:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;class NewsOverview_Controller extends Page_Controller {&amp;lt;br/&amp;gt;    &amp;lt;br/&amp;gt;    function rss() {&amp;lt;br/&amp;gt;        $rss = new RSSFeed($this-&amp;amp;gt;NewsItems(10), $this-&amp;amp;gt;Link(), $this-&amp;amp;gt;Title, null, &amp;quot;Title&amp;quot;, &amp;quot;Content&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;LastEdited&amp;quot;);&amp;lt;br/&amp;gt;        $rss-&amp;amp;gt;outputToBrowser();&amp;lt;br/&amp;gt;    }&amp;lt;br/&amp;gt;    &amp;lt;br/&amp;gt;    function NewsItems($limit = 0) {&amp;lt;br/&amp;gt;        $curChildren = $this-&amp;amp;gt;AllChildren(); &amp;lt;br/&amp;gt;        if ($curChildren) {&amp;lt;br/&amp;gt;            $curChildren-&amp;amp;gt;sort(&amp;#39;Date&amp;#39;, &amp;#39;DESC&amp;#39;);&amp;lt;br/&amp;gt;            if ($limit &amp;amp;gt; 0) {&amp;lt;br/&amp;gt;                $curChildren = $curChildren-&amp;amp;gt;getRange(0,$limit);&amp;lt;br/&amp;gt;            }&amp;lt;br/&amp;gt;        }&amp;lt;br/&amp;gt;        return $curChildren;&amp;lt;br/&amp;gt;    }&amp;lt;br/&amp;gt;}&amp;lt;/pre&amp;gt;&amp;lt;p&amp;gt;Mit dieser kleinen Anpassung können nun alle Feeds des Auftritts auf allen Seiten abonniert werden.&amp;lt;/p&amp;gt;</description>
			<pubDate>Tue, 22 Feb 2011 11:40:42 +0100</pubDate>
			
			
			<guid>http://www.thoma.info/home/themen/silverstripe-rss-feed-auf-allen-seiten-anzeigen/</guid>
		</item>
		
		<item>
			<title>Silverstripe: lokalisierte Datums-Ausgabe</title>
			<link>http://www.thoma.info/home/themen/silverstripe-lokalisierte-datums-ausgabe/</link>
			<description>&amp;lt;p&amp;gt;Silverstripe und die meinsten Module verwenden die Methode Nice() der Klassen Date und Datetime zur Ausgabe des Datums. Das Problem mit diesen Funktionen ist, dass sie das Datum jeweils im  Neuseeländischen Format ‘d/m/Y’ respektive ‘d/m/Y g:ia’ ausgeben,  anstatt das in der Konfiguration hinterlegte Datumsformat zu verwenden.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;In der Konfiguration (/mysite/_config.php) können das Zeit- und Datums-Format folgendermassen definiert werden:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;// Set the site locale&amp;lt;br/&amp;gt;i18n::set_locale(&amp;#39;de_DE&amp;#39;);&amp;lt;br/&amp;gt;i18n::set_date_format(&amp;#39;dd.MM.YYYY&amp;#39;);&amp;lt;br/&amp;gt;i18n::set_time_format(&amp;#39;HH:mm&amp;#39;);&amp;lt;/pre&amp;gt;&amp;lt;p&amp;gt;Um nun diese Formate bei der Ausgabe zu verwenden, habe ich folgende Klassen geschrieben:&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;/mysite/code/LocaleDate.php:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;class LocalDate extends Date {&amp;lt;br/&amp;gt;    function Nice() {&amp;lt;br/&amp;gt;        require_once &amp;#39;Zend/Date.php&amp;#39;;&amp;lt;br/&amp;gt;        if($this-&amp;amp;gt;value) {&amp;lt;br/&amp;gt;            $sDate  = new Zend_Date($this-&amp;amp;gt;value);&amp;lt;br/&amp;gt;            return $sDate-&amp;amp;gt;toString(i18n::get_date_format());&amp;lt;br/&amp;gt;        } else {&amp;lt;br/&amp;gt;            return &amp;quot;&amp;quot;;&amp;lt;br/&amp;gt;        }&amp;lt;br/&amp;gt;    }&amp;lt;br/&amp;gt;}&amp;lt;br/&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;p&amp;gt;/mysite/code/LocaleDatetime.php:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;class LocalDatetime extends SS_Datetime {&amp;lt;br/&amp;gt;    function Nice() {&amp;lt;br/&amp;gt;        require_once &amp;#39;Zend/Date.php&amp;#39;;&amp;lt;br/&amp;gt;        if($this-&amp;amp;gt;value) {&amp;lt;br/&amp;gt;            $sDate  = new Zend_Date($this-&amp;amp;gt;value);&amp;lt;br/&amp;gt;            return $sDate-&amp;amp;gt;toString(i18n::get_date_format().&amp;quot; &amp;quot;.i18n::get_time_format());&amp;lt;br/&amp;gt;        } else {&amp;lt;br/&amp;gt;            return &amp;quot;&amp;quot;;&amp;lt;br/&amp;gt;        }&amp;lt;br/&amp;gt;    }&amp;lt;br/&amp;gt;}&amp;lt;br/&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;p&amp;gt;Um diese Klassen zu verwenden, müssen sie in der Konfiguration entsprechend eingetragen werden:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;// use custom class for date display&amp;lt;br/&amp;gt;Object::useCustomClass(&amp;#39;Date&amp;#39;, &amp;#39;LocalDate&amp;#39;, true);&amp;lt;br/&amp;gt;Object::useCustomClass(&amp;#39;SS_Datetime&amp;#39;, &amp;#39;LocalDatetime&amp;#39;, true);&amp;lt;br/&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;p&amp;gt;Dies bewirkt, dass meine Klassen bevorzugt verwendet werden und das  Datum bei der Ausgabe im entsprechenden lokalisierten Format ausgegeben  wird.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Falls jemand eine schönere Lösung dieses Problem kennt, würde ich mich über Kommentare freuen.&amp;lt;/p&amp;gt;</description>
			<pubDate>Wed, 08 Dec 2010 15:08:32 +0100</pubDate>
			
			
			<guid>http://www.thoma.info/home/themen/silverstripe-lokalisierte-datums-ausgabe/</guid>
		</item>
		
		<item>
			<title>WCMS-Review: Silverstripe</title>
			<link>http://www.thoma.info/home/themen/wcms-review-silverstripe/</link>
			<description>&amp;lt;p&amp;gt;Nach langem Suchen habe ich endlich das CMS meiner Wahl gefunden: &amp;lt;a href=&amp;quot;http://www.silverstripe.org/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Silverstripe&amp;lt;/a&amp;gt;. Gebaut für PHP5 und MySQL basiert Silverstripe auf einem gelungenen MVC-Framework, das dem Entwickler sehr viele Freiheiten lässt und ihn optimal in seinen alltäglichen Arbeiten unterstützt.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Mit der Veröffentlichung der Version 2.0 in Februar 2007 beschloss das Entwicklerteam, Silverstripe 2.0 nicht mehr kommerziell anzubieten, sondern unter die liberale BSD-Lizenz zu stellen. Daraufhin wurde Silverstripe ein GSOC-(Google Summer of Code)-Projekt des Jahres, was dem Programm sehr gut bekommen ist.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Noch ist die Entwicklergemeinde nicht so gross wie bei anderen, bekannteren Systemen, doch gewinnt Silverstripe immer mehr an Beliebtheit.&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;CMS für Entwickler&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Silverstripe unterscheidet sich in vielen Ansätzen von anderen Systemen. Das gesamte Framework ist komplett objektorientiert aufgebaut. Nicht so bewanderte Anwender dürfte dies abschrecken, doch für uns Entwickler ist das der Himmel auf Erden. Wann immer man etwas anders haben will als es der Standard bietet, schreibt man seine eigene Kind-Klasse und überschreibt die entsprechende Methode oder man schreibt eine Extension, welche einer Klasse zusätzliche Funktionalität verleiht.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Das Template-System ist relativ einfach gehalten – und das im besten Sinne. Es gibt nicht unübersichtich viel Logik in den Templates oder gar eine eigene Template-Skript-Sprache, sondern &amp;lt;a href=&amp;quot;http://doc.silverstripe.org/built-in-page-controls&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;einige wenige Kontroll-Strukturen&amp;lt;/a&amp;gt;, mit welchen sich die Logik der dahinter liegenden Klassen problemlos abbilden lässt.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Die Rechtevergabe erfolgt sehr praxisnah über Rollen und Gruppen. Die Berechtigungen lassen sich sehr einfach und sehr detailliert in der Backend-Oberfläche vergeben.&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;CMS für Autoren&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Auf den ersten Blick könnte man meinen, Silverstripe sei etwas simpel gehalten, denn die Benutzeroberfläche ist sehr übersichtlich und einfach aufgebaut. Doch die Administrationoberfläche ist sehr mächtig und wird durch die verschiedenen Module und Erweiterungen noch mächtiger. Der Autor sieht immer nur diejenigen Teile, auf welche er Berechtigung hat und kann die textuellen Inhalte mithilfe des WYSIWYG-Editors &amp;lt;a href=&amp;quot;http://tinymce.moxiecode.com/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;TinyMCE &amp;lt;/a&amp;gt;bearbeiten. Meiner Meinung nach sollte sich jeder einigermassen Computer-Freundliche Autor in der Silverstripe-Administration zurechtfinden.&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;Erweiterungen&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Um eine einfache Webseite mit reinen Textseiten zu implementieren braucht man eigentlich nicht mehr als das was im Standard-Installationspackage daherkommt. Wenn man aber etwas mehr Funktionalität braucht, kommen Erweiterungen ins Spiel. Noch ist die Anzahl der verfügbaren Module nicht sehr gross, doch das durchdachte MVC-Framework erlaubt es relativ einfach eigene Erweiterungen zu schreiben. Einige Erweiterungen sind aber meiner Meinung nach sehr empfehlenswert:&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.silverstripe.org/user-forms-module/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;UserForms&amp;lt;/a&amp;gt;: Modul mit welchem sich ein Autor ein Email-Formular zusammenklicken kann&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.silverstripe.org/dataobjectmanager-module/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;DataObjectManager&amp;lt;/a&amp;gt;: Erweiterung der standardmässig vorhandenen Controls zur Bearbeitung von Datenobjekten&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.silverstripe.org/uploadify-module/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Uploadify&amp;lt;/a&amp;gt;: Flash-Upload-Felder für den DataObjectManager&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.silverstripe.org/spam-protection-module/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;SpamProtection&amp;lt;/a&amp;gt;: Basis-Modul für Captchas, das sich automatisch in alle Formularen einklinkt&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;http://www.silverstripe.org/mollom-module/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Mollom&amp;lt;/a&amp;gt;: Captcha-Modul das den Mollom-Service implementiert&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&amp;lt;p&amp;gt;Ausserdem habe ich noch das &amp;lt;a href=&amp;quot;http://www.silverstripe.org/newsletter-module/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Newsletter-Modul&amp;lt;/a&amp;gt; verwendet, allerdings musste ich da sehr viele Änderungen vornehmen, da die veröffentliche Version v0.4.0-rc1 in vielen Belangen hinter dem Entwicklungsstand von Silverstripe hinterherhinkt.&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;SEO-Optimierung&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Die SEO-Eigenschaften von Silverstripe sind solide und gut umgesetzt. So ist beispielsweise die Verwaltung selbstsprechender URLs und nützlicher Metadaten bereits ab Werk eingebaut. Valider XHTML-Code stellt einen der Grundpfeiler professioneller SEO-Optimierung dar und bei Silverstripe gehört die XHTML-Validierung bereits zum Konzept. Silverstripe macht den Autor auf nicht-standardkonformen XHTML-Code aufmerksam. Eine XML-Sitemap gehört zum Standard und ist bereits in der Standard-Installation enthalten.&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;MVC-Framework&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Gemäß MVC-Paradigma unterscheidet Silverstripe zwischen drei logischen Schichten: Model, View und Controller. Unter Model versteht man die komplette Datenverwaltung der in der CMS-Datenbank abgelegten Inhalte. Ergebnisse lassen sich an die Controller-Schicht weiterreichen. Die Controller-Schicht bezeichnet die Engine, welche die Abläufe steuert. Sie kann sowohl Daten von der Model-Schicht entgegennehmen als auch anfordern. Und außerdem kann die Controller-Schicht auch Daten von der View-Schicht entgegennehmen und daraufhin maßgeschneiderte Inhalte als Reaktion ausgeben. Insgesamt ist die Controller-Schicht also ein Vermittler zwischen der View- und der Model-Schicht. Die View-Schicht beinhaltet die Layout-Vorlagen (Templates) und sorgt sowohl für die Ausgabe der Daten als auch für die Präsentation im Webbrowser.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Die saubere Trennung der Logik und der Inhalte bei MVC-Entwurfsmustern resultiert in kürzerem und leichter lesbaren Code, der sich einfacher wiederverwenden lässt. Das wiederum senkt die Wartungskosten.&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;Fazit&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Ich bin begeistert von Silverstripe und kann es nur wärmstens empfehlen. Der saubere Aufbau, die verschiedenen&amp;lt;a href=&amp;quot;http://silverstripe.org/awards/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; gewonnenen Preise&amp;lt;/a&amp;gt; und die Tatsache, dass Google das Projekt unterstützt, sprechen dafür, dass Silverstripe eine grosse Zukunft hat.&amp;lt;/p&amp;gt;</description>
			<pubDate>Tue, 30 Nov 2010 14:59:44 +0100</pubDate>
			
			
			<guid>http://www.thoma.info/home/themen/wcms-review-silverstripe/</guid>
		</item>
		
		<item>
			<title>gelöst: mod_eventlist_wide und JoomFish</title>
			<link>http://www.thoma.info/home/themen/geloest-mod-eventlist-wide-und-joomfish/</link>
			<description>&amp;lt;p&amp;gt;Ich hatte das Problem, dass das EventList-Modul mod_eventlist_wide in der Version 1.0.1 nicht mit JoomFish funktionierte. Die Events wurden einfach nicht übersetzt.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Nach langem Suchen hab ich den Fehler endlich gefunden. Gemäss &amp;lt;a href=&amp;quot;http://www.joomfish.net/de/dokumentation/entwickler-doku/64-compatible-query-construction&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Dokumentation &amp;lt;/a&amp;gt;müssen im SQL-Query alle IDs der zu übersetzenden Tabellen mit geladen werden, auch wenn diese zur Anzeige nicht verwendet werden.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Ich hab also den Code durchstöbert und in der Datei /modules/mod_eventlist_wide/helper.php die Zeile 108 durch folgenden Code ersetzt:&amp;lt;/p&amp;gt;&amp;lt;pre&amp;gt;$query = &amp;#39;SELECT a.id as key1, a.title, a.dates, a.enddates, a.times, a.datimage, l.id as key2, l.venue, l.state, l.locimage, l.city, c.id as key3, c.catname,&amp;#39;&amp;lt;/pre&amp;gt;&amp;lt;p&amp;gt;Und siehe da, es funktioniert.&amp;lt;/p&amp;gt;</description>
			<pubDate>Mon, 08 Nov 2010 00:00:00 +0100</pubDate>
			
			
			<guid>http://www.thoma.info/home/themen/geloest-mod-eventlist-wide-und-joomfish/</guid>
		</item>
		

	</channel>
</rss>
