SlideShare una empresa de Scribd logo
Arquitectura de proyectos
Drupal
Ramon Vilar Gavaldà
QUIÉN SOY
●

Socio fundador de Ymbra

●

Desarrollador Drupal

●

Miembro activo de la
comunidad drupalera:
●

Ramon Vilar Gavaldà

●

http://ymbra.com/blogs/ramon
http://twitter.com/rvilar

●

Presidente de Drupal.cat
Administrador de la
traducción catalana
Eventos, parches...

http://drupal.org/user/293298
2
ÍNDICE
01. DESARROLLO TRADICIONAL EN DRUPAL
02.

3
DESARROLLO
TRADICIONAL EN
DRUPAL
4
DESARROLLO TRADICIONAL EN
DRUPAL (I)
●

Aunque estemos enamorados de él, debemos
aceptarlo: Drupal, a día de hoy, tiene un
problema!

Código

Ficheros

Configuración
Contenido
Base de datos
5
DESARROLLO TRADICIONAL EN
DRUPAL (II)
●

●

●

●

Cómo nos lo hacemos para hacer un proyecto
en grupo?
Cómo podemos mantener el proyecto
versionado en un sistema de control de
versiones?
Cómo hacemos los pasos entre entornos? Y el
paso a producción?
Cómo la gente, y los proyectos, podían
sobrevivir hasta ahora?
6
DESARROLLO TRADICIONAL EN
DRUPAL (III)
●

Posibles soluciones:
●

El tradicional papel y lápiz... grrrr!!

●

Algo un poco menos caótico: desarrollo de módulo
–

–
–
–
–

Hacer un módulo que cree su tipo de contenido, con sus
campos, sus características, sus funciones de
actualización,...
Ah, y exportemos sus vistas...
Ah, y cree sus taxonomías y sus menús...
Y si tiene más chicha, pues también se la ponemos...
Ufff!
7
DESARROLLO TRADICIONAL EN
DRUPAL (y IV)
●

●

●

Seamos claros: el lápiz y el papel no se puede
considerar herramienta tecnológica.
Miremos qué herramientas nos ofrece la
comunidad y cuáles se están convirtiendo en
un estándar de facto.
Si no era así, a partir de ahora, el horizonte de
Drupal se os va a colocar un poco más lejos.

8
HERRAMIENTAS PARA
DESARROLLO
PROFESIONAL

9
HERRAMIENTAS PARA DESARROLLO
PROFESIONAL
●

Cosas que comentaremos aquí:
●

Drush

●

Features

●

Profiles

●

Drush.make

●

Git

10
DRUSH:
DRUPAL SHELL

11
DRUSH
●

●

Esto va a ser rápido... Drush es OBLIGADO! Y
punto!
Para más información:
●

http://drupal.org/project/drush

●

Drush User's Guide http://ves.cat/boPl

12
FEATURES:
TODO A CÓDIGO
13
FEATURES: TODO A CÓDIGO (I)
●

●

Lo que tenemos claro es que tenemos que
pasar toda la configuración y sus definiciones a
código.
Y qué ganamos?
●
●

Podemos resolver los conflictos (trabajo en grupo)

●

Separamos contenido de configuración

●

●

Podemos versionar el código

Facilitamos el paso entre entornos

Módulos obligatorios: Strongarm y Diff
14
FEATURES: TODO A CÓDIGO (II)
●

●

Crear un feature no tiene secreto: dispone de
una UI muy intuitiva

Y también de integración con drush
15
FEATURES: TODO A CÓDIGO (III)
●

Antes de empezar, hagamos un pequeño paso
para el programador, pero un gran paso para el
mantenedor: organicemos los directorios!
●

/contrib

●

/custom

●

/features

16
FEATURES: TODO A CÓDIGO (IV)
●

Al empezar un proyecto, tenemos que tener
claro qué funcionalidades tendrá

Funcionalidad

Feature

N tipos de contenido
● M campos
● O vistas
● P variables
● Contextos
● ...
●

17
FEATURES: TODO A CÓDIGO (V)
●

●

●

Un feature lo podemos hacer tan genérico cómo
queramos y luego crear otros que lo
complementen.
Por ejemplo, podemos crear un feature que sea
una noticia básica y luego crear otro feature que
tenga cómo dependencia este y sólo le añada,
por ejemplo, la capacidad de tener comentarios.
No tengamos miedo en hacer features pequeños
y jugar con las dependencias... pero no nos
pasemos!
18
FEATURES: TODO A CÓDIGO (VI)
●

