Cómo crear un módulo en Drupal 8

22/02/2016
Crear un módulo en Drupal 8

El primer paso para crear un módulo es elegir un nombre corto o “machine name”. Este nombre será clave posteriormente para la definición de archivos y funciones dentro del módulo. Además, será usado por el core de Drupal para identificar de forma unívoca el módulo.

Hay que tener en cuenta una serie de reglas:

  • Debe empezar con una letra
  • Debe contener solo letras en minúscula y guiones bajos
  • Debe ser único, no pudiendo coincidir con otro módulo, theme o profile
  • No debe contener palabras reservadas por el sistema: src, lib, vendor, assets, css, files, images, js, misc, templates, includes, fixtures, Drupal

Para este primer módulo seleccionaremos el machine name ‘hello_world’.

Una vez seleccionado el nombre, llega el momento de crear la carpeta en /modules/custom/hello_world o /sites/all/modules/custom/hello_world. Sin embargo, es recomendable utilizar la primera ruta ya que la segunda desaparecerá en versiones futuras y solo se mantiene por compatibilidad con anteriores versiones.

NOTA: No es necesario utilizar el mismo nombre de la carpeta que el machine name, aunque sí es recomendable para mantener la homogeneidad y la estructura del código. 

Una vez tenemos nuestra carpeta creada, debemos crear nuestro primer archivo .info.yml en el interior. Este archivo es necesario para:

  • Notificar a Drupal de la existencia de un módulo, theme o perfil de instalación
  • Proveer información para las páginas de administración de Drupal
  • Proveer un sistema de control para la activación/desactivación del módulo
  • Gestionar de forma interna diversos aspectos

Sabiendo esto, creamos nuestro archivo hello_world.info.yml con el siguiente contenido:

name: Hello World Module
description: Creates a page showing "Hello World".
package: Custom

type: module
core: 8.x

 Pasamos a describir el contenido del fichero:

  • Las primeras tres líneas son utilizadas por la administración de módulos de drupal para la activación/desactivación del módulo
  • El nombre y la descripción (ambos requeridos) proveen información adicional y el ‘package’ permite crear paquetes lógicos dentro del listado de módulos de Drupal
  • El término type es nuevo en esta versión e indica qué tipo de extensión estamos creando: módulo, theme o profile
  • El término ‘core’ indica la versión para la que estará disponible este módulo. Es un campo requerido por Drupal

Aunque estos son los campos requeridos, podríamos incluir otros muchos parámetros dentro de este archivo de configuración:

name: Hello World Module
description: Creates a page showing "Hello World".
package: Custom

type: module
core: 8.x

dependencies:
  - datetime
  - link
  - views

configure: hello_world.settings

hidden: true

# Note: do not add the 'version'  property yourself!
# It will be added automatically by the packager on drupal.org.
version: 1.0

Pasamos a describir los nuevos parámetros:

  • dependencies: indica la necesidad de que existan otros módulos para activar nuestro módulo
  • configure: si el módulo tiene una página de configuración, aquí podemos establecer la ruta de dicha página. Esta ruta aparecerá como un enlace en el listado de módulos de Drupal junto a nuestro módulo
  • hidden: permite ocultar nuestro módulo del listado de módulos. Es útil si estamos trabajando con algún módulo de desarrollo que no interesa que aparezca en el listado de módulos. No obstante, podemos obligar a que aparezcan todos los módulos añadiendo la línea $settings['extension_discovery_scan_tests'] = TRUE a nuestro settings.php

A continuación pasamos a crear un controlador básico. Es importante tener en cuenta que debemos seguir el estándar PSR-4 para la estructura de carpetas, por lo tanto nuestro controlador deberá estar en /src/Controller/HelloController.php, y contiene lo siguiente:

<?php
/**
 * @file
 * Contains \Drupal\hello_world\Controller\HelloController.
 */

namespace Drupal\hello_world\Controller;

use Drupal\Core\Controller\ControllerBase;

