Este documento presenta una introducción al desarrollo de módulos en Drupal 10. Explica estándares de codificación, herramientas útiles, la estructura recomendada de directorios para módulos, y cómo organizar el código dentro de un módulo. También proporciona recursos adicionales sobre el API de Drupal, formularios, contribuciones y depuración que los desarrolladores deberían consultar.
3. ● Drupal association
● Drupal Core && Drupal contrib module && Drupal Mentor
● Asociación Española de Drupal
● G.D.O Basque Country
● …
BIOGRAFÍA
Ruben Egiguren aka Keopx
CONTACTO
Drupal Developer, Software Libre enthusiast, new technologies and geek
● Blog: www.keopx.net
● Drupal: www.drupal.org/u/keopx
4. Ruben Egiguren aka Keopx
Posición
Drupal Senior Developer at Digitalist Open Tech AB (Sweden)
Drupal Developer, Software Libre enthusiast, new technologies and geek
9. ¿Quién sabe de qué?
SIN MIEDO
Conocer a los asistentes
● Instalación y crear contenido.
● Editar menús, bloques.
● Instalación y configuración de módulos.
● Desarrollado algún módulo.
16. Estructura de directorios
● /core todos los archivos proporcionados por core que no tienen una razón explícita para estar en el directorio /
● /libraries contiene bibliotecas de terceros. No es utilizado por el núcleo de Drupal, pero se encuentra
comúnmente en muchos sitios.
● /modules es el directorio en el que van todos los módulos personalizados y contribuidos.
● Este directorio contiene los subdirectorios contrib y custom, que pueden utilizarse para facilitar el
seguimiento de los módulos.
● /profiles contiene perfiles aportados y personalizados.
● /themes contiene (sub)temas contribuidos y personalizados.
● /sites es el directorio utilizado para ejecutar las configuraciones multisitio de Drupal y se utiliza de la misma
manera que en Drupal 7. Los módulos y temas en /sites/all/modules y /sites/all/themes anulan los de los
directorios de módulos y temas base. Los módulos en /sites/SITENAME/modules y
/sites/SITENAME/themes sustituirán a los demás para el sitio en cuestión.
● /vendor es el directorio donde van las dependencias de Composer, por ejemplo Symfony y Twig.
17. Estructura de directorios
Detalles sobre el directorio /core, útiles sobre todo para los nuevos hackers del core:
● /core/assets - Varias librerías externas utilizadas por Core. jQuery, underscore, modernizer, etc.
● /core/misc - Código del frontend del que depende Drupal Core.
● /core/includes - Funcionalidad que es de bajo nivel para ser modular. Como el propio sistema de
módulos.
● /core/lib - Clases de Drupal Core.
● /core/modules - Módulos de Drupal Core.
● /core/profiles - Perfiles de instalación de Drupal Core. Perfiles de instalación multilingüe mínimo,
estándar, de prueba y de prueba por defecto.
● /core/scripts - Varios scripts CLI, utilizados principalmente por los desarrolladores.
● /core/tests - Tests de Drupal Core.
● /core/themes - Temas de Drupal Core.
18. Estructura de directorios
Directorios
● /modules/contrib - Contiene los módulos de Drupal.org.
○ Nota: no se modifican estos módulos. Usar cweagans/composer-patches para aplicar
parches.
● /modules/custom - Módulos desarrollados.
● /profile/contrib - Perfiles contribuidos.
● /profile/custom - Perfiles propios.
● /themes/contrib - Contiene los temas de Drupal.org. Nota: usa subtemas.
● /themes/custom - Temas propios o subtemas.
● /libraries - Contiene librerías de terceros como plugins, javascript, etc.
Fuente: https://www.drupal.org/docs/understanding-drupal/directory-structure
20. Organizar el módulo - custom
Los módulos suele tener esta estructura:
● loremipsum.info.yml - Fichero de información.
● loremipsum.module - Fichero principal, implementación de hook
● loremipsum.install - (Des)Instalador del módulo, esquema de información.
● loremipsum.services.yaml Fichero de configuración de los servicios.
● loremipsum.routing.yaml Fichero de configuración de las rutas.
● loremipsum.libraries.yaml Fichero de configuración de las librerías.
● loremipsum.links.menu.yaml Fichero de configuración del menú.
● loremipsum.links.task.yaml Fichero de configuración de las “tareas” (pestañas).
● loremipsum.config_translation.yaml Fichero de configuración de la traducción.
● …
● Fuente: https://www.drupal.org/docs/creating-custom-modules/basic-module-building-tutorial-lorem-ipsum-generator/basic-structure
21. Organizar el módulo - custom
Los módulos suele tener esta estructura:
● …
● config/ - configuración del módulo, schema, views, etc.
○ config/install | config/schema - configuración del módulo, schema, views, etc.
● templates/ - Fichero relacionados con el tema (*.html.twig,...)
● translations/ - fichero de traducciones.
● css/ - Estilos CSS.
● images/ - Imágenes.
● js/ - Javascript.
● src/ - Código principal
● tests/src - Código los tests Unit, Kernel, Fuctional…
● Fuente: https://www.drupal.org/docs/creating-custom-modules/basic-module-building-tutorial-lorem-ipsum-generator/basic-structure
22. Organizar el módulo - custom
Los módulos suele tener esta estructura:
● src/Controller/ - controlador
● src/Entity/ - Entidad
● src/Events/ - EventDispatcher
● src/EventSubscriber/ - EventSubscriber
● src/Form/ - Formulario
● src/Service/ - Servicios
● src/Plugin/ - Plugins de todo tipo, bloques, campos, migrate, etc.
○ src/Plugin/Block/ - Plugins bloques.
○ src/Plugin/Field/ - FieldFormatter, FieldType, FieldWidget…
○ src/Plugin/rest/ - Plugins de rest.
● src/Element/ - Elementos
● src/Cache/ - Cache
● …
24. Qué deberíamos leer/conocer
● Existe multitud de material el drupal.org
● Buscar no es difícil
● Lo difícil es saber qué buscar
● Algunas referencias
27. Qué deberíamos leer/conocer
● Trabajando con el API de Drupal
○ https://api.drupal.org/api/drupal
● Buenas prácticas
28. Qué deberíamos leer/conocer
● Uno de los más habituales son los formularios que nos aportan multitud de posibilidades.
● Form API Reference, si seguimos manteniendo características de D7.
● Introduction to Form API
○ Sanzante: https://www.youtube.com/watch?v=NJotlAWdZ2E
○ https://rsanzante.github.io/drupalconprague-2022-form-api-workflow
● Esquema del API de Form
○ https://www.drupal.org/docs/drupal-apis/form-api/form-api-workflow