●

●

●

Es normal tener algún feature que no tenga
ningún tipo de funcionalidad, sino que sólo nos
sirva para exportar configuración y/o
parametrización del sistema
Es el llamado feature_sitewide o
sitewide_config
Este nos puede servir, por ejemplo, para exportar
nuestros formatos de entrada, menús,...
Otro concepto es el Controller Feature: “One
feature to rule them all” (Nuvole)
19
FEATURES: TODO A CÓDIGO (VII)
●

●

●

●

●

●

Funcionalidad = Feature = ... = Módulo? Por qué no?
Normalmente cuando queremos encapsular una funcionalidad,
no sólo queremos encapsular su configuración, sino también
algún comportamiento JS asociado, estilos, plantillas, etc.
Cuando creamos un feature nos crea un archivo llamado
feature-name.module
Ese fichero es de libre modificación (sólo debemos respetar el
include)
Podemos crear unidades de desarrollo reutilizables en otros
proyectos a partir de nuestros features
Somos libres de implementar nuestros hooks
20
FEATURES: TODO A CÓDIGO (y VIII)
●

●

●

●
●

Y hasta podemos añadir su propia plantilla
node-slideshow.tpl.php en el módulo
Sólo tenemos que añadir nuestro módulo al
theme registry de Drupal: http://ves.cat/bazN
Y con todo esto conseguimos tener módulos
reutilizables para otros proyectos.
Mola, no?
Para más información, presentación de
DrupalDay 2012 http://ves.cat/boTD
21
PROFILES:
UNA HERRAMIENTA DE
DESARROLLO
22
PROFILES: UNA HERRAMIENTA DE
DESARROLLO (I)
●

●

●

En Drupal 7 los profiles pasan a ser “módulos”
con esteroides.
Si son módulos, podemos añadirles funciones y
hooks, sin problemas, aprovechando la
potencia que esto nos permite
Por qué no aprovechar esto y utilizar los
profiles para guiar nuestros desarrollos?

23
PROFILES: UNA HERRAMIENTA DE
DESARROLLO (y II)
●

●

●

●

Un proyecto = un profile
En el fichero .info definimos los módulos (y
features) que se deben activar para nuestro proyecto
Usar profiles facilita el despliegue en entornos y la
posibilidad de integrar con un sistema de integración
continua
Podemos usar funciones hook_upate() para, por
ejemplo, automatizar tareas en actualizaciones del
proyecto: habilitar/deshabilitar módulos, etc.

24
DRUSH MAKE:
EL ÍNDICE DE NUESTRO
PROYECTO

25
DRUSH MAKE: EL ÍNDICE (I)
●

●

●

●

●

Un desarrollo Drupal no consiste sólo en descargar
módulos, activarlos y usarlos.
Es común usar versiones en “desarrollo” (vía commit
de git por favor!), además de aplicar parches en
estos...
Y además usar también temas contribuidos cómo
base...
Y además, usar librerías que complementan algunos
módulos.
Cómo saber de qué está formado tu proyecto al cabo
de un tiempo?
26
DRUSH MAKE: EL ÍNDICE (II)
; Drush Make file
core = 7.x
api = 2
projects[drupal][type] = core
; MODULE
Sprojects[entityreference][version] = 1.0-rc5
projects[entityreference][subdir] = contrib
projects[i18nviews][subdir] = contrib
projects[i18nviews][download][type] = git
projects[i18nviews][download][url] = http://git.drupal.org/project/i18nviews.git
projects[i18nviews][download][revision] = 059e772ae25e925c33c0697bf37241a1e41b1a16
projects[l10n_update][version] = 1.0-beta3
projects[l10n_update][subdir] = contrib
projects[menu_block][version] = 2.3
projects[menu_block][subdir] = contrib
projects[menu_block][patch][1461254] = http://drupal.org/files/menu-block-language-1461254-1.patch
; THEMES
projects[omega][version] = 3.1
projects[omega][subdir] = contrib
; LIBRARIES
libraries[jquery.cycle][download][type] = file
libraries[jquery.cycle][download][url] = http://malsup.github.com/jquery.cycle.all.js
libraries[jquery.cycle][destination] = libraries

27
DRUSH MAKE: EL ÍNDICE (III)
●

Si seguimos este enfoque, un proyecto está
formado por:
●
●

