Tengo condiciones para imprimir regiones en mi plantilla de página, ya que no está vacía , pero siempre imprimirá regiones vacías sin importar qué. ¿Cuál es la forma correcta de detectar regiones vacías?
Por ejemplo, {% if page.local_tasks is not empty %}{{ page.local_tasks }}{% endif %}imprime <div class="region region-local-tasks"></div>.
Si renderizo la región themename_preprocess_page()con var_dump(drupal_render($variables['page']['highlighted']));, obtendré SafeString con token de marcador de posición:
<div class="region region-highlighted"><drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder></div>
Entonces, técnicamente la región no está vacía, pero no puedo hacer nada al respecto.

page.local_taskscontiene cuando sientes que debería estar vacío?Respuestas:
TL; DR para esto es que no hay forma de verificar de manera confiable si la región está vacía o no en la plantilla.
En Drupal 8 en el momento en que estamos en el nivel de plantilla, no podemos decir si la región tiene contenido o no porque el contenido se presenta de forma perezosa. Hay un problema abierto de Drupal 8 para esto.
Lo que probablemente tendrá que hacer para lograr esto es escribir CSS que pruebe si la región está vacía. Puede intentar usar usando : pseudo-selector vacío .
fuente
intenta aplicar filtros después de renderizar, así:
fuente
strip_tagsfiltro).En Twig realmente deberías poder hacer:
Sin embargo, tal vez haya algo dentro de page.local_tasks (como marcado vacío). Por favor intenta lo siguiente:
fuente
debug¿quieres decirdump? ¿Qué pasa si lo haces{% if page.local_tasks %}Crazy magic{% endif %}?page.local_tasksno está vacía. Está lleno de HTML. Actualizaré mi respuesta.Esto funcionó para mí.
Suficientemente simple.
fuente
Debería usar el
Rendererservicio en lugar deque está en desuso, entonces:drupal_render()Esto evitará generar
drupal-render-placeholderetiquetas en la salida.Problema similar: ¿Cómo reemplazar drupal-render-placeholder manualmente?
fuente
prueba esto :
fuente
Esto realmente funciona en mi caso
striptags acepta una cadena de etiquetas para guardar, por lo que también puede agregar las etiquetas sin contenido que espera tener, como
<form><img>etc.fuente
Lo siguiente también funciona cuando la depuración de ramitas está habilitada:
fuente
Para detectar si la región está vacía o no código como este:
{% if page.local_tasks%} {{page.local_tasks}} {% terminara si %}En el código anterior, comprueba si la región local_tasks está vacía o no y, si está vacía, no imprimirá esa región
fuente