Estrenando Drupal 8. Primeras impresiones

Drupal 8 LogoLa versión 8.0.0 de Drupal salió oficialmente en noviembre de 2015, así que bueno, solo he tardado dos años en actualizar mi Drupal 7. No esta mal.

Desde entonces ha llovido mucho, y el estado general de Drupal 8 ha mejorado bastante, hay que reconocerlo, porque hasta esta versión 8.3.7 que acabo de instalar ha pasado de todo, pero aun así mi primera impresión es que todavía le falta mucho camino para estar realmente maduro, sobre todo a nivel de módulos contribuidos. Hay muchos de ellos clave en una instalación normal de Drupal 7 que aun están muy verdes en sus versiones para D8.

Para este blog que es un proyecto muy, muy sencillo, esto es a grandes rasgos lo que tengo instalado:

  • Drupal: 8.3.7 corriendo sobre Apache en Debian.
  • Tema personalizado basado en Bootstrap 8.x-3.5
  • Pathauto y Menu Trail by Path para controlar URLS y menús de forma sencilla.
  • Recaptha para los formularios y comentarios. Hasta ahora funciona muy bien, casi ningún comentario... xD
  • XMLSitemap, altamente recomendable para SEO y tener contento a Google.
  • Metatag, aunque aun no lo he configurado mucho.
  • Google Analytics
  • Display Suite para controlar la presentación de los nodos porque ahorra muchas plantillas y me gusta.
  • TagClouds para la nube de etiquetas que aparece en la barra lateral, que parece que da un poco de vida, pero en una version de desarrollo, 8.x-1.x-dev.
  • RelatedByTerms, mi propio módulo contrib que he aprovechado para ponerme a picar en Drupal 8,
  • SMTP para el correo electrónico, gracias a Mailgun.

Todo esta funcionando mas o menos igual que antes con D7, pero como he dicho este es un proyecto muy sencillo. Vamos al grano...

 

La parte buena

A estas alturas ya se hablado y comentado mucho de Drupal 8, así que llego un poco tarde. Aún así, espero que este artículo pueda ser útil si aun no has dado el paso para empezar con Drupal 8, aunque solo sea como confirmación de lo que el resto de la gente cuenta.

Lo primero a destacar son los módulos gordos que ahora están incluidos en el core de Drupal:

  • Views, por fin.
  • CKEditor configurado de serie.
  • Breakpoint y Reponsive image para el control de imágenes en dispositivos móviles.
  • Quick edit es bastante molón.
  • Los módulos de idioma: Language, Configuration translation, Content translation e Interface translation.
  • Configuration manager, una de las grandes mejoras de esta versión para trabajar de verdad con Drupal.

El segundo punto es que a nivel de gestión de contenido, todo sigue mas o menos en su sitio, por lo que el trabajo de los redactores (si los tenéis) no se verá muy afectado. A nivel de interfaz la verdad es que todo son mejoras.

Mirad por ejemplo una captura de la edición rápida mientras escribía este artículo:

Quick edit con Drupal 8

 

Te permite editar el contenido en vivo, manteniendo y aplicando los estilos CSS mientras escribes. Sin instalar ningún módulo extra. Esto es un caramelo para enseñar a potenciales clientes. Queda genial en una demo y me tiene muy contento.

Con el sistema de plantillas (templates) aún no me he metido a fondo, pero lo que he visto hasta ahora de Twig me gusta. Está mas orientado a separar el diseño y presentación de la página de la lógica de negocio que ahora si la podemos tener bien estructurada usando controladores, lo que me lleva a lo que para mi es a la vez la mayor mejora y posiblemente el mayor obstáculo que va a encontrar mucha gente para trabajar con Drupal 8 ...

El código. Nos olvidamos de viejas chapuzas escribiendo PHP barato, y ahora si, tenemos una arquitectura potente, escalable, con orientación a objetos de verdad: clases, interfaces, factorías, etc. y mejor separación entre código, configuración, lógica de negocio y presentación de datos.

He disfrutado como un enano picando la versión para D8 de mi módulo RelatedByTerms, y espero poder publicar en breve una versión inicial. Viniendo de tantos años en Java mi pequeño corazoncito Javero lloraba cuando al fin pude crear un controlador en un módulo de Drupal con sentido de verdad.

El inconveniente de esto puede ser que técnicamente va a ser mas complejo trabajar con Drupal 8. Hay que tener una buena base de orientación a objetos y eso puede ser un problema para mucha gente que trabaja con Drupal 7, y que hasta ahora no necesitaban grandes esfuerzos de aprendizaje para escribir módulos sencillos.