●

●

●

1 perfil de instalación
1-N ficheros make con la definición de los módulos,
librerías, etc del proyecto
Una carpeta /modules/features con las
funcionalidades y la configuración del proyecto
Una carpeta /modules/custom con los módulos a
medida
Una carpeta /themes/custom con los temas a medida
28
DRUSH MAKE: EL ÍNDICE (y IV)
●

●

Si queremos instalar un nuevo módulo, lo
añadimos al fichero make y ya está...¿?
Debemos volver a ejecutar el makefile! No hay
problema...
#!/bin/bash
rm -rf modules/contrib
rm -rf themes/contrib
drush make --working-copy --no-core
--contrib-destination=. profile.make .
drush updatedb -y && drush cc all

●

Todo esto se puede automatizar vía CI
29
GIT:
CONTROL, CONTROL Y MÁS
CONTROL

30
GIT: CONTROL, CONTROL Y MÁS
CONTROL (I)
●

●

●

Utilizar un CVS se ha convertido en un
imprescindible hasta para proyectos de una
sola persona
Git, cómo ya sabéis, es el CVS que se usa
para mantener/gestionar el código de Drupal y
sus módulos
Si no conocéis Git, os animo/obligo a que
vayáis a la sesión de juampy: Git y Drupal
http://ves.cat/boTF
31
GIT: CONTROL, CONTROL Y MÁS
CONTROL (II)
●

●

Con lo aquí propuesto, en Git sólo tenemos la
carpeta del perfil del proyecto.
Está está formada por:
●

Archivos própios del perfil

●

Un archivo <profile>.make

●

Los features del proyecto

●

Los módulos personalizados

●

El tema
32
GIT: CONTROL, CONTROL Y MÁS
CONTROL (III)
●

