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
2,335 sites
20
drupal.org

Instalar

Drupal 11, 10, 9 v1.0.2
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
TwigRealContentException: expects rendered strings as value, array given

La variable pasada a real_content no estaba renderizada. Aplica el filtro |render primero: {{ my_variable|render is real_content }}

La región aparece vacía pero contiene JavaScript o CSS

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 contenido de carga diferida se marca incorrectamente como vacío

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.