creando distribuciones 
con drupal

DrupalCamp & SymfonyDay Mexico 2014



Web Developer, Drupalero, Mobile Developer (iOS Especialist)

Pocket Lab  @omers / Drupal ID:  omers / Git User:  omero

Los puntos a discutir

  • Que es ?
  • Algunas distros
  • Por que debería usarlas ó hacerlas?
  • Es difícil hacer una distribución ? 
  • Anatomía de una Distribución
  • Casos a considerar 
  • Mis BFF (Contributed Modules)

Que es una distribucion drupal ?


Definiremos a las distribuciones (a.k.a distros) como copias de Drupal con piezas de software adicional como lo son:
  • Temas
  • Modulos
  • Librerias de Terceros
  • Perfiles de Instalación        
Una distribución no es un perfil de instalación?

distribución vs
 perfil de instalación



La confusion de términos es de lo mas común, no debemos de asustarnos el problema no es tan grave pero si debemos de tener bien claro lo que es cada uno de los conceptos

Perfil de instalación

Es a lo que llamamos la "Base de la distribución".
Es el encargado de definir los pasos de la instalación (habilitar módulos crear tipos de contenido, taxonomías, términos, etc), con ejecutados después de la instalación base de Drupal.

Los mas populares son :

Standard & Minimal :D

distribución


 Como lo definimos anteriormente: copias de Drupal que incluyen el core , módulos, temas y perfiles de instalación los cuales nos permiten configurar los módulos los temas y las características de nuestra distribución para su perfecto comportamiento 

tipos de distribuciones 

e instalaciones

  • Drupal Core 
  • Distribuciones Full - featured (Todas las funciones)
  • Distribuciones Generales
  • SaaS (Software as a Service)

Algunas distros


commerce kickstart

La distribución mas instalada es usada para levantar tiendas virtuales (e-commerce), de manera rápida y sencilla

open publish

Distribución diseñada para la industrias de noticias y contenidos como revistas, periódicos, etc


open atrium

Distribución para intranets trabajo colaborativo , intercambio de documentos, wikis, eventos ,etc.

open public

Para gobierno, organizaciones políticas , para iniciativas de gobierno abierto, datos abierto, sitios de tranparencia.

drupal commons

Distribución orientada para la sitios de comunidades, grupos eventos, foros, etc

open politic

Distribución orientada a fortalecer la democracia en campañas electorales, creando perfiles de los candidatos y el puesto que representan así como referenciar contenido digital para sus aciertos o desaciertos durante su campaña 

orgullosamente latina !!!

por que deberia usarlas o hacerlas ?



probar drupal

Si estas iniciando en este camino debes de tener algo muy claro 

una vez instalado drupal no significa nada ... es hora de configurar los modulos

Bueno este puede ser un gran inicio las distribuciones ya vienen preconfiguradas te van a servir a tener algo

demostraciones drupal

A veces tenemos situaciones donde necesitamos realizar un pequeño demo de alguna funcionalidad ya sea para el equipo o para un cliente (LO CUAL NO ES BUENO HACER EN VIVO),


atacar esta curva de aprendizaje

Puede ser un buen inicio para experimentar site building, configuración y administración, con estos buenos ejemplos 

desarrollo agil (reduccion de tiempos)


En su mayoría ... el código se reutiliza :D

Hacer el esfuerzo de empaquetar nuestros proyectos en distribuciones puede reducir de manera abismal el tiempo de desarrollo y poder dedicarlo a cosas mas productivas



no reinventemos la rueda !!!!!

es dificil hacer una distribucion ?



tal vez NECESITAMOS saber algunas pequeñas cosas 

Requeridas :
  • PHP
  • Conocimineto Basicos de Hook's
  • Manejo de Arrays PHP
  • Drush 
  • Un buen Editor

Opcionales :
  • HTML 
  • CSS

anatomia de una distribucion

La anatomia de las distribuciones son muy parecidas a la de los modulos 

  • file.info
  • file.install
  • file.profile


file.info

