Pasar al contenido principal
Imagen
Hooks drupal

Cómo implementar hook form alter en Drupal

Si eres de los que ama personalizar cada rincón de tu sitio web, hoy te traigo un tema que te va a encantar: hook_form_alter y sus variantes. Este poderoso hook es como el súper héroe anónimo de Drupal, siempre listo para modificar formularios sin hacer mucho ruido. Pero no te preocupes, aquí vamos a sacarlo de las sombras y a enseñarte cómo usarlo como un verdadero experto.

¿Qué es hook_form_alter?

En términos simples, hook_form_alter es una función o "gancho" que te permite modificar cualquier formulario en Drupal antes de que se renderice. ¿Quieres agregar un campo extra? ¿Cambiar un botón? ¿O incluso eliminar algo que no necesitas? Con este hook, tienes el control.

Drupal tiene varias variantes de este hook, dependiendo del nivel de precisión que necesites:

  1. hook_form_alter: el más genérico, afecta todos los formularios; aunque mediante el parámetro $form_id puedes hacer condiciones para un formulario en particular.
  2. hook_form_FORM_ID_alter: más específico, solo altera un formulario con un ID particular.
  3. hook_form_BASE_FORM_ID_alter: para formularios que comparten una base común (como nodos o usuarios).

¿Por qué usar hook_form_alter?

Imagina esto: tienes un formulario de contacto estándar, pero quieres agregar un campo personalizado para que los usuarios seleccionen su departamento favorito (porque, bueno, ¿quién no ama elegir cosas?). En lugar de crear un módulo desde cero o hackear el código base (¡no lo hagas!), puedes usar hook_form_alter para hacerlo limpiamente.

Además, este hook es ideal para:

  • Añadir validaciones personalizadas.
  • Modificar etiquetas, placeholders o atributos de campos.
  • Ocultar elementos innecesarios.
  • Inyectar JavaScript o CSS específicos para un formulario.

Un Ejemplo Práctico: personalizando un formulario

Vamos a meternos en la acción con un ejemplo sencillo pero útil. Supongamos que queremos modificar el formulario de creación de contenido de un tipo de nodo llamado "Artículo" (node_article_form) para agregar un mensaje motivador al usuario.

Paso 1: Crear un Módulo Personalizado

Si no tienes un módulo personalizado, créalo. Por ejemplo, llamémoslo mi_modulo. Aquí están los pasos básicos:

  1. Crea una carpeta llamada mi_modulo dentro de /modules/custom.
  2. Dentro de esa carpeta, crea dos archivos:
    • mi_modulo.info.yml: Define el módulo.
    • mi_modulo.module: Aquí escribiremos nuestro código.

El archivo mi_modulo.info.yml podría verse así:

name: 'Mi módulo'
type: module
description: 'Un módulo para personalizar formularios.'
core_version_requirement: ^8 || ^9 || ^10
package: Custom

Paso 2: Implementar hook_form_alter

Ahora, abre el archivo mi_modulo.module y escribe lo siguiente:

<?php

/**
 * @file
 * Contains custom form functionalities.
 */

use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function mi_modulo_form_node_article_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  // Agregamos un mensaje motivador al formulario.
  $form['motivacion'] = [
    '#markup' => '<p style="color: green;">¡Escribiendo un artículo en Drupal Sapiens!</p>',
    '#weight' => -10, // Lo colocamos al principio del formulario.
  ];

  // Cambiamos el texto del botón de envío.
  $form['actions']['submit']['#value'] = t('Publicar artículo');
}

Paso 3: Activar el módulo

Ve a la página de administración de módulos (/admin/modules) y activa "Mi módulo". Ahora, cuando vayas a crear un nuevo artículo, verás un mensaje justo arriba del formulario y el botón de envío dirá "Publicar artículo".

Variantes de hook_form_alter

Como mencioné antes, hay diferentes formas de usar este hook dependiendo de cuánto alcance quieras tener. Aquí te explico brevemente:

  1. hook_form_alter: Si quieres modificar todos los formularios, usa esta variante. Es como lanzar una red gigante. Por ejemplo:
function mi_modulo_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form_id == 'user_login_form') {
    $form['mensaje'] = ['#markup' => '<p>¡Bienvenido de vuelta!</p>'];
  }
}
  1. hook_form_FORM_ID_alter: ideal para modificar un formulario específico. Como en nuestro ejemplo anterior, usamos hook_form_node_article_form_alter.
  2. hook_form_BASE_FORM_ID_alter: útil si varios formularios comparten una base común. Por ejemplo, todos los formularios de nodos tienen el BASE_FORM_ID igual a node_form. Así puedes modificar varios formularios a la vez.

Consejos finales

  1. Usa Devel para depurar: si no estás seguro del ID de un formulario, instala el módulo Devel y usa dpm($form_id) dentro de hook_form_alter para descubrirlo.
  2. No sobrecargues los formularios: aunque es tentador agregar mil cosas, recuerda mantener los formularios limpios y funcionales.
  3. Prueba tus cambios: siempre prueba tus modificaciones en un entorno de desarrollo antes de llevarlas a producción. Nadie quiere romper un formulario crítico por accidente.

Conclusión

hook_form_alter es una herramienta increíblemente versátil que te permite personalizar formularios en Drupal sin sudar demasiado. Ya sea que quieras hacer pequeños ajustes o transformaciones más grandes, este hook es tu mejor amigo.

Así que la próxima vez que necesites modificar un formulario, no dudes en sacar a hook_form_alter de tu caja de herramientas. ¡Y recuerda, con grandes poderes vienen grandes responsabilidades!

¿Tienes alguna pregunta o algún truco interesante que hayas hecho con hook_form_alter? ¡Déjanos un comentario abajo!

Etiquetas

Únete a la Comunidad Drupal Sapiens

Guarda contenidos que te interesen, conecta con otras personas de la comunidad, contribuye para ganar premios y mucho más.

Inicia sesión o crea una cuenta aquí

Destacado

Últimas noticias