El .gitignore del perfil es:
modules/*
!modules/custom
!modules/features
themes/*
!themes/custom
libraries/*

●

Qué sentido tendría tener los módulos o temas
contribuidos o las librerías en Git si ya está la
información en d.o?
33
GIT: CONTROL, CONTROL Y MÁS
CONTROL (y IV)
●

Recomendaciones de un programador que ha
sufrido...
●

●
●

●

Haz commits de cada unidad significativa. Si debes
volver a atrás te será más fácil y menos
impactante.
Usa/abusa de las ramas. Si están es por algo!
Tagea los estados en Git. Tarde o temprano vas a
querer saber cuál era el estado del código el día
que subiste a producción algo
Y mucho más!
34
LAST BUT NOT LEAST

35
PASO ENTRE ENTORNOS (I)
●

Quién de aquí ha hecho alguna vez un paso
entre entornos con lápiz y papel?

●

Venga no engañéis...

●

Venga...

●

…

●

Lo acepto, yo también lo he hecho!

●

Pero hoy en día ya “no” hay excusa...

36
PASO ENTRE ENTORNOS (y II)
●

●

●

Si tenemos toda nuestra configuración en
código, un paso entre entornos se puede volver
en una cosa “trivial”
“Simplemente” haciendo un git pull (de la
rama que queramos) + drush updb +
drush cc all podemos desplegar en otro
entorno
Usarlo, veréis cómo hay un antes y un después
y dormiréis más a gusto!
37
INTEGRACIÓN CONTINUA
●

●

●

●

Si tenemos todo a código, y además en Git, ya
no tenemos escusas para no usar un sistema
de integración continua
Hacer un sistema de despliegue automático es
mucho más fácil con esta arquitectura
Se nos terminan las escusas para no empezar
a usar Jenkins, por ejemplo
Hay una sesión por ahí que trata estas
palabrotas http://ves.cat/boTG
38
CONTACTO
Twitter: @rvilar
● Correo: ramon@ymbra.com
● Blog: http://ymbra.com/blogs/ramon
● Web: http://ymbra.com
●

Grácias a todos(as). ¿Preguntas?

39

Más contenido relacionado

PDF
El universo JavaScript en Drupal 8
PDF
El universo JavaScript en Drupal 7
PDF
Semana 1 Introducción al Ciclo del Software
PDF
Presentacion Drupal Ccrtv
PDF
Drupal - Introducción
PDF
Drupal Sitebuilding 101
PDF
Herramientas de programación para desarrolladores
PDF
Taller de Drupal - Sesión 2
El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 7
Semana 1 Introducción al Ciclo del Software
Presentacion Drupal Ccrtv
Drupal - Introducción
Drupal Sitebuilding 101
Herramientas de programación para desarrolladores
Taller de Drupal - Sesión 2

La actualidad más candente (19)

PPTX
Exposicion GWT
PDF
Herramientas de visualización de datos
PDF
Frameworks y herramientas para la web del futuro
PDF
¿Cómo poner software de calidad en manos del usuario de forma rápida?
PDF
Semana 1 Patrones de Diseño
PDF
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
PDF
Aprendiendo GWT
PDF
Metodologia de Trabajo en Proyectos con Drupal
PDF
Taller Drupal Php Conference
PDF
GWT y SmartGWT - Introducción
PPTX
Proyect Evenge. Event manager
PPTX
Desarrollo de Aplicaciones Web 2.0 con GWT
PDF
Los mejores trucos y prácticas para configurar drupal
PDF
Presentación Multimedia - Django
PDF
Gwt II - trabajando con gwt
PDF
Semana 7 Servicios Web REST con MongoDB final
PDF
Programacion de una tienda virtual en Grails
PDF
This is Drupal! (Basics)
Exposicion GWT
Herramientas de visualización de datos
Frameworks y herramientas para la web del futuro
¿Cómo poner software de calidad en manos del usuario de forma rápida?
Semana 1 Patrones de Diseño
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Aprendiendo GWT
Metodologia de Trabajo en Proyectos con Drupal
Taller Drupal Php Conference
GWT y SmartGWT - Introducción
Proyect Evenge. Event manager
Desarrollo de Aplicaciones Web 2.0 con GWT
Los mejores trucos y prácticas para configurar drupal
Presentación Multimedia - Django
Gwt II - trabajando con gwt
Semana 7 Servicios Web REST con MongoDB final
Programacion de una tienda virtual en Grails
This is Drupal! (Basics)
Publicidad

Similar a Arquitectura de proyectos Drupal (20)

PPTX
Presentación Jornada Drupal Sevilla Febrero 2015
PDF
Desarrollo y arquitectura de proyectos con Features
PDF
Drupal 7: mucho más que una nueva versión (para desarrolladores)
PDF
[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
PDF
Drush Make & Feature Server - Drupal Camp Spain 2010
PDF
¡This is drupal! - Global Training Days
PDF
Metodologia de Trabajo en Proyectos con Drupal
PDF
Introduccion técnica a Drupal
PPT
Drupal workflow
PDF
Drupalcamp 2014 reconstruir un medio digital idealista news
PDF
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
PDF
Drupal7 para desarrolladores
PDF
Drupal 7: mucho más que una nueva versión
PDF
c.jimenez@tic-spain.com_guiaDrupal
ODP
Haciendo que tu entorno de desarrollo de Drupal rocks
PDF
Drupal y rails. Nuestra experiencia
PDF
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
PPTX
BancaCivica.es: Un caso de éxito Drupal en el sector bancario
PDF
Todo lo que necesitas saber sobre Drupal 8
PDF
¡This is drupal!
Presentación Jornada Drupal Sevilla Febrero 2015
Desarrollo y arquitectura de proyectos con Features
Drupal 7: mucho más que una nueva versión (para desarrolladores)
[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
Drush Make & Feature Server - Drupal Camp Spain 2010
¡This is drupal! - Global Training Days
Metodologia de Trabajo en Proyectos con Drupal
Introduccion técnica a Drupal
Drupal workflow
Drupalcamp 2014 reconstruir un medio digital idealista news
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
Drupal7 para desarrolladores
Drupal 7: mucho más que una nueva versión
c.jimenez@tic-spain.com_guiaDrupal
Haciendo que tu entorno de desarrollo de Drupal rocks
Drupal y rails. Nuestra experiencia
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
BancaCivica.es: Un caso de éxito Drupal en el sector bancario
Todo lo que necesitas saber sobre Drupal 8
¡This is drupal!
Publicidad

Más de Ymbra (8)

PDF
Migrate, una herramienta de trabajo y desarrollo
PDF
Field Types API: Field, widgets y formatters
PDF
Distribuciones en Drupal
PDF
Introducció al Git
PDF
Views 3: Qué hay de nuevo
PDF
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
PDF
Drupal 7 multilingüe: internacionalització i localització de llocs web
PDF
Desmitificant l'HTML5
Migrate, una herramienta de trabajo y desarrollo
Field Types API: Field, widgets y formatters
Distribuciones en Drupal
Introducció al Git
Views 3: Qué hay de nuevo
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
Drupal 7 multilingüe: internacionalització i localització de llocs web
Desmitificant l'HTML5

Último (20)

PDF
Diapositiva proyecto de vida, materia catedra
PDF
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
DOCX
Guía 5. Test de orientación Vocacional 2.docx
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PPTX
modulo seguimiento 1 para iniciantes del
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Maste clas de estructura metálica y arquitectura
Diapositiva proyecto de vida, materia catedra
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Guía 5. Test de orientación Vocacional 2.docx
Presentación PASANTIAS AuditorioOO..pptx
informe_fichas1y2_corregido.docx (2) (1).pdf
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
modulo seguimiento 1 para iniciantes del
Historia Inteligencia Artificial Ana Romero.pptx
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Zarate Quispe Alex aldayir aplicaciones de internet .docx
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
El-Gobierno-Electrónico-En-El-Estado-Bolivia
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
Propuesta BKP servidores con Acronis1.pptx
la-historia-de-la-medicina Edna Silva.pptx
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
CyberOps Associate - Cisco Networking Academy
historia_web de la creacion de un navegador_presentacion.pptx
Maste clas de estructura metálica y arquitectura

Arquitectura de proyectos Drupal

  • 2. QUIÉN SOY ● Socio fundador de Ymbra ● Desarrollador Drupal ● Miembro activo de la comunidad drupalera: ● Ramon Vilar Gavaldà ● http://ymbra.com/blogs/ramon http://twitter.com/rvilar ● Presidente de Drupal.cat Administrador de la traducción catalana Eventos, parches... http://drupal.org/user/293298 2
  • 5. DESARROLLO TRADICIONAL EN DRUPAL (I) ● Aunque estemos enamorados de él, debemos aceptarlo: Drupal, a día de hoy, tiene un problema! Código Ficheros Configuración Contenido Base de datos 5
  • 6. DESARROLLO TRADICIONAL EN DRUPAL (II) ● ● ● ● Cómo nos lo hacemos para hacer un proyecto en grupo? Cómo podemos mantener el proyecto versionado en un sistema de control de versiones? Cómo hacemos los pasos entre entornos? Y el paso a producción? Cómo la gente, y los proyectos, podían sobrevivir hasta ahora? 6
  • 7. DESARROLLO TRADICIONAL EN DRUPAL (III) ● Posibles soluciones: ● El tradicional papel y lápiz... grrrr!! ● Algo un poco menos caótico: desarrollo de módulo – – – – – Hacer un módulo que cree su tipo de contenido, con sus campos, sus características, sus funciones de actualización,... Ah, y exportemos sus vistas... Ah, y cree sus taxonomías y sus menús... Y si tiene más chicha, pues también se la ponemos... Ufff! 7
  • 8. DESARROLLO TRADICIONAL EN DRUPAL (y IV) ● ● ● Seamos claros: el lápiz y el papel no se puede considerar herramienta tecnológica. Miremos qué herramientas nos ofrece la comunidad y cuáles se están convirtiendo en un estándar de facto. Si no era así, a partir de ahora, el horizonte de Drupal se os va a colocar un poco más lejos. 8
  • 10. HERRAMIENTAS PARA DESARROLLO PROFESIONAL ● Cosas que comentaremos aquí: ● Drush ● Features ● Profiles ● Drush.make ● Git 10
  • 12. DRUSH ● ● Esto va a ser rápido... Drush es OBLIGADO! Y punto! Para más información: ● http://drupal.org/project/drush ● Drush User's Guide http://ves.cat/boPl 12
  • 14. FEATURES: TODO A CÓDIGO (I) ● ● Lo que tenemos claro es que tenemos que pasar toda la configuración y sus definiciones a código. Y qué ganamos? ● ● Podemos resolver los conflictos (trabajo en grupo) ● Separamos contenido de configuración ● ● Podemos versionar el código Facilitamos el paso entre entornos Módulos obligatorios: Strongarm y Diff 14
  • 15. FEATURES: TODO A CÓDIGO (II) ● ● Crear un feature no tiene secreto: dispone de una UI muy intuitiva Y también de integración con drush 15
  • 16. FEATURES: TODO A CÓDIGO (III) ● Antes de empezar, hagamos un pequeño paso para el programador, pero un gran paso para el mantenedor: organicemos los directorios! ● /contrib ● /custom ● /features 16
  • 17. FEATURES: TODO A CÓDIGO (IV) ● Al empezar un proyecto, tenemos que tener claro qué funcionalidades tendrá Funcionalidad Feature N tipos de contenido ● M campos ● O vistas ● P variables ● Contextos ● ... ● 17
  • 18. FEATURES: TODO A CÓDIGO (V) ● ● ● Un feature lo podemos hacer tan genérico cómo queramos y luego crear otros que lo complementen. Por ejemplo, podemos crear un feature que sea una noticia básica y luego crear otro feature que tenga cómo dependencia este y sólo le añada, por ejemplo, la capacidad de tener comentarios. No tengamos miedo en hacer features pequeños y jugar con las dependencias... pero no nos pasemos! 18
  • 19. FEATURES: TODO A CÓDIGO (VI) ● ● ● ● Es normal tener algún feature que no tenga ningún tipo de funcionalidad, sino que sólo nos sirva para exportar configuración y/o parametrización del sistema Es el llamado feature_sitewide o sitewide_config Este nos puede servir, por ejemplo, para exportar nuestros formatos de entrada, menús,... Otro concepto es el Controller Feature: “One feature to rule them all” (Nuvole) 19
  • 20. FEATURES: TODO A CÓDIGO (VII) ● ● ● ● ● ● Funcionalidad = Feature = ... = Módulo? Por qué no? Normalmente cuando queremos encapsular una funcionalidad, no sólo queremos encapsular su configuración, sino también algún comportamiento JS asociado, estilos, plantillas, etc. Cuando creamos un feature nos crea un archivo llamado feature-name.module Ese fichero es de libre modificación (sólo debemos respetar el include) Podemos crear unidades de desarrollo reutilizables en otros proyectos a partir de nuestros features Somos libres de implementar nuestros hooks 20
  • 21. FEATURES: TODO A CÓDIGO (y VIII) ● ● ● ● ● Y hasta podemos añadir su propia plantilla node-slideshow.tpl.php en el módulo Sólo tenemos que añadir nuestro módulo al theme registry de Drupal: http://ves.cat/bazN Y con todo esto conseguimos tener módulos reutilizables para otros proyectos. Mola, no? Para más información, presentación de DrupalDay 2012 http://ves.cat/boTD 21
  • 23. PROFILES: UNA HERRAMIENTA DE DESARROLLO (I) ● ● ● En Drupal 7 los profiles pasan a ser “módulos” con esteroides. Si son módulos, podemos añadirles funciones y hooks, sin problemas, aprovechando la potencia que esto nos permite Por qué no aprovechar esto y utilizar los profiles para guiar nuestros desarrollos? 23
  • 24. PROFILES: UNA HERRAMIENTA DE DESARROLLO (y II) ● ● ● ● Un proyecto = un profile En el fichero .info definimos los módulos (y features) que se deben activar para nuestro proyecto Usar profiles facilita el despliegue en entornos y la posibilidad de integrar con un sistema de integración continua Podemos usar funciones hook_upate() para, por ejemplo, automatizar tareas en actualizaciones del proyecto: habilitar/deshabilitar módulos, etc. 24
  • 25. DRUSH MAKE: EL ÍNDICE DE NUESTRO PROYECTO 25
  • 26. DRUSH MAKE: EL ÍNDICE (I) ● ● ● ● ● Un desarrollo Drupal no consiste sólo en descargar módulos, activarlos y usarlos. Es común usar versiones en “desarrollo” (vía commit de git por favor!), además de aplicar parches en estos... Y además usar también temas contribuidos cómo base... Y además, usar librerías que complementan algunos módulos. Cómo saber de qué está formado tu proyecto al cabo de un tiempo? 26
  • 27. DRUSH MAKE: EL ÍNDICE (II) ; Drush Make file core = 7.x api = 2 projects[drupal][type] = core ; MODULE Sprojects[entityreference][version] = 1.0-rc5 projects[entityreference][subdir] = contrib projects[i18nviews][subdir] = contrib projects[i18nviews][download][type] = git projects[i18nviews][download][url] = http://git.drupal.org/project/i18nviews.git projects[i18nviews][download][revision] = 059e772ae25e925c33c0697bf37241a1e41b1a16 projects[l10n_update][version] = 1.0-beta3 projects[l10n_update][subdir] = contrib projects[menu_block][version] = 2.3 projects[menu_block][subdir] = contrib projects[menu_block][patch][1461254] = http://drupal.org/files/menu-block-language-1461254-1.patch ; THEMES projects[omega][version] = 3.1 projects[omega][subdir] = contrib ; LIBRARIES libraries[jquery.cycle][download][type] = file libraries[jquery.cycle][download][url] = http://malsup.github.com/jquery.cycle.all.js libraries[jquery.cycle][destination] = libraries 27
  • 28. DRUSH MAKE: EL ÍNDICE (III) ● Si seguimos este enfoque, un proyecto está formado por: ● ● ● ● ● 1 perfil de instalación 1-N ficheros make con la definición de los módulos, librerías, etc del proyecto Una carpeta /modules/features con las funcionalidades y la configuración del proyecto Una carpeta /modules/custom con los módulos a medida Una carpeta /themes/custom con los temas a medida 28
  • 29. DRUSH MAKE: EL ÍNDICE (y IV) ● ● Si queremos instalar un nuevo módulo, lo añadimos al fichero make y ya está...¿? Debemos volver a ejecutar el makefile! No hay problema... #!/bin/bash rm -rf modules/contrib rm -rf themes/contrib drush make --working-copy --no-core --contrib-destination=. profile.make . drush updatedb -y && drush cc all ● Todo esto se puede automatizar vía CI 29
  • 30. GIT: CONTROL, CONTROL Y MÁS CONTROL 30
  • 31. GIT: CONTROL, CONTROL Y MÁS CONTROL (I) ● ● ● Utilizar un CVS se ha convertido en un imprescindible hasta para proyectos de una sola persona Git, cómo ya sabéis, es el CVS que se usa para mantener/gestionar el código de Drupal y sus módulos Si no conocéis Git, os animo/obligo a que vayáis a la sesión de juampy: Git y Drupal http://ves.cat/boTF 31
  • 32. GIT: CONTROL, CONTROL Y MÁS CONTROL (II) ● ● Con lo aquí propuesto, en Git sólo tenemos la carpeta del perfil del proyecto. Está está formada por: ● Archivos própios del perfil ● Un archivo <profile>.make ● Los features del proyecto ● Los módulos personalizados ● El tema 32
  • 33. GIT: CONTROL, CONTROL Y MÁS CONTROL (III) ● El .gitignore del perfil es: modules/* !modules/custom !modules/features themes/* !themes/custom libraries/* ● Qué sentido tendría tener los módulos o temas contribuidos o las librerías en Git si ya está la información en d.o? 33
  • 34. GIT: CONTROL, CONTROL Y MÁS CONTROL (y IV) ● Recomendaciones de un programador que ha sufrido... ● ● ● ● Haz commits de cada unidad significativa. Si debes volver a atrás te será más fácil y menos impactante. Usa/abusa de las ramas. Si están es por algo! Tagea los estados en Git. Tarde o temprano vas a querer saber cuál era el estado del código el día que subiste a producción algo Y mucho más! 34
  • 35. LAST BUT NOT LEAST 35
  • 36. PASO ENTRE ENTORNOS (I) ● Quién de aquí ha hecho alguna vez un paso entre entornos con lápiz y papel? ● Venga no engañéis... ● Venga... ● … ● Lo acepto, yo también lo he hecho! ● Pero hoy en día ya “no” hay excusa... 36
  • 37. PASO ENTRE ENTORNOS (y II) ● ● ● Si tenemos toda nuestra configuración en código, un paso entre entornos se puede volver en una cosa “trivial” “Simplemente” haciendo un git pull (de la rama que queramos) + drush updb + drush cc all podemos desplegar en otro entorno Usarlo, veréis cómo hay un antes y un después y dormiréis más a gusto! 37
  • 38. INTEGRACIÓN CONTINUA ● ● ● ● Si tenemos todo a código, y además en Git, ya no tenemos escusas para no usar un sistema de integración continua Hacer un sistema de despliegue automático es mucho más fácil con esta arquitectura Se nos terminan las escusas para no empezar a usar Jenkins, por ejemplo Hay una sesión por ahí que trata estas palabrotas http://ves.cat/boTG 38
  • 39. CONTACTO Twitter: @rvilar ● Correo: ramon@ymbra.com ● Blog: http://ymbra.com/blogs/ramon ● Web: http://ymbra.com ● Grácias a todos(as). ¿Preguntas? 39