SilverStripe es un gestor de contenidos (o CMS: Content Managed System) avanzado de código abierto, especialmente diseñado para que los diseñadores puedan trabajar en colaboración directa con los programadores funcionando independientemente el uno del otro pero relacionados por mecanismos automáticos simplificados que pueden extenderse ilimitadamente.
Podemos probar una demo del producto aquí y descargarlo aquí.
Está escrito en lenguaje PHP y es compatible con servidores IIS, Apache, etc.
A mi modo de ver las cosas me resulta muy parecido a Django, ya que hace uso del patrón de ingeniería del software: MVC (modelo-vista-controlador)
y los elementos de la base de datos y de la administración se generan automáticamente a partir del código, de hecho existe un script que lee las clases que hemos escrito en búsqueda de la variable de base de datos donde se especifican los campos y sus tipos, de forma que actualiza la estructura de aquella para que se puedan realizar altas/bajas/modificaciones con sólo añadir una línea en el código de la parte de administración de una sección del contenido de una página, después se crea una plantilla y se utilizan dichos campos con sólo llamar a la variable con el nombre del campo especificado.
Para conocer los entresijos de la programación con SilverStripe, los creadores han dispuesto un subdominio de ayuda con tutoriales que van desde las tareas de código más simples hasta las más avanzadas, por ejemplo, en mi caso he utilizado este manual para crear una homepage distinta a la que trae por defecto y ha funcionado a la primera…una gozada,podemos crear todos los tipos de páginas que queramos con sus secciones, por ejemplo una sección de productos sería una página donde sus elementos de base de datos son un conjunto…lo que se llama un data object (que hereda de sitetree) generando un data collation, aquí en la imagen vemos una sección de noticias con artículos donde se define una clase contenedora de artículos a la que se le permite tener «hijos», otra clase para los artículos y se relacionan entre sí
Como características curiosas, trae un gestor de comentarios para cada página y un generador de RSS…, pero lo más curioso es que el CMS se divide en 6 partes bien diferenciadas o directorios principales:
Código
Este trozo de código especifica la clase para los artículos de una sección de noticias:
class ArticlePage extends Page { static $db = array( 'Date' => 'Date', 'Author' => 'Text' ); static $has_one = array( ); function getCMSFields() { $fields = parent::getCMSFields(); $fields->addFieldToTab('Root.Content.Main', new DateField('Date'), 'Content'); $fields->addFieldToTab('Root.Content.Main', new TextField('Author'), 'Content'); return $fields; } } class ArticlePage_Controller extends Page_Controller { }
El modelo ArticlePage hereda de Page y tiene un controlador ,pero además necesita un decorador, en el caso en que no se especifique se utiliza el asociado al padre Page. (Ver listado de tipos de datos)
Para la gestión de los campos en la administración se utiliza la función getCMSFields() heredada de Page y se le añaden nuevos campos, aparecería algo así como resultado:
Veamos un ejemplo sencillo de código fuente de GoogleSiteMaps incluído en la versión 2.4.1 que es probado aparece el siguiente trozo de código:
class GoogleSitemapDecorator extends SiteTreeDecorator { function extraStatics() { return array( 'db' => array( "Priority" => "Varchar(5)", ) ); } //...
esta clase se usa para «decorar» ,es decir, para especificar al controlador con qué vista va a pintar los datos del modelo de datos tanto para el front como para el backend, además se está especificando un array para la generación de los campos de la base de datos desde el exterior…
Para tener una introducción más completa, aquí hay un vídeo que os puede interesar:
SilverStripe 2.4 Site Editing Overview from SilverStripe on Vimeo.