Por último, y ya se que llego tarde y ya se ha hablado mucho del tema, la gestión de la configuración que hace Drupal 8 sin necesidad de usar el módulo Features es otra de las grandes mejoras de esta versión. Exportar e importar configuración de un entorno a otro va a ser ahora un poquito mas fácil y creo que nos va a ahorrar unos cuantos juramentos en Arameo a mas de uno.

 

Las cosas malas

Cambiar el idioma por defecto sigue siendo una odisea. De hecho hay avisos por todos lados en las pantallas de configuración avisando de que no se haga. ¿Entonces para que tenemos esa opción?

Muchos módulos que llevamos años usando en Drupal 7 todavía están muy verdes. Algunos ejemplos son Context, aun en beta2, SMTP que está en beta3, XMLSitemap  que sigue en alpha2, y una larga lista. La parte positiva de esto es que si te apetece contribuir al desarrollo de Drupal, este es un gran momento para hacerlo.

La otra desventaja, como ya he comentado antes es que aumenta la complejidad de crear nuestros módulos, y habrá que meter un buen número de horas de aprendizaje. Si piensas que vas a pasar de D7 a D8 en unos días, siento desilusionarte pero va a ser que no.

Otra cosa que he notado, es que he visto bastantes errores al tratar de hacer cosas, como activar un módulo y tener un pantallazo blanco hasta que borras la cache, petardazos al guardar alguna pantalla de configuración, pero no tengo ejemplos concretos. Pasa de vez en cuando.

Por ejemplo, los enlaces de la configuración de los contenidos y términos de la pestaña de configuración del módulo XMLSitemap están rotos, y hay que pasarlo a la version de desarrollo para que se arreglen, o acceder desde la pestaña de Sitemap entities, que si que funcionan, aunque tarde un rato en darme cuenta.

 

Problemas gordos

Las cosas mas chungas que me he encontrado durante la migración desde D7, no han sido muchas, pero si que son graciosas.

Lo primero, hay unos módulos experimentales que vienen en el core para ayudarnos con la migración: Migrate (viejo conocido ya en D7), Migrate Drupal y Migrate Drupal UI. En mi caso era bastante sencillo, con un solo tipo de contenido custom, un par de vistas, términos de taxonomías estándar y poco mas...

Pues la migración me la hice a mano. Con los pocos artículos que tengo publicados tardaba menos en copiar y pegar que ponerme a hacer un proceso de migración, ya que lo intenté con la importación automática y fue bastante desastroso:

  • Creó el tipo de contenido custom y las vistas, pero...
  • Los contenidos del campo body no se copiaron.
  • Cuando los intentaba poner a mano no se veían en las páginas.
  • Las vistas no funcionaban bien.
  • Las taxonomías tampoco...

Al final tuve que empezar otra vez tirando de un backup que hice antes de lanzar la migración. Acordaros de hacer un backup antes si queréis probarlo.

Otro problema fue al activar el módulo Context (8.x-1.0-alpha1) con los módulos de traducción activados. Vais a ver una buena cantidad de pantallazos blancos, y este error:

Error: Call to a member function getPath() on null in /var/www/whatever/web/core/modules/config_translation/src/ConfigNamesMapper.php on line 233

La incidencia ya esta resuelta, pero hay que pasarse a la versión de desarrollo del módulo, porque aun no han publicado una release con este código arreglado. De momento no necesito el módulo y lo tengo desactivado.

 

Conclusiones

En general creo que todos los cambios de arquitectura van a contribuir mucho en llevar a Drupal a un mercado mas "profesional", y al mismo tiempo tener el efecto negativo de alejarlo un poco de todos los usuarios menos técnicos, como pueden ser agencias de diseño, o incluso diseñadores puros sin conocimientos avanzados de programación (conozco unos cuantos), que trabajan con Drupal como freelance para pequeños y medianos clientes.

Por otro lado, me parece que mientras se madura el nivel de los módulos contribuidos vamos a tener Drupal 7 para una buena temporada, y no me extrañaría en absoluto que algún fork de Drupal (véase Backdrop CMS) o similar se lleve el gato al agua y extienda la vida útil de Drupal 7 de forma indefinida.

Por mi parte, seguiré formándome por mi cuenta en Drupal 8 y empezaré a preparar el plan de formación para mi equipo de trabajo en D8 para el año que viene.