Es bastante parecido al .info de nuestros modulos.
name = "My Distro."
description = "This is my first Distro"
core = "7.x"
dependencies[] = block
dependencies[] = comment
dependencies[] = contextual
dependencies[] = dashboard
dependencies[] = help
dependencies[] = image
dependencies[] = list

En las dependencias podemos agregar tanto módulos contribuidos como nuestros módulos custom 

file.install

/**
 * Implement hook_install().
 *
 * Perform actions to set up the site for this profile.
 */
function my_distro_install() {
  include_once DRUPAL_ROOT . '/profiles/minimal/minimal.install';
  minimal_install();
}

Este es el archivo que podemos usar para insertar contenido  en la DB como lo pueden ser bloques ,tipos de contenidos, roles, usuarios, tambien podemos mandar a invocar un perfil de instalación existente (como el ejemplo),haciendo uso del hook_install.

file.profile

En este archivo es donde la magia empieza :P

Acá podemos manipular al grado que queramos el workflow de instalación .

Crear pasos de instalación.
Eliminar Pasos de la instalación.
Modificar Formularios en los pasos de instalación.

Y hasta donde nuestra imaginación quiera llegar.

algunos hooks que no debemos perder de vista

hook_install_tasks

hook_install_tasks_alter

hook_form_alter

hook_form_FORM_ID_alter

algunas funciones que nos pueden ser de gran utilidad

variable_set()

variable_get()

variable_del()

module_enable()

empaquetando una distribucion para drupal.org


Nuestro mejor aliado DRUSH.

Necesitamos nuestro file.make.

Este archivo lo definiremos como la "receta" de como obtener todas las dependencias de nuestra distro.

Para mayor información: Packaging a distribution in Drupal.org

como luce un archivo .make


api = 2
core = 7.x

projects[admin_menu][subdir] = contrib
projects[admin_menu][version] = 3.0-rc4

libraries[ckeditor][destination] = libraries
libraries[ckeditor][directory_name] = ckeditor
libraries[ckeditor][patch][] = "http://drupal.org/files/1337004-ckeditor-remove-samples-3.patch"

anatomia de una distribucion

(d8 the new way)


Acá están cambiando un par de "Muchas cosas"

todo cambio es bueno!

file.info.yml

name: Standard
type: profile
description: 'Install with commonly used features pre-configured.'
version: VERSION
core: 8.x
dependencies:
  - node
  - history
  - block
  - breakpoint
  - ckeditor
  - color
  - config

Ahora tenemos un archivo YML bastante similar al .info anterior con algunas caras nuevas como el type lo cual indicara si lo que tenemos es un modulo un tema o un perfil

file.install

Tiene el mismo objetivo aunque con nuevas "monerias"

nuestras configuraciones ahora son yml's

si es configuracion seguramente existe un yml que ya la tiene :P


Adios escrituras a DB 
Hola YML

file.profile

Este archivo tiene la misma función que tiene en D7 aun no encontramos modificaciones.

pero los mantendremos informados


nuevos directorios que se vuelven de extremadamente utiles


  • config (nuestros estimados yml).
  • lib (test, plugins, etc).

casos a considerar

  • Pensar de manera generica.
  • Pensar de manera modular.
  • No hacer uso excesivo de módulos.
  • No todo lo que esta en la DB de un site quiere decir que se replicara en el otro.
  • Evitar tanto como sea posible hardcoding en los módulos customizados.
  • Ser capaces de decidir donde usar hardcoding y donde no (tampoco nos emocionemos)

mis mejores amigos

 (contributed modules)

Actualmente para D7 tenemos módulos que nos pueden ser de gran ayuda en el desarrollo de nuestras distribuciones y es muy recomendable utilizarlos este es el caso de,

  • Features
  • Ctools
  • Features Extra


demo 

(si el tiempo lo permite)

referencias

http://www.themebrain.com/blog/drupal-distributions-vs-installation-profiles

http://www.slideshare.net/dickolsson/drupal-distributions-how-to-build-them

https://drupal.org/developing/distributions



q & a

GRACIAS



www.pocketlab.mx

omar.aguirre@pocketlab.mx / @omers
Made with Slides.com