Twig Extensions
Añade filtros Twig adicionales a Drupal para manipulación de arrays, formato de fechas, internacionalización y procesamiento de texto.
twig_extensions
Instalar
composer require 'drupal/twig_extensions:8.x-2.5'
composer require 'drupal/twig_extensions:8.x-2.1'
Overview
El módulo Twig Extensions trae la funcionalidad del paquete abandonado twig/extensions a Drupal, proporcionando características adicionales comunes para Twig que no pertenecen directamente al núcleo de Drupal. Este módulo es particularmente útil para desarrolladores de temas que necesitan capacidades adicionales de manipulación de texto y fechas directamente dentro de las plantillas Twig.
El módulo proporciona siete filtros Twig organizados en cuatro categorías: manipulación de arrays (shuffle), formato de fechas (time_diff), internacionalización (localizeddate, localizednumber, localizedcurrency) y procesamiento de texto (truncate, wordwrap). Estos filtros se integran perfectamente con el entorno Twig de Drupal y respetan el sistema de traducción de Drupal para una localización adecuada.
Los filtros de internacionalización utilizan la extensión intl de PHP para proporcionar formato sensible a la configuración regional para fechas, números y monedas, haciéndolos esenciales para sitios multilingües que necesitan un formato adecuado de números y fechas según diferentes estándares regionales.
Features
- Filtro shuffle para aleatorizar el orden de los elementos de un array, útil para mostrar contenido aleatorio o listas aleatorizadas en plantillas
- Filtro de diferencia de tiempo que convierte marcas de tiempo en cadenas de tiempo relativo legibles como 'hace 2 horas' o 'en 3 días', similar a la visualización de tiempo de Facebook y Twitter, completamente traducible a través del sistema de traducción de Drupal
- Filtro de fecha localizada que formatea fechas usando IntlDateFormatter de PHP con soporte para múltiples preajustes de formato (ninguno, corto, medio, largo, completo), configuración regional personalizada, zona horaria y tipo de calendario (gregoriano o tradicional)
- Filtro de número localizado que formatea números según la configuración regional con soporte para diferentes estilos incluyendo decimal, moneda, porcentaje, científico, deletreado, ordinal y duración, con tipos de números configurables
- Filtro de moneda localizada que formatea valores monetarios como cadenas de moneda correctamente localizadas con el símbolo de moneda apropiado y formato numérico
- Filtro truncate que acorta el texto a una longitud especificada con un separador opcional (por defecto '...'), con la capacidad de preservar palabras completas al truncar
- Filtro wordwrap que ajusta el texto a una longitud de línea especificada con un separador configurable, con preservación opcional de los saltos de línea originales
Use Cases
Mostrar marcas de tiempo relativas en contenido
Use el filtro time_diff para mostrar tiempos relativos amigables como 'hace 5 minutos' o 'hace 2 días' en lugar de fechas absolutas. Esto es particularmente útil para funciones sociales, comentarios, feeds de actividad o cualquier contenido donde la recencia es importante. Ejemplo: {{ node.created.value|time_diff }} mostrará una salida estilo 'Publicado hace 3 horas' que se actualiza dinámicamente.
Aleatorizar el orden de visualización del contenido
Use el filtro shuffle para aleatorizar el orden de los elementos en una lista. Esto es útil para mostrar testimonios aleatorios, productos destacados o cualquier contenido donde desee variedad en cada carga de página. Ejemplo: {% for item in items|shuffle %} iterará a través de los elementos en un orden aleatorio cada vez.
Formato multilingüe de números y monedas
Use los filtros localizednumber y localizedcurrency para formatear correctamente números y precios según la configuración regional del visitante. Por ejemplo, el número 1234.56 se mostraría como '1,234.56' en inglés pero '1.234,56' en alemán. El formato de moneda asegura la colocación correcta del símbolo y el manejo de decimales: {{ price|localizedcurrency('EUR', 'de_DE') }} muestra '1.234,56 €'.
Formato de fechas sensible a la configuración regional
Use localizeddate para formatear fechas según diferentes convenciones culturales. Las fechas se muestran usando IntlDateFormatter con soporte completo de configuración regional. Ejemplo: {{ event_date|localizeddate('full', 'short', 'ja_JP') }} mostraría una fecha en formato japonés con fecha completa y hora corta.
Crear extractos de texto
Use el filtro truncate para crear texto de vista previa o extractos de contenido más largo. La opción preserve asegura que las palabras no se corten a la mitad. Ejemplo: {{ body|truncate(150, true) }} crea un extracto de 150 caracteres que termina en un límite de palabra.
Formatear texto para visualización
Use wordwrap para formatear texto para pantallas de ancho fijo o para añadir saltos de línea HTML a intervalos específicos. Útil para texto preformateado, visualización de código o crear diseños de poesía visual. Ejemplo: {{ preformatted_text|wordwrap(80, '<br>') }}
Tips
- El filtro time_diff usa automáticamente el sistema de traducción de Drupal, por lo que las cadenas de tiempo relativo como 'hace 2 horas' son traducibles y aparecerán en el idioma del usuario
- Para los filtros de internacionalización (localizeddate, localizednumber, localizedcurrency), asegúrese de que su instalación de PHP tenga la extensión intl habilitada, o estos filtros lanzarán un error en tiempo de ejecución
- El filtro truncate con preserve=true encontrará el siguiente espacio después del límite de longitud, potencialmente haciendo la salida más larga que la longitud especificada - use sin preserve para límites de longitud estrictos
- Al usar localizedcurrency, siempre especifique tanto el código de moneda como la configuración regional para un formato consistente en diferentes entornos
- El filtro shuffle convierte objetos Traversable a arrays, lo que puede tener implicaciones de rendimiento para conjuntos de datos grandes
- Todos los filtros de manipulación de texto (truncate, wordwrap) son seguros para multibyte y manejarán correctamente caracteres UTF-8 incluyendo emoji y escrituras no latinas