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_tasks
contiene 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_tags
filtro).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_tasks
no está vacía. Está lleno de HTML. Actualizaré mi respuesta.Esto funcionó para mí.
Suficientemente simple.
fuente
Debería usar el
Renderer
servicio en lugar deque está en desuso, entonces:drupal_render()
Esto evitará generar
drupal-render-placeholder
etiquetas 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:
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