Drupal es un Sistema Administrador de Contenidos CMS y a la vez un Framework para desarrollos web. Drupal ha contribuido a un cambio total en el panorama del desarrollo del Internet, posibilitando la creación de portales web de manera eficiente a bajos costos y con alta calidad.
2.1.1.Algo de historia
El proyecto comienza el año 2000 con el estudiante holandés Dries Buytaert, los estudiantes de la universidad de Amberes, establecen un puente inalámbrico entre sus dormitorios para compartir una conexión ADSL entre ocho estudiantes. Si bien esta fue una situación muy lujosa en ese momento, no había medios para discutir o compartir cosas simples. Esto inspiro para trabajar en un sitio de noticias pequeñas o notables. El código fue originalmente diseñado para el sitio llamado drop.org. Una vez drop.org se estableció en la web, su público ha cambiado ya que los miembros empezaron a hablar de nuevas tecnologías web, tales como la moderación, distribución, clasificación y autenticación distribuida; el sitio se convirtió en un ambiente de experimentación personal, impulsado por las discusiones y flujo de ideas.
En el año 2001 Dries decidió lanzar el código fuente de este proyecto como Drupal. El propósito es posibilitar a otros usar y extender la plataforma, el nombre proviene de la pronunciación inglesa de la palabra holandesa “druppel” que significa “drop” (Gota)
Drupal en cifras (Junio-2011)
- Módulos desarrollados
10.244
- Temas desarrollados
1.153
- Desarrolladores Activos
8.838
- Usuarios registrados
1.374.359
- Usuarios desarrolladores del núcleo Drupal
Aproximadamente 100
- Usuarios desarrolladores de módulos y traducciones de Drupal
Aproximadamente 10.000
Proyectos web importantes desarrollados en Drupal
- Casa Blanca de EEUU
- Tecnologías NOKIA
- Sistema Operativo Ubuntu
- Yahoo research
- Universidad de Harvard (Gazette)
http://harvardscience.harvard.edu/
2.1.2.Principios del proyecto Drupal
- Sistema modular y extensible.- Drupal tiene como objetivo proveer un potente núcleo de sistema que puede ser fácilmente extendido a través de Módulos. Para Drupal existen desarrollados módulos gratuitos como también de pago, así también uno puede crear módulos que satisfagan sus necesidades. Por otro lado la apariencia de los desarrollos puede también extenderse a través del desarrollo de Temas.
- Colaboración.- El desarrollo de Drupal se ha realizado con sistemas sociales-tecnológicos abiertos y colaborativos, facilitando el trabajo en equipo, la innovación y la apertura en su comunidad. Prácticamente cualquier persona puede participar en su desarrollo y recibir asistencia gratuita para estos emprendimientos.
- De código abierto.- Drupal se basa en la filosofía de desarrollo colaborativo de software libre y está licenciado bajo la GNU/ GPL.
- Bajo perfil de implementadores.- Drupal apunta a la sencillez en la usabilidad en los entornos para administradores y usuarios, no exige que los implementadores tengan conocimientos de programación, sólo si se desea extender las funcionalidades del núcleo se requiere de un programador en la mayoría de los casos con un perfil bajo de codificación.
- Basada en estándares.- Drupal soporta los estándares establecidos y emergentes. Las normas específicas sobre XHTML y CSS.
- Calidad de codificación.- Se busca alta calidad, elegancia y documentación en el código que se pueda desarrollar al momento de extender las capacidades del núcleo de Drupal.
- Altamente portable.- Drupal tiene requisitos mínimos del lado del servidor y amplia disponibilidad del software base que utiliza. Para garantizar su éxito Drupal puede ser instalado en todos los sistemas operativos populares.
Comunidad
La comunidad Drupal es de libre membrecía pero se jerarquiza a la hora de las modificaciones que se pueden hacer sobre el Sistema según el grado de compromiso.
- Fundador y desarrollador líder.- Dries Buytaert retiene el control primario sobre el software y toma la mayoría de las decisiones sobre los cambios propuestos. El da un peso importante a los comentarios hechos por la comunidad.
- Colaboradores del núcleo.- Un pequeño equipo revisa y propone cambios además de mantener el código del núcleo.
- Colaboradores.- Están encargadas de hacer mantenimiento, también tienen responsabilidades informales para con una porción específica del núcleo. Existen colaboradores de:
- De módulos.
- De temas.
- De traducciones.
- De documentación.
- Contribuyentes del núcleo.- Son quienes contribuyen con códigos parche o documentación para el núcleo de Drupal. Las contribuciones son revisadas por pares y entonces se decide implementarlas por Dries u otro comprometido con el núcleo. Cualquier persona puede enviar parches para el núcleo de Drupal.
- Equipo de seguridad.- Son quienes resuelven problemas de seguridad reportados, proveen asistencia para contribuir a que los encargados de mantenimiento de módulos resuelvan temas de seguridad. Cualquier persona puede reportar un problema de seguridad.
- Grupos.- http://groups.drupal.org/
provee un lugar a los grupos dispuestos a organizarse, reunirse y trabajar en proyectos. Estos grupos están unidos por algún interés en particular o por una ubicación geográfica. Es una manera excelente de facilitar el aprendizaje y proveer soporte.
- Eventos y reuniones.- Los miembros de una comunidad pueden crear eventos Drupal donde se reúnen cara a cara, intercambian consejos y obtienen apoyo para sus siguientes proyectos Drupal, haciendo amigos al caminar.
- Chat (IRC).- Es una manera de comunicarse e interactuar con otros. Es un lugar para hacer y responder preguntas, IRC es una manera rápida y efectiva de obtener soporte.
- Planeta Drupal.- Donde se encuentra un sinfín de publicaciones hechas por la comunidad y para la comunidad tales como códigos, promociones, comercialización, servidores que soportan el software, etc.
- Foros.- La participación de los usuarios de Drupal en estos es frecuente y colaborativa, se suele encontrar respuestas ya desarrolladas a una interrogante o problema, si se plantea un nuevo tema de foro, sin duda se tienen participaciones de manera inmediata.
2.1.3.Tecnología de Drupal
Drupal es una aplicación que se ejecuta sobre un servidor web y hace uso de PHP para efectuar consultas sobre una base de datos, de esta manera construye dinámicamente las páginas web.
La pila de tecnologías que soportan Drupal.
Siendo php el lenguaje fundamental en el que está construido Drupal, la combinación del resto de tecnologías más usual es Apache / Mysql / Linux.
El núcleo de Drupal
Un esqueleto sencillo soporta al sistema Drupal. El núcleo es el responsable de la funcionalidad básica así como de soportar toda la funcionalidad extendida. El código del núcleo puede ser descargado desde el sitio drupal.org
Flujo de información entre las capas de Drupal
Presentación de archivos
Entender las estructura de directorio de una instalación Drupal es esencial para tener buenas prácticas, tales como donde descargar Módulos y Temas, cómo tener diferentes perfiles de instalación Drupal. Por defecto se tiene la siguiente estructura:
La estructura de archivos por defecto de una instalación Drupal
- La carpeta “includes” contiene librerías con funciones comunes para Drupal.
- La carpeta “misc” almacena javaScript y varios iconos e imágenes disponibles para instalaciones Drupal.
- La carpeta “modules” contiene los módulos del núcleo, cada módulo en su propia carpeta (ó en cualquier otra carpeta excepto en las carpetas “profiles” y “sites”.) Se agregan los módulos extras en la carpeta “sites”.
- La carpeta “profiles” contiene diferentes perfiles de instalación para un sitio. Si existiesen otros perfiles de instalación además de el por defecto, Drupal preguntará cual de los perfiles desea instalar cuando se instale por primera vez. El principal propósito de un perfil de instalación es el de habilitar ciertos módulos del núcleo o contribuidos automáticamente. Un ejemplo puede ser un perfil que levanta los módulos necesarios para que Drupal funcione como un sitio de comercio electrónico (e-commerce.)
- La carpeta “scripts” contiene scripts para evaluar sintaxis, limpieza de código, ejecución de línea de comandos, manejo de casos especiales con cron y ejecución de test. Esta carpeta no se utiliza dentro del ciclo de vida a solicitud de Drupal, se trata de secuencias de comandos de utilidad para el shell y Perl.
- La carpeta “sites” contiene las modificaciones a Drupal en cuanto a configuraciones, módulos y temas. Cuando se agrega un modulo de el repositorio de módulos contribuidos o un módulo propio, este deberá ir en la ruta sites/all/modules.
Dentro del directorio “sites” esta un subdirectorio llamado “default” que guarda el archivo de configuración por defecto para el sitio Drupal: default.settings.php. El instalador de Drupal modificara este de acuerdo a la información que ser provee y escribirá el archivo settings.php. Típicamente la persona que desarrolla el sitio copia el directorio “default” y lo renombra a la URL del sitio, así el archivo de configuraciones estaría en sites/www.example.com/settings.php.
- La carpeta “sites/default/files” está incluida en la instalación de Drupal por defecto. Esta es necesaria para almacenar cualquier archivo que es subido al sitio y subsecuentemente utilizado. Algunos ejemplos son el uso de un logo personalizado, habilitación de avatares de usuario, o subida de otros archivos multimedia asociados con el nuevo sitio. Este subdirectorio requiere de permisos de lectura y escritura. El instalador de Drupal creara este subdirectorio si puede y verificara que se coloquen los permisos correctos. Además de “sites/default/files”, un directorio “sites/default/private” puede ser creado para almacenar archivos que son sensibles y no deberán ser mostrados a menos que el visitante del sitio presente apropiadas credenciales. Se crear la carpeta privada navegando a Configuración >sistema de archivos e ingresando el directorio donde se desea que residan los archivos privados.
- La carpeta “themes” contiena la batería de plantillas y temas por defecto para Drupal. Los temas adicionales que se descargan o crean no deben ir aquí; ellos deber ir dentro de sites/all/themes
- cron.php es usado para ejecutar tareas periódicas, tales como actualizaciones a tablas de la base de datos y calculo de estadísticas.
- index.php es la entrada principal para solicitudes del servidor.
- install.php es la principal entrada para el instalador de Drupal.
- update.php actualiza la base de datos después de una actualización de Drupal.
- xmlrpc.php recibe peticiones XML-RPC. Puede ser eliminada de implementaciones que no requieren recibir peticiones XML-RPC.
- robots.txt es una implementación por defecto de los estándares de exclusiones de robots.
- authorize.php es un script administrativo para ejecutar operaciones autorizadas sobre archivos, por ejemplo descargar una instalación de un nuevo tema o módulo de Drupal.org.
Una vista de la funcionalidad más usual en un sistema web Drupal, funcionalidad del núcleo más algunos módulos
2.1.4. Conceptos Fundamentales
Ganchos (Hooks)
Los Ganchos permiten a los módulos involucrarse con lo que está sucediendo en el resto del sistema web Drupal. Por ejemplo una vez que un usuario inicia sesión Drupal se levanta la función hook_user_login() (creada por nosotros), eso significa que podemos enganchar funcionalidad nuestra a la funcionalidad del core de Drupal.
Temas
Los temas controlan como se va a mostrar un sitio web. Drupal maneja la capa de Plantillas para crear el HTML (o JSON, XML, etc.) que el navegador recibirá. Drupal usa principalmente plantillas PHP como principal motor de plantillas, o también el Sistema de Plantillas Fácil ETS (Easy Template System.) Es importante saber que Drupal hace una fuerte separación entre el contenido y su presentación. Drupal permite varias maneras de personalizar y sobrescribir el aspecto de nuestro sitio web.
Una forma es usar las hojas de estilo en cascada CSS para sobrescribir las composiciones de Drupal con clases e IDs. Sin embargo la mejor manera es elaborar Temas, que son una combinación de HTML estándar y PHP. En un Tema se declara como queremos que se vean las listas o las rutas de navegación, simplemente declarando una función con el nombre apropiado. Entonces Drupal usa esta función para crear esas partes de la página.
Nodos
Los tipos de contenido en Drupal están derivados de un tipo de datos base llamado Nodo.
Ejemplos de nodos:
- Las páginas de un libro.
- Las discusiones en los foros.
- Las entradas de un blog.
- Una tarea programada para un proyecto en la agenda.
El genio detrás de este enfoque es su extensibilidad. Los desarrolladores de módulos pueden añadir características como valoraciones, comentarios, archivos adjuntos, información de localización geográfica, y así sucesivamente para los nodos, en general, sin tener que preocuparse acerca del tipo de nodo. Los nodos también contienen un conjunto de propiedades que definen comportamientos y son heredables. Por ejemplo cualquier nodo puede ser promovido a la página principal del sitio web, publicado o des publicado. Debido a su estructura uniforme, la interface de administración ofrece opciones para trabajar con la edición de nodos de acuerdo a sus características organizadas en lotes.
Campos
Los contenidos en Drupal están compuestos por campos individuales. El título de un nodo, el cuerpo del nodo. Se utilizan los campos para construir cualquier tipo de contenido que se requiera. Por ejemplo, un evento. Un evento típicamente contiene un título, una descripción (cuerpo), una fecha de inicio, una hora de inicio, una duración, una localización y posiblemente un enlace para registrarse al evento. Cada uno de estos elementos representa un campo. En Drupal nosotros tenemos la posibilidad de crear tipos de contenidos usando campos, ya sea programando ó usando la interface de administración de Drupal
Bloques
Un bloque es información que puede ser habilitada o deshabilitada en una específica región en la plantilla del sitio web. Por ejemplo un módulo puede mostrar el número de usuarios actualmente conectados en el sitio, otro módulo enlaces a los contenidos más populares del sitio. Los bloques son típicamente colocados en regiones de la plantilla como sidebar, header o footer. Los bloques pueden colocarse para mostrar nodos de cierto tipo, sólo en la página principal, o acorde a cierto criterio.
A menudo los bloques son usados para presentar información que la personaliza un usuario. Por ejemplo el bloque de usuario contiene sólo enlaces a áreas administrativas del sitio como “Mi cuenta.” Las regiones donde los bloques aparecen son definidas en un Tema del sitio y la ubicación de los bloques en estas regiones son personalizadas desde las interfaces de administración.
Taxonomías
Drupal tiene un sistema de clasificación de contenido, se trata de una potente herramienta que permite flexibilidad total para la clasificación. Básicamente se trata de crear Vocabularios que serán la agrupación de Términos. Los vocabularios pueden ser planos o jerárquicos, pueden permitir múltiple selección y también ser de libre etiquetado. Cada vocabulario puede ser utilizado por uno o más tipos de contenidos y de esta manera los nodos en tu sitio pueden ser agrupados en categorías, etiquetados o clasificados de cualquier manera que uno desee.
2.1.5.Módulos contribuidos
Desde http://drupal.org/download se pueden descargar gratuitamente aplicaciones web para infinidad de tareas entre las cuales destacan
- Encuestas.
- Foros.
- Blogs.
- Comentarios.
- Búsquedas.
- Administrador de comunidades.
- Administrador de comunicaciones.
- Eventos.
- Wikis.
- Tiendas de comercio electrónico.
- Galerías multimedia.
- Galerías de fotos.
- Sindicación RSS.
- Agregador de noticias (feeds)
- Campos (Fields – CCK).- Uno de los módulos más famosos que permiten la creación de formularios de registros dinámicos.
- Vistas (Views).- Un módulo famoso que otorga la posibilidad de generar vistas de toda la información contenida en el Sistema.
2.1.6.Drupal como Framework
Las capacidades que Drupal presenta como framework para desarrollos web son bastante completas y potentes.
- API pública y disponible para desarrolladores. La API de Drupal presenta librerías de código reutilizables y extensibles sin necesidad de modificarlas.
- Capa de abstracción sobre la base de datos. Drupal puede estar sobre cualquier Sistema Administrador de Base de Datos.
- Librerías Ajax.- Para lograr potencia en las capacidades de interacción con el servidor. Por defecto se utiliza jQuery.
- Sistema de Plantillas.- Se puede manejar en una misma instancia de aplicación, Temas diferentes para prácticamente cualquier espacio representado en la interfaz de usuario.
- Seguridad. Drupal es reconocido por los niveles de seguridad que alcanzan las aplicaciones webs bien configuradas.
- Arquitectura Modelo Vista Controlador.- Drupal es Drupal y su arquitectura no corresponde puramente al patrón MVC ni a ningún otro. Sin embargo su flexible estructura separa por completo el desarrollo del aspecto a través de Temas (Vista), las interfaces para trabajar con la Base de datos vienen en el núcleo de Drupal (Modelo) y básicamente programamos sólo controladores a la hora de extender el núcleo con nuestros módulos contribuidos.
- Extensibilidad.- A trabes de los Ganchos Drupal permite extender la mayor parte de su Núcleo y también se pueden crear nuevos módulos (Contribuidos.)
- Herramientas de cache a varios niveles.
- Multiplataforma.- Se puede instanciar aplicaciones web Drupal en prácticamente cualquier Sistema Operativo.
- Multisitios.- Se pueden crear infinitas instancias de aplicaciones web utilizando un mismo núcleo de Drupal.
- Multi-idioma.- Drupal permite que las aplicaciones web desarrolladas soporten múltiples idiomas. En la comunidad Drupalera se ha convenido programar en Ingles para posibilitar portabilidad y soporte internacional de la comunidad sobre los desarrollos.
2.1.7. Puntos débiles de drupal
La Interfaz por defecto de Drupal es poco amigable. La versión 6 de Drupal es la que le dio fama a este Sistema, y sin embargo la curva de aprendizaje inicial es muy pronunciada (difícil aprendizaje.) La última versión es Drupal 7 en la cual se soporta este proyecto y ha resuelto en mucha medida esta falencia.
Drupal presenta el problema de la compatibilidad inversa. Es decir que los módulos y vistas desarrolladas para una versión inferior no son compatibles al 100% con una versión superior.
Aún quedan muchas traducciones por hacer al español.
No hay muchos temas de primer nivel libres.
2.1.8.Drupal como framework MVC
Drupal tiene un desarrollo anterior a los frameworks MVC y no ha sido concebido bajo este patrón de desarrollo. Drupal comenzó como un CMS netamente y ha tenido un fuerte desarrollo como framework en los últimos 5 años. Aunque MVC es ahora visto como la mejor manera de desarrollar para la web, esta no es la única. Drupal ha seguido una línea paralela como framework respecto de otros frameworks MVC puros, Drupal concibe en su esencia una fuerte separación entre los desarrollos de la interacción directa con la Base de Datos (Modelo), la Interfaz Gráfica (Vista) y la interacción entre administración de los datos y su representación (Controlador.)
Un desarrollador tiene que saber que cuando desarrolla para Drupal ya está desarrollando en MVC. Aunque no esté haciendo la separación de sus archivos modelo, vista o controlador en diferentes carpetas, se están programando por separado estos aspectos.
En el siguiente diagrama demostramos que todas las aplicaciones Drupal siguen el patrón de diseño MVC de manera innata.
FUENTES
- Pro Drupal 7 Development Third Edition, Copyright © 2010, Todd Tomlinson and John K. VanDyk.
- http://www.drupal.org
- http://drupal.org/documentation
- http://archivemati.ca/2006/01/21/drupal-as-a-mvc-framework/
- Inicie sesión para comentar