Helper

Un módulo de ayuda integral para desarrollo que proporciona servicios de utilidad, comandos Drush y herramientas de desarrollo para trabajar con configuración, entities, menús, themes, Layout Builder y más.

helper
560 sites
26
drupal.org

Instalar

Drupal 11, 10 v8.x-1.40
composer require 'drupal/helper:8.x-1.40'
Drupal 9 v8.x-1.39
composer require 'drupal/helper:8.x-1.39'

Overview

El módulo Helper proporciona una colección de servicios de utilidad y herramientas de desarrollo que simplifican las tareas comunes de desarrollo en Drupal. Ofrece una amplia gama de clases auxiliares y servicios para trabajar con gestión de configuración, operaciones de entities, construcción de menús, gestión de themes, Layout Builder, formatos de texto, manejo de archivos y más.

Este módulo es particularmente útil para desarrolladores que necesitan funciones de utilidad reutilizables para actualizaciones por lotes de content entities, importación/exportación de configuración, cambio de install profiles, gestión de plugins y diversas operaciones de arrays/HTML/render elements. También proporciona comandos Drush adicionales para gestión de cache y control de versiones de schema de módulos, así como integración con Admin Toolbar Tools para operaciones rápidas de limpieza de cache.

El módulo incluye restricciones de validación para garantizar valores únicos en fields, un backend de correo de logging para desarrollo/pruebas, elementos de formulario para selección de entities y blocks para renderizar fields de nodes. También añade características de herencia de themes que permiten a los sub-themes heredar regiones de sus themes base.

Features

  • Servicio auxiliar de configuración para importar, exportar y gestionar tanto config simple como config entities con soporte para operaciones basadas en módulos y directorios
  • Clase de utilidad para actualización por lotes de content entities para procesar eficientemente grandes cantidades de entities en hooks post-update con manejo de errores y seguimiento de progreso
  • Servicio de cambio de install profile con validación de dependencias, requisitos y disponibilidad de extensiones antes del cambio
  • Servicio auxiliar de menú para construir menús programáticamente, convertir link fields en estructuras de menú y gestionar atributos de elementos de menú
  • Servicio auxiliar de theme para verificar themes activos/predeterminados, gestionar herencia de base themes y establecer programáticamente el theme predeterminado
  • Servicio auxiliar de Layout Builder para verificar el estado de layout de entities, gestionar layouts sobrescritos y extraer plugins de layout
  • Servicio auxiliar de formato de texto para añadir/eliminar tags y atributos de las restricciones de filter_html
  • Servicio auxiliar de archivos para crear/reutilizar file entities y convertir URIs de archivos a data URIs
  • Servicio de entity actual para detectar la entity de la página actual desde route matches incluyendo previsualizaciones de nodes, endpoints REST y páginas de Layout Builder
  • Auxiliar de entity type para generar opciones de entities para campos select
  • Clase de utilidad de plugins para invocar callbacks de plugins y generar listas de opciones de plugins
  • Auxiliar de arrays con métodos para reemplazo de valores/claves, verificación de unicidad, filtrado y fragmentación equitativa
  • Utilidades de render elements para envolver elementos, adjuntar libraries, headers, feeds y gestionar acceso
  • Auxiliar HTML para eliminar comentarios HTML del markup
  • Clase de utilidad para registro único de funciones de shutdown, ejecución anidada de batches y conversión de strings a CamelCase
  • Extensión Twig que proporciona la función file_data_uri() para incrustar archivos como data URIs en templates
  • Integración con Admin Toolbar Tools añadiendo elementos de menú Flush PHP, Flush Libraries y Flush Bootstrap
  • Comandos Drush para limpiar caches de libraries/bootstrap, cambiar install profiles, gestionar versiones de schema de módulos y restablecer hooks post-update
  • Block Node Field para renderizar cualquier field de node en regiones de block fuera del área de contenido
  • Elemento de formulario Entity Select para crear campos select poblados con entities de un tipo especificado
  • Restricciones de validación para garantizar valores únicos dentro de entity fields
  • Backend de correo Logger para capturar emails al log en lugar de enviarlos (útil para desarrollo/pruebas)
  • Clases de respuesta JSON para respuestas PSR-7 con codificación automática
  • Auxiliares de archivos JSON y Composer con soporte de cache para lectura/escritura de datos JSON
  • Suscriptor de eventos de invalidación de cache tags de configuración para fácil invalidación de cache cuando cambia la configuración
  • Clase abstracta ValidatableConfigFormBase para crear formularios de configuración con validación de typed config
  • Característica de herencia de regiones de sub-themes que permite a los themes heredar regiones de themes base mediante la bandera inherit_regions
  • Validación de inline blocks en Layout Builder que previene inline blocks en layouts predeterminados para evitar dependencias de contenido
  • Alternador de validación HTML5 de formularios core para deshabilitar el atributo novalidate en formularios
  • Habilitación de widget textarea para tipos de text field como alternativa al módulo textarea_widget_for_text
  • Ocultación de proveedores de layout core para filtrar plugins de layout no deseados por módulo proveedor

Use Cases

Actualizar content entities por lotes en hooks post_update

Usa ContentEntityUpdater para procesar eficientemente grandes cantidades de entities durante actualizaciones de base de datos. La utilidad maneja el procesamiento por lotes, manejo de errores y seguimiento de progreso automáticamente. Ejemplo: Actualizar todos los nombres de términos de taxonomía a minúsculas en una función post_update.

Importar/exportar configuración programáticamente

Usa el servicio helper.config para importar configuración desde archivos o directorios, exportar configuración activa a archivos o sincronizar configuración de módulos. Útil para scripts de despliegue, install profiles y flujos de trabajo de gestión de configuración.

