Faltan pocos días para el lanzamiento de la primera versión estable de Drupal 8. Mucho hemos leido sobre los cambios en esta versión: nuevos módulos en el core, nuevo enfoque de programación con symfony como protagonista, composer, archivos de configuración yaml, sistema de plantillas basado en twig, etc etc etc. En definitiva, muchos conceptos novedosos que pueden abrumar un poco a muchos desarrolladores de Drupal 7.
A modo de resumen voy a indicar una serie de "titulares" para extender o alterar el comprotamiento de Drupal 8. No entraré en detalles, simplemente una visión desde la superficie para tratar de centrar algunos conceptos.
Básicamente, la forma más común de extender las funcionalidades que ofrece Drupal es utilizando temas o módulos. Existe otra alternativa que es utilizando perfiles de instalación, para por ejemplo crear distribuciones con funcionalidad más compleja (Drupal commerce es un buen ejemplo).
Los temas permiten alterar el aspecto de un sitio Drupal. Se trata de un conjunto de archivos que incluyen plantillas HTML, CSS, JavaScript, imágenes, archivos de configuración yml, etc.. Su estructura de directorios y archivos deben cumplir con unos requisitos en su definición.
Mucho ha cambiado en la forma de hacer "theming" de Drupal 7 a Drupal 8. El mayor de todos quizás sea el uso de Twig que separa la funcionalidad de los elementos de cómo deben verse esos elementos (módelo vista-controlador).
Es altamente recomendable la documentación oficial para empezar a desarrollar estos conceptos: https://www.drupal.org/theme-guide/8
La otra parte importante en el desarrollo de Drupal son los módulos. Existe una gran cantidad de módulos contribuidos por la comunidad de Drupal que nos ofrecen una gran variedad de funcinalidad, capaz de resolver la mayoría de las necesidades que nos surgan en un proyecto.
Pero hay casos en los que los requerimientos de nuestro sitio son tan específicos que los módulos contribuidos no se ajustan a lo que necesitamos. En estos casos debemos definir nuestros propios módulos para crear nuevas funcionalidades o modificar el comportamiento del core u otros módulos.
Existen diversas maneras para conseguir nuestros objetivos:
- Utilizando Hooks. Los hooks son funciones con nombres especiales que son llamadas en momentos determinados y nos permiten alterar el comportamiento o los datos de diversas funciones. Los hooks son ofrecidos por los módulos, ya sean del core o contribuidos. Para ver los hooks que pone un módulo a nuestra disposición, basta con echarle un vistazo al archivo nombre_modulo.api.php. Más información en https://api.drupal.org/api/drupal/core%21core.api.php/group/hooks/8
- Usando Plugins. Los plugins son clases definidas en módulos que implementan una funcionalidad concreta y que permiten añadir nueva funcionalidad. Por su naturaleza orientada a objetos, son fácilmente extensibles. Más información en https://api.drupal.org/api/drupal/core%21core.api.php/group/plugin_api/8
- Usando Entidades. Las entidades son clases especiales de plugins que definen nuevos tipos de contenido en Drupal o configuraciones del sitio. Estos objetos son usados para el almacenamiento persistente del contenido o de la información de la configuración. Más información en https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21entity.api.php/group/entity_api/8
- Usando Servicios. Los servicios son clases que desarrollan operaciones básicas sin que entre en juego Druipal. Estas operaciones pueden ser por ejemplo enviar un email o acceder a una base de datos. Para comprender mejor estos conceptos, pódeis revisar la documentación sobre el contenedor de inyección de dependencias y la documentación en https://api.drupal.org/api/drupal/core%21core.api.php/group/container/8
- Usando el Routing. El routing permite alterar o añadir las rutas o urls a las que Drupal responde, definiendo así los menús de navegación, acciones locales o tareas. Más información en https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Menu%21menu.api.php/group/menu/8
- Usando Eventos. Los módulos pueden registrase como como suscriptores de eventos, es decir, cuando un evento ocurre, el método es llamado por cada suscriptor al evento. Esto permite a diferentes componentes del sistema interactuar e intercambiar información entre ellos . Más información en https://api.drupal.org/api/drupal/core%21core.api.php/group/events/8
Como siempre, para profundizar y extender estos conocimientos, existe una gran cantidad de información en Drupal.org. como punto de partida: https://www.drupal.org/documentation/develop