SlideShare a Scribd company logo
1 of 41
Download to read offline
Introducción al
desarrollo de módulos
en Drupal 10
Egun on
Buenos dias
Good morning
● 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
Ruben Egiguren aka Keopx
Posición
Drupal Senior Developer at Digitalist Open Tech AB (Sweden)
Drupal Developer, Software Libre enthusiast, new technologies and geek
De qué hablaremos
De qué hablaremos
Estándares
Herramientas
Organización de módulos
Organización de código
Código
Bonus
¿Quién sabe de qué?
¿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.
Estándares
Estándares
Drupal code standards
● https://www.drupal.org/docs/develop/standards/coding-standards (PHP)
● https://www.drupal.org/docs/develop/standards/javascript/javascript-coding-standards
(javascript)
● https://www.drupal.org/docs/develop/standards/css/css-coding-standards (CSS)
Documentación
● https://www.drupal.org/docs/develop/standards
Estándares
Code
● https://www.drupal.org/docs/develop/development-tools/configuring-visual-studio-code
Netbeans setup
● https://drupal.org/node/1019816
Eclipse
● https://drupal.org/node/75242
Herramientas
Herramientas
Drush
● https://www.drush.org/
Devel
● https://drupal.org/project/devel
Examples
● https://drupal.org/project/examples
Coder
● https://drupal.org/project/coder
PHPStan
● https://www.drupal.org/docs/develop/development-tools/phpstan/getting-started
○ PHPStan is a static analysis tool that allows you to find bugs in your codebase without running the code.
Estructura de directorios
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.
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.
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
Organizar el módulo
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
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
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
● …
Qué deberíamos leer/conocer
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
Qué deberíamos leer/conocer
ahh y sobre todo….
Qué deberíamos leer/conocer
ahh y sobre todo….
CONTRIBUIR
Qué deberíamos leer/conocer
● Trabajando con el API de Drupal
○ https://api.drupal.org/api/drupal
● Buenas prácticas
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
Qué deberíamos leer/conocer
Creando nuestro módulo
Creando nuestro módulo
● Eres nuevo creando módulos
○ http://deeson-online.co.uk/labs/are-you-developer-new-drupal-read
● Creating modules - a tutorial: Drupal 10.*
○ https://www.drupal.org/docs/creating-custom-modules
● Examples
○ https://drupal.org/project/examples
Creando nuestro módulo
● Drush para generar módulos y código
○ drush generate module-standard
■ Generate a Module using Drush
■ https://gist.github.com/davidjguru/590bf212c2a31528ea872a27f7bf3443
■ https://medium.com/limoengroen/lazy-coding-exploring-drush-generate-dcb2cee22bf2
■ https://github.com/Chi-teck/drupal-code-generator
¡Comenzamos!
Creando nuestro módulo
Recursos para comenzar
● https://drupalcamp2023.keopx.net/
¡Comenzamos!
● lando start
● lando ssh
● drush generate module-standard (drush ^10.0)
● drush generate module (drush ^11.0)
● …
● lando stop
Bonus
Bonus
● Debug
○ https://asociaciondrupal.es/video/virtual-bof-debugging-php
● XDebug
○ www.keopx.net/blog/configuracion-de-php-53-y-xdebug
○ https://docs.lando.dev/guides/lando-with-vscode.html
○ https://docs.lando.dev/guides/lando-phpstorm.html
● Configuración del entorno
○ https://drupal.org/node/238805
Bonus
Por donde empezar a contribuir
Issue
● https://drupal.org/novice
● http://drupalize.me/videos/getting-started-issue-queue
Herramientas
● https://www.drupalpod.com
● https://dreditor.github.io/
Thanks to our all Sponsors
Ikusi arte
Nos vemos
See you

More Related Content