Cambiar install profiles sin reinstalar

Usa el comando Drush install-profile:switch o el servicio helper.install_profile para cambiar de un install profile a otro. La validación asegura que todas las dependencias se cumplan y que ninguna extensión quede huérfana antes del cambio.

Construir menús desde link fields

Usa el servicio helper.menu para renderizar valores de link fields como menús de navegación. Esto permite a los editores de contenido crear navegación tipo menú a través de link fields en entities.

Verificar y establecer el theme predeterminado programáticamente

Usa el servicio helper.theme en install profiles o hooks de actualización para verificar si un theme está activo y establecer programáticamente el theme predeterminado.

Modificar tags HTML permitidos en formatos de texto

Usa el servicio helper.text_format para añadir o eliminar programáticamente tags y atributos permitidos en configuraciones de formatos de texto, útil durante la instalación o actualizaciones de módulos.

Crear elementos de formulario entity select

Usa el elemento de formulario helper_entity_select para crear campos select poblados con entities de un tipo específico. Útil para formularios de configuración que necesitan referenciar entities.

Mostrar fields de nodes en regiones de blocks

Usa el block Node Field para mostrar cualquier field de node en regiones de block fuera del área de contenido normal. Útil para contenido de pie de página, barras laterales u otras regiones que necesitan mostrar datos específicos del node.

Herencia de regiones de sub-themes

Añade inherit_regions: true al archivo info.yml de un sub-theme para heredar automáticamente todas las regiones de su theme base, evitando la necesidad de duplicar definiciones de regiones.

Logging de emails en desarrollo

Configura el plugin de correo helper_logger como el backend de correo predeterminado para capturar todos los emails al log de base de datos en lugar de enviarlos. Útil para entornos de desarrollo y pruebas.

Restablecer hooks post-update para re-ejecución

Usa el comando Drush module:post-update:reset para restablecer un hook post-update que necesita ejecutarse nuevamente. Útil para desarrollo y depuración de hooks de actualización.

Incrustar archivos como data URIs en templates Twig

Usa la función Twig file_data_uri() para incrustar archivos pequeños (como iconos o logos) directamente en templates como data URIs codificados en base64, reduciendo las solicitudes HTTP.

Tips

  • Usa ContentEntityUpdater para procesamiento por lotes en hooks post_update - maneja el procesamiento por lotes, recuperación de errores y seguimiento de progreso automáticamente
  • El servicio helper.config soporta tanto config simple como config entities de forma transparente - no es necesario manejarlos de manera diferente
  • Establece core_form_novalidate a true en helper.settings para deshabilitar la validación HTML5 globalmente para facilitar la depuración durante el desarrollo
  • Usa el plugin de correo helper_logger durante el desarrollo para capturar todos los emails al log en lugar de enviarlos
  • Añade inherit_regions: true a los archivos info.yml de sub-themes para heredar automáticamente las regiones del theme base
  • ContentEntityUpdater soporta limitar a bundles específicos usando el formato 'entity_type:bundle1:bundle2'

Technical Details

Admin Pages 3
Flush PHP /admin/flush/php

Limpia las caches de PHP incluyendo opcache, cache APC y cache de estado de archivos. Solo disponible cuando el módulo Admin Toolbar Tools está instalado.

Flush libraries /admin/flush/libraries

Limpia la cache de libraries e invalida los assets CSS/JS. Solo disponible cuando el módulo Admin Toolbar Tools está instalado.

Flush bootstrap /admin/flush/bootstrap

Limpia la cache de bootstrap de Drupal. Solo disponible cuando el módulo Admin Toolbar Tools está instalado.

Hooks 1
hook_helper_current_entity_from_route_match_alter

Permite a los módulos alterar la entity detectada como la entity de la página actual desde el route match.

Drush Commands 8
drush cache:clear libraries

Limpia la cache de libraries e invalida los assets CSS/JS

drush cache:clear bootstrap

Limpia la cache de bootstrap

drush install-profile:switch

Cambia el sitio del install profile actual a uno nuevo. Valida dependencias y requisitos antes del cambio.

drush module:schema-version:get

Obtiene la versión de schema actual para un módulo

drush module:schema-version:set

Establece la versión de schema para un módulo. Soporta valores relativos como current+1 o current-3.

drush module:schema-version:delete

Elimina la versión de schema de un módulo. Útil para limpiar schemas residuales de módulos eliminados.

drush module:schema-version:cleanup

Limpia las versiones de schema de módulos que ya no existen

drush module:post-update:reset

Restablece un hook post-update para que se ejecute nuevamente en la próxima actualización de base de datos

Troubleshooting 3
El cambio de install profile falla con dependencias faltantes

Asegúrate de que todos los módulos requeridos por el nuevo install profile ya estén instalados antes de intentar el cambio. Usa el método validateProfile() para verificar los requisitos primero.

El elemento entity select muestra entities deshabilitadas

Este es un problema conocido con Drupal core para config entities. Consulta https://www.drupal.org/project/drupal/issues/3367492 para un parche que resuelve esto.

Las rutas de limpieza de cache no aparecen en Admin Toolbar

Las rutas Flush PHP, Flush Libraries y Flush Bootstrap solo aparecen cuando el módulo Admin Toolbar Tools está instalado y habilitado.

Security Notes 3
  • La funcionalidad de cambio de install profile solo debe ser utilizada por administradores con acceso completo al sistema
  • El plugin de correo helper_logger solo debe usarse en entornos de desarrollo/pruebas ya que expone el contenido de emails en los logs
  • El auxiliar de archivos Composer incluye un método exec() que ejecuta comandos de shell - asegura un escape apropiado de entrada al usarlo