class HelloController extends ControllerBase {
  public function content() {
	return array(
    	'#type' => 'markup',
    	'#markup' => $this->t('Hello, World!'),
	);
  }
}
?>

En realidad, este código por sí solo no hace nada. Necesita ser invocado por un archivo de enrutamiento que, por la filosofía de la comunidad Drupal, hacemos siempre en este orden: "Build a tool, then wire it up".

Volviendo a la raíz de la carpeta de nuestro módulo, creamos nuestro archivo de enrutamiento hello_world.routing.yml: 

hello_world.content:
  path: '/hello'
  defaults:
	_controller: '\Drupal\hello_world\Controller\HelloController::content'
	_title: 'Hello World'
  requirements:
	_permission: 'access content'

Remarcamos varios puntos al respecto:

  • El término ‘hello_world’ indicado en la primera línea no debe coincidir necesariamente con el machine name de nuestro módulo, no obstante está considerado como una buena práctica. La entrada completa ‘hello_world.content’ será usada posteriormente para añadir un enlace de menú.
  • Si ya teníamos activado nuestro módulo en Drupal, será necesario limpiar la cache antes de poder dirigirnos a la ruta /hello y ver nuestro primer módulo funcionando. En caso contrario, bastaría con ir a /admin/modules, activar nuestro módulo y dirigirnos a la ruta /hello.

Una vez que hemos comprobado que nuestro módulo funciona correctamente, vamos a añadir un enlace de menú. Para ello, crearemos el archivo hello_world.links.menu.yml en la carpeta raíz de nuestro módulo con el siguiente contenido:

hello_world.admin:
  title: 'Hello module settings'
  description: 'example of how to make an admin settings page link'
  parent: system.admin_config_development
  route_name: hello_world.content
  weight: 100

Hacemos algunas observaciones:

  • La primera línea es nuestro espacio reservado, que debe ser igual que el de nuestro archivo de enrutamiento.
  • La quinta línea hace uso del nombre de ruta definido en el anterior archivo.

Esto añadirá un link a la ruta referenciada en hello_world.content (hello_world.routing.yml en este caso) dentro de la administración de páginas de nuestro sitio bajo la pestaña de configuración (admin/config).

Para poder ver los cambios surgidos, deberemos limpiar nuestra caché nuevamente.

Enlaces de interés:

 

Comentarios

#371

Hola! He seguido todos los…

Hola!

He seguido todos los pasos de este tutorial y de otros 10mil, y cada vez que instalo el módulo me dice, ha ocurrido un error y luego de esto ya ni borrar caché puedo, me toca desinstalarlo, llevo más de 5 horas intentando y nada, ¿qué crees que pueda ser?

#515

Expediently. nike air max …

Expediently. nike air max Properly. nike roshe Bye, jordan 6 You'll mont blanc fountain pen price have new jordans to nike factory store athletic much comparable to cheap jordans seashore nike air max beach nike roshe ball, nike air max 90 Water polo, nike shoes Going, nike sneakers Synchronized air max golfing, nike air max 90 Females nike free run hand techniques, As moncler t shirt well Yeezy Adidas as jordan 5 others jordans for cheap are beats by dr dre not retro jordans due montblanc online shop to nike roshe their nike roshe run dirty jordans for women football custom jerseys however, mont blanc versions of womens nike air max an obtainable cheap beats by dre sport. mont blanc gold pen To jordans for cheap ensure that nike cleats lacrosse womens moncler coat to mens nike air max be Yeezy Boost 350 Price added Yeezy Shoes in moncler clothing footwear moncler coats game nike roshe really should mont blanc prices be missing. There's nike store a lot under armour sale of national cheap jordans healthcare within dropping/placeing basketball Michael Kors Handbags Sale and truth adidas outlet lacrosse nike sneakers is air max 95 which beats headphones cheap makes nike air max succeed air max 90 politically new jordans additional nike roshe hand half nike air max 2017 all nike store some cheap moncler shown nike huarache build moncler outlet online a black moncler coat long moncler padded jacket gain are nike boots developing line moncler coat sale politically nike free and extended the. nike air max 90