Similar to [DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10

Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Ymbra
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal CcrtvPedro Cambra
 
Introduccion a Drupal 6 e-ghost
Introduccion a Drupal 6 e-ghostIntroduccion a Drupal 6 e-ghost
Introduccion a Drupal 6 e-ghostKeopx
 
Taller de introducción a drupal 7 1ª parte
Taller de introducción a drupal 7 1ª parteTaller de introducción a drupal 7 1ª parte
Taller de introducción a drupal 7 1ª parteJavier Gomez
 
Arquitectura de proyectos Drupal
Arquitectura de proyectos DrupalArquitectura de proyectos Drupal
Arquitectura de proyectos DrupalYmbra
 
Presentando drupal en xalapa
Presentando drupal en xalapaPresentando drupal en xalapa
Presentando drupal en xalapaMedio y forma
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalAlberto Permuy Leal
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!SergioIglesiasNET
 
Inciación a Drupal 8
Inciación a Drupal 8Inciación a Drupal 8
Inciación a Drupal 8Julian Valero
 
Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2SEAT, S.A.
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015 Keopx
 
Introducción general a Drupal
Introducción general a DrupalIntroducción general a Drupal
Introducción general a DrupalPedro Cambra
 
Por qué Drupal es un potente gestor de contenidos #OpenExpoDay 2014
Por qué Drupal es un potente gestor de contenidos #OpenExpoDay 2014Por qué Drupal es un potente gestor de contenidos #OpenExpoDay 2014
Por qué Drupal es un potente gestor de contenidos #OpenExpoDay 2014OpenExpoES
 
Por qué Drupal es un potente gestor de contenidos
Por qué Drupal es un potente gestor de contenidosPor qué Drupal es un potente gestor de contenidos
Por qué Drupal es un potente gestor de contenidosJuampy NR
 
Metodologia de Trabajo en Proyectos con Drupal
Metodologia de Trabajo en Proyectos con DrupalMetodologia de Trabajo en Proyectos con Drupal
Metodologia de Trabajo en Proyectos con DrupalRuben Teijeiro
 

Similar to [DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10 (20)

Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal Ccrtv
 
Introduccion drupal
Introduccion drupalIntroduccion drupal
Introduccion drupal
 
¡This is drupal!
¡This is drupal!¡This is drupal!
¡This is drupal!
 
Introduccion a Drupal 6 e-ghost
Introduccion a Drupal 6 e-ghostIntroduccion a Drupal 6 e-ghost
Introduccion a Drupal 6 e-ghost
 
Drupal Sitebuilding 101
Drupal Sitebuilding 101Drupal Sitebuilding 101
Drupal Sitebuilding 101
 
Taller de introducción a drupal 7 1ª parte
Taller de introducción a drupal 7 1ª parteTaller de introducción a drupal 7 1ª parte
Taller de introducción a drupal 7 1ª parte
 
Arquitectura de proyectos Drupal
Arquitectura de proyectos DrupalArquitectura de proyectos Drupal
Arquitectura de proyectos Drupal
 
Presentando drupal en xalapa
Presentando drupal en xalapaPresentando drupal en xalapa
Presentando drupal en xalapa
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en Drupal
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!
 
Migrando data - DRUPAL
Migrando data - DRUPALMigrando data - DRUPAL
Migrando data - DRUPAL
 
Drupal7 site buildingesue_3
Drupal7 site buildingesue_3Drupal7 site buildingesue_3
Drupal7 site buildingesue_3
 
Inciación a Drupal 8
Inciación a Drupal 8Inciación a Drupal 8
Inciación a Drupal 8
 
Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015
 
Introducción general a Drupal
Introducción general a DrupalIntroducción general a Drupal
Introducción general a Drupal
 
Por qué Drupal es un potente gestor de contenidos #OpenExpoDay 2014
Por qué Drupal es un potente gestor de contenidos #OpenExpoDay 2014Por qué Drupal es un potente gestor de contenidos #OpenExpoDay 2014
Por qué Drupal es un potente gestor de contenidos #OpenExpoDay 2014
 
Por qué Drupal es un potente gestor de contenidos
Por qué Drupal es un potente gestor de contenidosPor qué Drupal es un potente gestor de contenidos
Por qué Drupal es un potente gestor de contenidos
 
Metodologia de Trabajo en Proyectos con Drupal
Metodologia de Trabajo en Proyectos con DrupalMetodologia de Trabajo en Proyectos con Drupal
Metodologia de Trabajo en Proyectos con Drupal
 

More from Keopx

Fucking copyright
Fucking copyrightFucking copyright
Fucking copyrightKeopx
 
Segurtasuna sarean
Segurtasuna sareanSegurtasuna sarean
Segurtasuna sareanKeopx
 
[DrupalCampSpain2018] CircleCI
[DrupalCampSpain2018] CircleCI[DrupalCampSpain2018] CircleCI
[DrupalCampSpain2018] CircleCIKeopx
 
[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Trabajando en remoto[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Trabajando en remotoKeopx
 
[DrupalCampSpain2018] Contribuir a Drupal
[DrupalCampSpain2018] Contribuir a Drupal[DrupalCampSpain2018] Contribuir a Drupal
[DrupalCampSpain2018] Contribuir a DrupalKeopx
 
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.orgDrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.orgKeopx
 
El poder de webform (antes yaml form)
El poder de webform (antes yaml form)El poder de webform (antes yaml form)
El poder de webform (antes yaml form)Keopx
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100Keopx
 
Contribuir a Drupal
Contribuir a DrupalContribuir a Drupal
Contribuir a DrupalKeopx
 
Contribuir a Drupal - Entorno
Contribuir a Drupal - EntornoContribuir a Drupal - Entorno
Contribuir a Drupal - EntornoKeopx
 
Uso practico de git
Uso practico de gitUso practico de git
Uso practico de gitKeopx
 
WorkShop: Introducción a GIT
WorkShop: Introducción a GITWorkShop: Introducción a GIT
WorkShop: Introducción a GITKeopx
 
Drupal 8 WorkShop
Drupal 8 WorkShopDrupal 8 WorkShop
Drupal 8 WorkShopKeopx
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPKeopx
 
Drupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de cierreDrupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de cierreKeopx
 
Drupal Day Bilbao 2014 - Sesión de apertura
Drupal Day Bilbao 2014 - Sesión de aperturaDrupal Day Bilbao 2014 - Sesión de apertura
Drupal Day Bilbao 2014 - Sesión de aperturaKeopx
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a gitKeopx
 
Business inteligence
Business inteligenceBusiness inteligence
Business inteligenceKeopx
 
Herramientas de reporte
Herramientas de reporteHerramientas de reporte
Herramientas de reporteKeopx
 

More from Keopx (20)

Fucking copyright
Fucking copyrightFucking copyright
Fucking copyright
 
Segurtasuna sarean
Segurtasuna sareanSegurtasuna sarean
Segurtasuna sarean
 
[DrupalCampSpain2018] CircleCI
[DrupalCampSpain2018] CircleCI[DrupalCampSpain2018] CircleCI
[DrupalCampSpain2018] CircleCI
 
[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Trabajando en remoto[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Trabajando en remoto
 
[DrupalCampSpain2018] Contribuir a Drupal
[DrupalCampSpain2018] Contribuir a Drupal[DrupalCampSpain2018] Contribuir a Drupal
[DrupalCampSpain2018] Contribuir a Drupal
 
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.orgDrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
 
El poder de webform (antes yaml form)
El poder de webform (antes yaml form)El poder de webform (antes yaml form)
El poder de webform (antes yaml form)
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
 
Contribuir a Drupal
Contribuir a DrupalContribuir a Drupal
Contribuir a Drupal
 
Contribuir a Drupal - Entorno
Contribuir a Drupal - EntornoContribuir a Drupal - Entorno
Contribuir a Drupal - Entorno
 
Uso practico de git
Uso practico de gitUso practico de git
Uso practico de git
 
WorkShop: Introducción a GIT
WorkShop: Introducción a GITWorkShop: Introducción a GIT
WorkShop: Introducción a GIT
 
Drupal 8 WorkShop
Drupal 8 WorkShopDrupal 8 WorkShop
Drupal 8 WorkShop
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMP
 
Drupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de cierreDrupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de cierre
 
Drupal Day Bilbao 2014 - Sesión de apertura
Drupal Day Bilbao 2014 - Sesión de aperturaDrupal Day Bilbao 2014 - Sesión de apertura
Drupal Day Bilbao 2014 - Sesión de apertura
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a git
 
Business inteligence
Business inteligenceBusiness inteligence
Business inteligence
 
Herramientas de reporte
Herramientas de reporteHerramientas de reporte
Herramientas de reporte
 

[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10

  • 1. Introducción al desarrollo de módulos en Drupal 10
  • 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
  • 5.
  • 7. De qué hablaremos Estándares Herramientas Organización de módulos Organización de código Código Bonus
  • 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.
  • 11. Estándares Drupal code standards ● https://www.drupal.org/docs/develop/standards/coding-standards (PHP) ● https://www.drupal.org/docs/develop/standards/javascript/javascript-coding-standards (javascript) ● https://www.drupal.org/docs/develop/standards/css/css-coding-standards (CSS) Documentación ● https://www.drupal.org/docs/develop/standards
  • 14. Herramientas Drush ● https://www.drush.org/ Devel ● https://drupal.org/project/devel Examples ● https://drupal.org/project/examples Coder ● https://drupal.org/project/coder PHPStan ● https://www.drupal.org/docs/develop/development-tools/phpstan/getting-started ○ PHPStan is a static analysis tool that allows you to find bugs in your codebase without running the code.
  • 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
  • 26. Qué deberíamos leer/conocer ahh y sobre todo…. CONTRIBUIR
  • 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
  • 31. Creando nuestro módulo ● Eres nuevo creando módulos ○ http://deeson-online.co.uk/labs/are-you-developer-new-drupal-read ● Creating modules - a tutorial: Drupal 10.* ○ https://www.drupal.org/docs/creating-custom-modules ● Examples ○ https://drupal.org/project/examples
  • 32. Creando nuestro módulo ● Drush para generar módulos y código ○ drush generate module-standard ■ Generate a Module using Drush ■ https://gist.github.com/davidjguru/590bf212c2a31528ea872a27f7bf3443 ■ https://medium.com/limoengroen/lazy-coding-exploring-drush-generate-dcb2cee22bf2 ■ https://github.com/Chi-teck/drupal-code-generator
  • 34. Creando nuestro módulo Recursos para comenzar ● https://drupalcamp2023.keopx.net/
  • 35. ¡Comenzamos! ● lando start ● lando ssh ● drush generate module-standard (drush ^10.0) ● drush generate module (drush ^11.0) ● … ● lando stop
  • 36. Bonus
  • 37. Bonus ● Debug ○ https://asociaciondrupal.es/video/virtual-bof-debugging-php ● XDebug ○ www.keopx.net/blog/configuracion-de-php-53-y-xdebug ○ https://docs.lando.dev/guides/lando-with-vscode.html ○ https://docs.lando.dev/guides/lando-phpstorm.html ● Configuración del entorno ○ https://drupal.org/node/238805
  • 38. Bonus Por donde empezar a contribuir Issue ● https://drupal.org/novice ● http://drupalize.me/videos/getting-started-issue-queue Herramientas ● https://www.drupalpod.com ● https://dreditor.github.io/
  • 39.
  • 40. Thanks to our all Sponsors