Teoría de CMSs con Orchard
Esta es la primera entrega en una serie de posts acerca de este moderno sistema de manejo de contenidos basado en ASP.NET MVC. Aquí explicaré conceptos básicos de los CMS y de la plataforma como tal. Orchard es un CMS de última generación creado por la comunidad con alto apoyo de Microsoft. Es gratuito y Open Source.
Nivel: Básico.
Advertencia: Uso sustantivos técnicos en inglés y en español indistintamente.
Posts de esta serie:
Conceptos de CMS
Un CMS esencialmente apunta a ayudarnos a construir sitios web usando piezas pre construidas que vienen en diferentes formas y tamaños para nuestros fines.
C
La C de CMS significa contenido y hace referencia a todo aquello en el sitio que tiene información. Por ejemplo un post de un blog, un comentario, un producto y hasta un menú de navegación o un logo.
M
Management o administración. Es el conjunto de herramientas que nos permite administrar el sistema. Se conoce como Admin Panel, Dashboard o back-end. Como se indica el acceso es restringido a administradores.
S
De sistema que indica que todo lo anterior está completamente integrado para brindar una experiencia consistente durante la administración de nuestro sitio.
Front End
Es la parte visible de nuestro sitio.
Setup
En general, todo CMS requiere de un Setup y es el proceso requerido para tener el sitio corriendo. Después de esto habrá que trabajar mucho en el contenido.
Conceptos de Orchard
Content Item: Pieza de contenido que a menudo tiene una url asociada. Por ejemplo, páginas, posts o productos.
Content Type
Determinan la clase de contenido relativa a un Item. Por ejemplo un blog post es un ítem de tipo blog post.
Content Part
En Orchard los tipos de contenido están formados de pequeñas partes llamadas content parts. Son unidades atómicas de contenido que definen un comportamiento específico y que son reusables en muchos tipos de contenido.
Por ejemplo los comentarios, los tags o los ratings son Content Parts porque definen un comportamiento que puede ser reusado. Como regla se tiene que solo puede haber una parte de cada tipo en cada tipo de contenido. Por ejemplo, no encontraremos en un blog post dos secciones de comentarios distintas.
Content Field
Campos de contenido que pueden ser agregados a un tipo de contenido. Tienen un nombre y un tipo y pertenecen a un Content Type específico. Por ejemplo un producto puede tener un campo de texto representando su nombre, un campo numérico representando su precio y otro representando su peso. Como vemos, estos campos probablemente sólo tienen sentido hablando de un producto.
Module
Los módulos son las extensiones que se construyen para enriquecer la funcionalidad de Orchard. Estos módulos se organizan dentro de un sub directorio que puede ser encontrado en la carpeta Modules dentro del sitio web de Orchard. Estos módulos se pueden encontrar en la galería de Orchard.
Feature
Un módulo puede contener una o más características que son un agrupamiento lógico de funcionalidades que pueden ser habilitadas o deshabilitadas individualmente. Por ejemplo, un módulo de autenticación personalizada puede tener diversas características (features) para OpenId, Facebook, LiveID, Twitter, etc. que pueden ser activadas o desactivadas.
Hay que tener en cuenta sin embargo que una característica puede depender de otra que puede existir en el mismo o en otro módulo.
Manifest
El manifiesto es un pequeño archivo de texto que describe un módulo o un tema en el sistema:
Interfaz Gráfica (UI Composition)
Dado que Orchard maneja contenido com´puesto de partes, se necesita un mecanismo que orqueste la parte visual de la aplicación teniendo en cuenta la naturaleza del contenido que hace la composición. Por esto es importante hablar de la UI:
Theme
Al diseñar un sitio web es muy importante que seamos capaces de modificar su apariencia visual en cada sencillo aspecto. Orchard provee una clara y limpia separación entre la administración del contenido y del despliegue visual de dichos contenidos.
Un tema es un paquete que contiene todo el look and feel de un sitio Orchard. Puede consistir de una combinación de hojas de estilo, imágenes, distribuciones, plantillas y hasta código personalizado. Los temas se pueden crear heredando de otros; cosa muy útil si se trata de hacer solo pequeñas modificaciones sobre un tema existente.
Layout
Es un archivo dentro de un tema que define la organización generar de las páginas que lo usan. Un layout típicamente define un conjunto de zonas donde los contenidos o widget pueden ser insertados.
Template
Cada parte de contenido, cada campo y cada widget necesita ser gráficamente representado en el front-end transformando los datos que representa en un elemento que pueda ser leído por los usuarios del sitio. Un template o plantilla es la “receta” que formatea esos datos y los transforma en HTML para que el browser los despliegue. Se puede pensar en un template como en HTML plano con “campos” bien definidos en los que los datos se insertan.
Shape
Antes de que algo pueda ser mostrado usando una plantilla, ese algo debe ser transformado en una forma o shape, que no es más que un objeto bastante versátil que contiene toda la información requerida para poder mostrarlo. Antes de que pueda ser renderizado por las plantillas, todo debe ser mapeado en un árbol de formas que es una especie de representación abstracta de los contenidos de la página final. La ventaja de estos árboles de formas, es que cualquier módulo puede modificarlas o crear unas nuevas.
Los layout, zinas, widgets y content parts todos se representan como shapes en el proceso de renderizado.
Placement
Cuando se renderizan los elementos de la página, Orchard requiere saber en qué orden hacerlo. Para esto existen los archivos Placement.info que son XML que describen reglas usadas para determinar qué shapes van en qué zonas y en qué orden. Esto posibilita no solo que pueda ser personalizado el renderizado de cada shape, sino que también se pueda personalizar el orden en que se ejecuta este renderizado.
Zone
Las zonas son partes específicas de un layout que pueden ser personalizadas insertando en ellas Widgets. En algunos temas, las zonas son colapsibles lo que significa que pueden desaparecer si no tienen widgets activos.
Widget
Un Widget es un pequeño fragmento de interfaz de usuario que puede ser añadido a algunas o a todas las páginas del sitio. Por ejemplo tag clouds, mapas, formulario de búsqueda, etc.
Layer (Capa)
Una capa es un grupo de widgets (con su posicionamiento y orden) que es activada por una regla específica.
Por ejemplo podríamos armar una capa llamada HomePage que se activara solo al llegar a esta página. También podríamos tener por ejemplo una capa por defecto que siempre estuviese activa y otra capa solo para usuarios autenticados.
Cuando más de una capa está activa en una página, todos los widgets de esas capas se muestran al mismo tiempo. Orchard los ordena basándose en sus posiciones.
Seguridad
Usuarios y Roles
En Orchard los usuarios pueden tener roles que pueden ser vistos como estereotipos de usuarios que tienen un conjunto común de permisos que definen quién puede hacer qué en el sitio. Cualquier usuario puede tener varios roles.
Los dueños de los sitios pueden crear sus propios roles, pero Orchard viene con un conjunto de roles predefinidos que deberían cumplir la mayoría de los requerimientos de los sitios.
· Administrador: Todos los permisos
· Editor: No crea contenido pero edita y publica contenido creado por autores
· Moderador: Valida contenido creado por usuarios como los comentarios
· Autor: Escribe y publica su propio contenido
· Contribuidor: Escribe contenido pero no necesariamente tiene derecho a publicarlo
· Anónimo: usuario desconocido. Alguien que no se ha logueado.
· Autenticado: Cualquier usuario logueado
Los roles autenticados o anónimo no se pueden asignar manualmente sino que han de ser determinados dinámicamente en tiempo de ejecución.
Privilegios y Permisos
En Orchard los permisos son asignados a los roles, pero no son explícitamente denegados. En otras palabras si un usuario pertenece a cualquier role con algún permiso, éste tiene ese permiso. Para revocar este permiso es necesario bien sea retirar al usuario del role que tiene este permiso o revocar el permiso de dicho rol.
Algunos permisos son garantizados efectivamente. Esto significa que no han sido explícitamente permitidos, pero que se adquieren de manera implícita a través de otro permiso. Por ejemplo, si se otorga el permiso de “Site Owner”, implícitamente se garantizan el resto de permisos.
Tanto los permisos como sus ajustes aplican por módulo. Esto significa que si usted construye su propio módulo, a éste habrá de especificársele los permisos que lo acompañan.
Site Owner
También conocido como el súper usuario, es un usuario especial definido en tiempo de instalación que tiene todos los derechos sobre el sitio. Puede ser modificado desde la pantalla de administración del sitio si se tiene permiso para hacerlo.
De esta forma hay un tipo de permiso llamado “Site Owners Permission” que garantiza todos los derechos sobre el sitio y que por defecto se asigna al rol de Administrador. Es altamente recomendado que este grupo de permisos no se asigne a ningún otro rol.
Desarrollo
Cuando se van a crear nuevos módulos para Orchard (Esto no es requerido para operar el sitio), se requiere:
ASP.NET MVC
El framework web sobre el que se construyó Orchard.
Handler
Es similar a un filtro en MVC dado que contiene código que ejecuta eventos específicos en el ciclo de vida del request. Son usados para ajustar repositorios de datos o para ejecutar operaciones adicionales cuando algún contenido se carga.
Driver
Similares a los controladores de MVC pero actuando a nivel de contenido en vez de a un nivel de el request completo. Típicamente preparan las shapes para ser renderizadas y manejan postbacks desde los editores de administración.
Record
Es una clase que modela la representación de una content part en la base de datos. Son clases POCO donde cada propiedad es virtual.
Migration
Una migración es una descripción de las operaciones que se deben ejecutar cuando se instala por primera vez una característica en un módulo o cuando se actualiza de una versión a la siguiente. Esto permitirá actualizaciones sencillas sin pérdida de datos. Orchard incluye un framework de migración de datos.
Injection
La IoC, Inversion of Control o sencillamente inyección se usa ampliamente en Orchard. Cuando una pieza de código requiere una dependencia, esto típicamente requerirá la inyección de una o más instancias de una interface específica. El framework se encargará de seleccionar, instanciar e inyectar las implementaciones adecuadas en tiempo de ejecución.
Llamado a la Acción!
Si desea ir trabajando con este CMS, puede descargarlo gratuitamente de https://www.orchardproject.net/ Y espere en mi próxima entrega un video de los diversos tipos de instalación que podemos hacer de este CMS.