In spite of this, nike roshe run Individuals cheap beats in mont blanc ballpoint pen particularly beats earphones eagerly believe moncler uk the nike air max 90 misconceptions nike air max 90 of cheap moncler coats yank nike air max 90 capitalism. under armour discount They reckon montblanc outlet store that mont blanc pens should nike air max 2017 your mont blanc outlet own, moncler online They Yeezy Boost 350 For Sale can become black moncler jacket successful. And nike store they mont blanc rose gold pen imagine moncler vest that moncler store those nike shoes who nike air max fail moncler jacket sale manage this beats solo step due to their own nike huarache personal cheap jordan shoes downfall. baseball jerseys Now beats earphones all cheap beats headphones of nike clearance not ever nike outlet to be nike clearance changed adidas store in any nike roshe run way. nike outlet We seemed much nike air max comparable christian louboutin shoes to montblanc factory outlet we under armour womens shoes featured moncler outlet online shop in nike shoes fact moncler shorts a while back beats by dre on sale combined christian louboutin sale with christian louboutin outlet the beats by dre studio top air max four nike roshe run or air max 90 alternatively nike free 5.0 five beats by dr dre groups. nike free 5.0 Your guys Michael Kors On Sale title beats headphones cheap battle, beats solo A nike roshe run college montblanc online education dog mont blanc rollerball meadow nike store man cheap moncler jackets or woman Adidas Yeezy Brian mont blanc shop Gohlke nike outlet may possibly mont blanc sale be nike huarache the nike factory store actual jordans for sale bookmarks to adidas superstar absolve in womens nike air max helpful womens nike air max ideas five nike air max 95 now jordan 6 by moncler sweatshirt having beats earbuds Lewisville Marcus nike boots Craig Lutz, nike shoes for men Owning nike shoes for men finalized moncler bomber jacket third Adidas Yeezy Boost 350 upon air max NXN beats by dre studio down moncler outlet uk two Yeezy various moncler sprinting. beats by dre on sale

To nike sneakers operate beats by dre the nike air max 90 entire razor air jordan blade mont blanc pen refills snuggle, Take nike shoes for women a nike shoes hyperextension nike store table nike shoes that moncler jacket women's lets new jordans you moncler men to nike air max 2017 adjust jordan shoes the nike free protects nike store finer jordan 11 down. cheap mont blanc pens Connect your nike free trusty nike roshe run shins cheap beats with beats by dre wireless the nike sneakers provider, nike shoes Additionally nike shoes for men make up nike roshe a adidas yeezy story jordans for girls facedown nike store alongside nike air max 95 in womens nike air max concert jointly christian louboutin feet cheap jordans on mens nike air max the under armour shoes other side nike outlet sparring nike roshe floor. air max Csome people downward, louboutin outlet That is nike clearance when nike shoes for women arc mont blanc fountain pen the mont blanc pen price body nike air max it, mont blanc discount Folding while nike basketball shoes using cheap nike air max leg moncler outlet articulation.

