Tenho condições para imprimir regiões no meu modelo de página como não está vazio , mas ele sempre imprimirá regiões vazias, não importa o quê. Qual é a maneira correta de detectar regiões vazias?
Por exemplo, {% if page.local_tasks is not empty %}{{ page.local_tasks }}{% endif %}
imprime <div class="region region-local-tasks"></div>
.
Se eu renderizar a região themename_preprocess_page()
com var_dump(drupal_render($variables['page']['highlighted']));
, obterá o SafeString com o token de espaço reservado:
<div class="region region-highlighted"><drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder></div>
Então, tecnicamente , a região não está vazia, mas não posso fazer nada.
page.local_tasks
contém quando você acha que deve estar vazio?Respostas:
TL; DR para isso é que não há como verificar com segurança se a região está vazia ou não no modelo.
No Drupal 8, no momento em que estamos no nível do modelo, não podemos dizer se a região tem conteúdo ou não, porque o conteúdo é renderizado preguiçosamente. Há um problema aberto do Drupal 8 para isso.
O que você provavelmente terá que fazer para conseguir isso é escrever CSS que teste se a região está vazia. Você pode tentar usar : pseudo-seletor vazio .
fonte
tente aplicar filtros após a renderização, assim:
fonte
strip_tags
filtro).No galho, você realmente deve ser capaz de fazer:
No entanto, talvez exista algo dentro do page.local_tasks (como marcação vazia). Por favor, tente o seguinte:
fonte
debug
que quer dizerdump
? O que acontece se você fizer{% if page.local_tasks %}Crazy magic{% endif %}
?page.local_tasks
não está vazio. Está cheio de HTML. Vou atualizar minha resposta.Isso funcionou para mim.
Simples o suficiente.
fonte
Você deve usar o
Renderer
serviço em vez deque está obsoleto, então:drupal_render()
Isso evitará gerar
drupal-render-placeholder
tags na saída.Problema semelhante: como substituir o drupal-render-placeholder manualmente?
fonte
tente isto:
fonte
Isso realmente funciona no meu caso
striptags aceita uma série de tags para manter, para que você também possa adicionar as tags sem conteúdo que deseja, como
<form><img>
etc.fonte
O seguinte também funciona quando a depuração de galho está ativada:
fonte
Para detectar se a região está vazia ou não tem um código como este:
No código acima, ele verifica se a região local_tasks está vazia ou não e se vazia, não imprimirá essa região
fonte