Skip to content
  • Hablemos!

Cómo crear un módulo custom en Drupal 8

Scroll

Sobrescribir enlaces de ayuda a la navegación

  1. Inicio
  2. Blog
  3. Cómo crear un módulo custom en Drupal 8

Drupal 8

Antes de revisar los archivos y los directorios necesarios para construir un módulo custom en drupal 8, lo más aconsejable es entender y manejar conceptos previos que van a ser de gran ayuda en el momento de la codificación. Hay que resaltar que de drupal en su versión 7 a esta nueva versión la 8 hay una serie de cambios que no pasan desapercibidos para los desarrolladores y que justamente encajan dentro de los conceptos previos que se deben entender a plenitud antes de desarrollar un módulo.

CONCEPTOS PREVIOS

  • Poo (Programación orientada a objetos)
  • Namespaces en php
  • Inyección de dependencias
  • Anotaciones
  • Plugins
  • Servicios
  • PSR-4

A continuación se van a detallar los pasos guía para crear un módulo custom a manera de ejemplo:

PASOS PARA CREAR EL MÓDULO

1. Lo primero que se debe hacer es crear el archivo .info.yml - Obligatorio

Para el ejemplo el archivo se llamará “example.info.yml” suponiendo que el módulo se va a llamar “example”. En este archivo se agregan el nombre del módulo, tipo, su descripción, el paquete al que pertenece, el core y las dependencias de otros módulos si es el caso.


	name: 'Example module'
	type: module
	description: 'An example module'
	package: 'Custom'
	core: '8.x'
	dependencies:
  		- block

2. Creación del archivo de rutas del módulo llamado el .routing.yml - Opcional

Continuando con el ejemplo este archivo de rutas se llamará “example.routing.yml”. El archivo de rutas es el equivalente al hook_menu de drupal 7 para crear páginas custom.


	example.first_route:
	  path: 'example/first/route'
	  defaults:
	    _controller: '\Drupal\example\Controller\ExampleController::first_route'
	    _title: 'Example page'
	  requirements:
	    _access: 'TRUE'

	example.second_route:
	  path: 'example/second/route'
	  defaults:
	    _form: '\Drupal\example\Form\FormExample'
	    _title: 'Example page form'
	  requirements:
	    _access: 'TRUE'

3. Creación del archivo .module - Opcional

Este archivo no es obligatorio a menos que se necesiten implementar hooks en la lógica que se vaya a hacer. Sin embargo, por organización es mejor agregarlo asi solo tenga un comentario del tipo @file, continuando con el ejemplo el nombre del archivo será  “example.module”


	<?php

	/**
	 * @file
	 * Example module.
	 */
	

4. Crear la carpeta “src” - Opcional

Esta carpeta debe crearse siempre y cuando se necesite adicionar un controlador, un formulario, un plugin, un bloque, un servicio, una entidad o un test al módulo. Esta carpeta se crea al mismo nivel que los anteriores archivos.

5. Crear la carpeta “src/Controller” - Opcional

Si en el módulo se necesita crear un controlador se debe crear esta carpeta. Un controlador es útil ya sea para relacionarlo con una ruta y así mostrar una página o para crear un método que el módulo vaya a usar dependiendo de su lógica.

En el ejemplo el nombre del controlador puede ser “ExampleController” la nomenclatura del nombre debe ser Upper Camel Case es decir que la primera letra de cada palabra es en mayúscula, el nombre usado para el archivo del controlador debe ser el mismo para nombrar la clase del controlador que a su vez se va a extender de la clase del core de drupal “ControllerBase”.


	<?php

	namespace Drupal\example\Controller;

	use Drupal\Core\Controller\ControllerBase;

	/**
	 * An example class controller.
	 */
	class ExampleController extends ControllerBase {

		/**
		* An example method.
		*/
		public function first_route() {
			return [
				'#markup' => $this->t('Hello World!'),
			];
		}
	}
	 
	?>

	

6. Crear la carpeta “src/Form” - Opcional