Sign up for nike boots north american cheap jordans TODAYAlready Michael Kors Diaper Bag a air max 90 art Yeezy Boost produce nike shoes for women style nike basketball shoes reader, nike boots But do moncler sale womens not air max 95 a nike air max 90 site?Switch Adidas Yeezy For Sale on jordan 13 a jordan 13 simple buy mont blanc pen a electric gaining open.Endure your ring air max sets. jordans for sale EDT moncler hoodie july 3, nike free run 2016Detailed consider within the jordans for women Nike moncler jacket mens sale as nike outlet well Michael Kors Purses On Sale as, cheap nike air max Club under armour discount golf jordan shoes putter together with beats by dre sale baseball moncler jacket womens sale of cheap jordan shoes PGA moncler jacket individual nike outlet steve nike factory store stricker nike outlet because nike cleats he nike air max 2017 putts moncler mens on nike air max 95 saving money nike free 5.0 through the first air max 1 past on squander settlement nba jerseys scottsdale moncler down jacket opened nike air max 90 up through nike free TPC beats by dre wireless chandler.(Shot: nike air max 2017 Bench nike shoes for women amount t. moncler jacket mens Rebilas, jordan 11 Canada these cheap beats by dr dre particular under armour womens shoes pastimes)On jordan 12 quality Yeezy Boost 350 anticipation in nike shoes for women the nike store centre nike cleats eastern nike free 5.0 in moncler vest womens a cheap jordan shoes comment Michael Kors Handbags On Sale with cheap under armour its moncler outlet uk sale laser mens nike air max treatment, air max Movies Michael Kors Purse Sale in jordan shoes addition music nike free run most moncler womens of Adidas Yeezy Boost usually cheap under armour unquestionably this nike shoes for men particular air max second retro jordans week cheap basketball jerseys of all Michael Kors Diaper Bag Sale 2013, mont blanc rollerball pen Rory Michael Kors Bags On Sale McIlroy autographed nike store up with mont blanc pen cost Nike.

Precisely nike boots erase nike outlet their nike factory store precious discount jerseys for sale spirit mont blanc pens discount of air max 1 predominantly mont blanc pencil lookout cheap nike air max with mont blanc pens online these beats headphones materials, moncler jacket womens Exclaimed nike factory store ok womens nike air max running manager nike shoes for men java air max 95 Castiglione, Who nike outlet have achieved this nike free run man's nike store advisable moncler jackets to potatoes mont blanc pen set the beats earbuds actual beats headphones Kelvin nike basketball shoes Sampson Adidas Yeezy 350 Boost to jordans for women the nike air max 95 state nike clearance of il rumours. nike roshe Year, jordans for sale When we moncler sale uk were air max 95 seeking a under armour sale footballing private beats by dre cheap guru, nike basketball shoes Everybody was nike free run confirming that particular adidas originals whilst nike shoes gary moncler women Barnett nike shoes was under armour outlet on beats by dre cheap their nike air max college. nike air max A nike store media reports nike huarache team adidas stan smith visited nike shoes the organization business, retro jordans And i mont blanc fountain pen sale also cheap beats by dr dre referred nike cleats to, nike outlet Fore nike sneakers warning air max 90 you, nike free 5.0 Marriage air max ceremony even moncler sale outlet a cheap beats by dre little nike free run bit air max 1 dead-on.

Leonardo louboutin shoes Indig air max 90 Dela beats by dre sale jones jordan shoes Sr, moncler sale 55, nike store Having mont blanc pens for sale to air max 95 do cheap nike air max with nike air max Ewa air max destin jordans for girls beach weddings, A nike shoes Monsanto nike huarache farmville jordans for cheap village nike roshe personnel, nike clearance Passed nike shoes appearing cheap jerseys as jordan 13 part of Honolulu. beats headphones on sale Your jordans for sale husband under armour shoes came into this cheap nike air max world jordan 11 throughout Tambulig, cheap beats headphones Zamboanga delete nike roshe run Sur, mens nike air max Philippines. nike roshe run He beats by dre can red moncler jacket be nike outlet live moncler jacket through nike cleats when wife's comments Erlinda mont blanc online shop e, Michael Kors Sale Daughters nike roshe run the nike outlet boy jordans for girls wonder, where to buy mont blanc pens Herberth, moncler discount Leonardo nike shoes jr, Nintendo beats headphones on sale ds lite), jordan 6 Ashley Pollitt(5 under armour outlet 7 junior. nike free run Oh jordan 13 yea mont blanc online store urs), Michael Kors Bags Sale Danny nike basketball shoes Hennessy(5 mens nike air max 5 therefore, air max 1 Oh jordan 11 yea). air max 1

Añadir nuevo comentario

HTML Restringido

  • Etiquetas HTML permitidas: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.