Twig Real Content - Ayudante para verificar regiones / contenido vacío
Proporciona un filtro y una prueba de Twig para determinar si una variable Twig (típicamente una región) contiene contenido significativo o está efectivamente vacía.
twig_real_content
Instalar
composer require 'drupal/twig_real_content:^1.0'
Overview
Twig Real Content resuelve un problema común en el desarrollo de temas de Drupal: determinar si una región o variable renderizada realmente contiene contenido visible versus solo marcado HTML de envoltura vacío. En el sistema de renderizado de Drupal, las regiones y áreas de contenido a menudo contienen elementos HTML de envoltura incluso cuando no hay contenido real para mostrar, lo que dificulta ocultar condicionalmente secciones vacías en las plantillas.
Este módulo proporciona tanto un filtro como una prueba de Twig llamados real_content que eliminan las etiquetas HTML (mientras preservan elementos significativos como imágenes, videos e iframes) y verifican si queda algún contenido real. Esto permite a los desarrolladores de temas mostrar u ocultar correctamente las regiones según si contienen contenido real y visible.
El módulo aborda el problema de larga data del núcleo de Drupal #953034 respecto a la dificultad de verificar regiones vacías en las plantillas Twig.
Features
- Proporciona una prueba Twig 'real_content' que devuelve TRUE si una variable contiene contenido significativo, FALSE si está vacía
- Proporciona un filtro Twig 'real_content' que devuelve el contenido limpio para procesamiento adicional
- Preserva inteligentemente los elementos que contienen contenido (img, video, iframe, embed, script, style, etc.) mientras elimina el marcado de envoltura vacío
- Maneja correctamente los placeholders de renderizado de Drupal para evitar falsos negativos con contenido de carga diferida
- Funciona con cadenas renderizadas y objetos MarkupInterface
- Lanza excepciones útiles cuando se pasan arrays no renderizados, guiando a los desarrolladores hacia el uso correcto
- Compatible con Drupal 9, 10 y 11
Use Cases
Mostrar condicionalmente regiones con contenido real
Usa la prueba real_content en tu page.html.twig para mostrar solo los envoltorios de región cuando contienen contenido real: {% if page.sidebar_first|render is real_content %}<aside class="sidebar">{{ page.sidebar_first }}</aside>{% endif %}
Ocultar secciones de contenido vacías
Al construir diseños personalizados, usa real_content para evitar mostrar secciones vacías: {% if content.field_body|render is real_content %}<div class="body-content">{{ content.field_body }}</div>{% endif %}
Limpiar la salida de región para procesamiento
Usa el filtro real_content para obtener contenido limpio para procesamiento adicional: {% set clean_content = page.sidebar_first|render|real_content %}
Prevenir divs de envoltura vacíos en la salida de Views
Al tematizar Views, usa real_content para asegurarte de no generar marcado de envoltura para resultados de vista o campos vacíos.
Tips
- Siempre renderiza la variable antes de usar la prueba o filtro real_content. Usa el patrón: {{ variable|render is real_content }}
- El módulo espera cadenas renderizadas - los arrays no renderizados lanzarán una TwigRealContentException con un mensaje útil
- Los elementos multimedia como imágenes, videos, iframes e incrustaciones se consideran 'contenido real' aunque sean etiquetas auto-cerradas
- Los placeholders de renderizado de Drupal se preservan para que el contenido de carga diferida no se identifique incorrectamente como vacío
- Para necesidades complejas de verificación de contenido, combina con el módulo Twig Capture para mayor control sobre cuándo ocurre el renderizado
Technical Details
Troubleshooting 3
La variable pasada a real_content no estaba renderizada. Aplica el filtro |render primero: {{ my_variable|render is real_content }}
Las etiquetas script y style se preservan como 'contenido real'. Si quieres ignorarlas, puede que necesites lógica personalizada o procesar el contenido de manera diferente.
El módulo preserva las etiquetas <drupal-render-placeholder> específicamente para manejar el renderizado diferido. Asegúrate de usar el filtro/prueba del módulo después de que la variable esté renderizada.