Si dentro de las tareas que va a realizar el módulo está la de crear un formulario es necesario crear esta carpeta. Dentro de esta carpeta se agregan las clases que construyen los formularios extendiéndose de la clase “FormBase” que provee el core de drupal. En el caso del ejemplo se puede crear una clase llamada “FormExample.php”


	<?php

	namespace Drupal\example\Form;

	use Drupal\Core\Form\FormBase;
	use Drupal\Core\Form\FormStateInterface;

	/**
	 * An example class form.
	 */
	class FormExample extends FormBase {

	  /**
	   * {@inheritdoc}
	   */
	  public function getFormId() {
	    return 'example_form';
	  }

	  /**
	   * {@inheritdoc}
	   */
	  public function buildForm(array $form, FormStateInterface $form_state) {
	    $form['#attached']['library'][] = 'example/example-libraries';
	    $form['name'] = [
	      '#type' => 'textfield', 
	      '#title' => t('Name'), 
	      '#size' => 60, 
	      '#maxlength' => 128, 
	      '#required' => TRUE,
	    ];

	    $form['lastname'] = [
	      '#type' => 'textfield', 
	      '#title' => t('Lastname'), 
	      '#size' => 60, 
	      '#maxlength' => 128, 
	      '#required' => TRUE,
	    ];
	        
	    $form['submit'] = [
	      '#type' => 'submit',
	      '#value' => $this->t('Submit'),
	    ];

	    return $form;
	  }


	  /**
	   * {@inheritdoc}
	   */
	  public function validateForm(array &$form, FormStateInterface $form_state) {
	    $name = $form_state->getValue('name');
	    $lastname = $form_state->getValue('lastname');
	  }


	  /**
	   * {@inheritdoc}
	   */
	  public function submitForm(array &$form, FormStateInterface $form_state) {
	    $name = $form_state->getValue('name');
	    $lastname = $form_state->getValue('lastname');

	  }
	}
	

7. Crear la carpeta “src/Plugin/Block” - Opcional

Si lo que se requiere es crear un bloque, es necesario crear la carpeta “Plugin” y dentro de ella crear la carpeta “Block”. Al igual que con los formularios dentro de esta carpeta van a existir las clases que construyen bloques con la ayuda de la clase “BlockBase” que también provee el core de drupal. Continuando con la dinámica del ejemplo el archivo que se creara para construir el bloque será “BlockExample.php”

	
		<?php

		namespace Drupal\example\Plugin\Block;
		use Drupal\Core\Block\BlockBase;

		/**
		 * Provides a 'DefaultBlock' block.
		 *
		 * @Block(
		 *  id = "example_block",
		 *  admin_label = @Translation("Example block"),
		 * )
		 */
		class BlockExample extends BlockBase {

		  /**
		   * {@inheritdoc}
		   */
		  public function build() {

		    return array (
		      '#prefix' => '
', '#suffix' => '

', '#markup' => $this->t('Hello World!') '#cache' => ['max-age' => 0], ); } }

8. Creación del archivo .libraries.yml - Opcional

Este archivo “libraries.yml” se usa para definir los css y js que va a usar el módulo. Al estar definidas las librerías están disponibles para ser adjuntadas donde se necesiten, una librería se puede adjuntar en un formulario, un bloque o una página. Para el ejemplo se crea el archivo “example.libraries.yml” donde se define la librería “example-libraries” la cual es usada por el formulario “FormExample.php”


	example-libraries:
	  version: 1.x
	  css:
	    component:
	      css/example.css: {}
	  js:
	    js/example.js: {}
	

9. Estructura final del módulo

Structure_D8_articulo
Contenido Relacionado
Planeación
Artículo

La planeación parte fundamental de una codificación eficiente

Read

Un vistazo a sass
Artículo

Un vistazo a Sass

Read

Quienes Somos

  • Nosotros
  • Equipo
  • Aliados
  • Trabaja con nosotros

Servicios

  • Desarrollo Web
  • Soporte
  • Outsourcing
  • Capacitación
  • Diseño & UX

Portafolio

  • Clientes
  • Proyectos

Recursos

  • Blog
  • Cursos Drupal

Contáctenos

[email protected] (57) 1 322 4874
Cra 46 No. 22b - 20
Bogotá D.C., Colombia
Esinergia en Twitter Esinergia en Linkedin Esinergia en Facebook
Hablemos

  • Quiénes Somos
  • Servicios
  • Portafolio
  • Recursos
  • Contáctenos
[email protected] (57) 1 322 4874
Cra 46 No. 22b - 20
Bogotá D.C., Colombia

[email protected]

(57) 1 322 4874

Cra 46 # 22b-20, Bogota D.C.

Contáctenos

  • Quiénes Somos
    • Quiénes Somos
    • Equipo
    • Aliados
    • Trabaja en ESinergia
  • Servicios
    • Diseño & UX
    • Desarrollo Web
    • Soporte & Mantenimiento
    • Outsourcing
    • Capacitación
  • Portafolio
    • Clientes
    • Proyectos
  • Recursos
    • Blog
    • Capacitaciones
  • Quiénes Somos
  • Servicios
  • Portafolio
  • Recursos
  • Contáctenos
Esinergia en Twitter Esinergia en Linkedin Esinergia en Facebook
Desarrollado con ♥ en Drupal 9

©2009-2019 Todos los derechos reservados. ESinergia® es una marca registrada