Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

9.3. Crear un módulo Drupal personalizado. Mostrar la página mediante programación.

04/05/2025, by Ivan

Comencemos a crear nuestro módulo con un poco de orden. Continuemos separando los módulos personalizados (custom) y los contribuidos (contrib). En Drupal, los módulos se ubican en la carpeta /modules. Ahora ya no es necesario colocarlos profundamente en /sites/all/modules, aunque en el archivo readme diga que esto debería funcionar, se recomienda usar la carpeta /modules. Dentro de la carpeta /modules, crearemos dos carpetas: custom y contrib. La carpeta contrib almacenará los módulos adicionales descargados desde drupal.org, y nuestros módulos personalizados estarán en la carpeta custom.

Subtítulos en inglés:

Ejemplos de código disponibles en GitHub:

https://github.com/levmyshkin/drupalbook8

Este detalle de separar los módulos entre contrib y custom puede parecer innecesario, pero créeme, cuando tengas 200 módulos contribuidos y 30 personalizados en tu sitio, entenderás lo difícil que es encontrar todos los módulos personalizados y todo el código propio del sitio. Además, si modificas el código de un módulo contribuido (lo cual solo debería hacerse si es absolutamente necesario), sería conveniente moverlo también a la carpeta custom, para no sobrescribir tus cambios accidentalmente durante una actualización (o que otro programador lo haga, o incluso tú mismo, sin saberlo).

Entonces, crearemos nuestro módulo personalizado. Creamos la carpeta /modules/custom/drupalbook. Dentro de esta carpeta crearemos el archivo drupalbook.info.yml:

name: DrupalBook
description: Custom module for learning Drupal 8
type: module
core: 8.x
core_version_requirement: ^8 || ^9
package: DrupalBook

El archivo *.info.yml es responsable de la descripción del módulo. La información que contiene se mostrará en la página de Extender (Extend). El nombre del archivo consiste en el nombre del módulo + .info.yml.

Los archivos YML en Drupal son el formato estándar para configuraciones y ajustes. Los campos y valores están separados por dos puntos y las líneas nuevas deben tener una sangría de dos espacios. La indentación es muy importante, si hay un error en el formato, como un espacio de más o falta un símbolo, Drupal puede mostrar un error o no interpretar correctamente el archivo.

Vamos a la página de Extender (Extend) y activamos nuestro módulo:

extend

Ahora que el módulo está activado, podemos agregar funcionalidad y esta funcionará en nuestro sitio. Para empezar, mostraremos texto plano en una página. Para ello, creamos el archivo drupalbook.routing.yml:

drupalbook.first_page:
  path: '/first-page'
  defaults:
    _controller: '\Drupal\drupalbook\Controller\FirstPageController::content'
    _title: 'Hello World!'
  requirements:
    _permission: 'access content'

Explicación del archivo:

  • drupalbook.first_page: nombre único de la ruta (mejor usar el patrón modulo.nombre_ruta).
  • path: la URL que cargará la ruta.
  • defaults: define configuración por defecto, incluyendo el controlador que devolverá la salida y el título.
  • _controller: clase y método PHP que devolverán el contenido.
  • _title: título de la página.
  • _permission: permiso necesario para acceder a la ruta (acceso al contenido).

Ahora añadimos la clase PHP que muestra la página. Drupal usa la autocarga de clases según el estándar PSR-4:
https://www.php-fig.org/psr/psr-4/

La clase mencionada es \Drupal\drupalbook\Controller\FirstPageController, lo que corresponde a esta ruta de archivo:

/modules/custom/drupalbook/src/Controller/FirstPageController.php

Contenido del archivo:


namespace Drupal\drupalbook\Controller;

/**
 * Provides route responses for the DrupalBook module.
 */
class FirstPageController {

  /**
   * Returns a simple page.
   *
   * @return array
   *   A simple renderable array.
   */
  public function content() {
    $element = array(
      '#markup' => 'Hello World!',
    );
    return $element;
  }

}

Estructura final de archivos:

contrib

Ahora limpia la caché y abre la página en http://drupalbook/first-page

drupalbook

Analicemos la clase PHP:

  • namespace Drupal\drupalbook\Controller; define el namespace correcto.
  • La clase FirstPageController contiene el método content() que retorna un array renderizable con #markup.

Este array permite devolver HTML, pero también podríamos devolver JSON, XML u otro formato si es necesario.

El código completo del módulo está en:

https://github.com/levmyshkin/drupalbook8

Eso es todo por ahora. En la próxima lección, continuaremos ampliando las funcionalidades de nuestro módulo.