J'ai des conditions pour imprimer des régions dans mon modèle de page car il n'est pas vide , mais il imprimera toujours les régions vides quoi qu'il arrive. Quelle est la bonne façon de détecter les régions vides?
Par exemple, {% if page.local_tasks is not empty %}{{ page.local_tasks }}{% endif %}
imprime <div class="region region-local-tasks"></div>
.
Si je rend la région themename_preprocess_page()
avec var_dump(drupal_render($variables['page']['highlighted']));
, j'obtiendrai SafeString avec un jeton d'espace réservé:
<div class="region region-highlighted"><drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder></div>
Donc, techniquement, la région n'est pas vide mais je ne peux rien y faire.
page.local_tasks
contient-il lorsque vous pensez qu'il doit être vide?Réponses:
TL; DR car il n'y a aucun moyen de vérifier de manière fiable si la région est vide ou non dans le modèle.
Dans Drupal 8, au moment où nous sommes au niveau du modèle, nous ne pouvons pas dire si la région a du contenu ou non parce que le contenu est rendu paresseusement. Il y a un problème ouvert avec Drupal 8 pour cela.
Ce que vous devrez probablement faire pour y parvenir est d'écrire du CSS qui teste si la région est vide. Vous pouvez essayer d'utiliser en utilisant : pseudo-sélecteur vide .
la source
essayez d'appliquer des filtres après le rendu, comme ceci:
la source
strip_tags
filtre).En brindille, vous devriez vraiment pouvoir faire:
Cependant, il y a peut-être quelque chose dans page.local_tasks (comme un balisage vide). S'il vous plaît essayez ce qui suit:
la source
debug
que tu veux diredump
? Que se passe-t-il si vous le faites{% if page.local_tasks %}Crazy magic{% endif %}
?page.local_tasks
n'est pas vide. Il est plein de HTML. Je mettrai à jour ma réponse.Cela a fonctionné pour moi.
Assez simple.
la source
Vous devez utiliser le
Renderer
service au lieu dequi est obsolète, donc:drupal_render()
Cela évitera de générer une
drupal-render-placeholder
balise dans la sortie.Problème similaire: Comment remplacer manuellement drupal-render-placeholder?
la source
essaye ça :
la source
Cela fonctionne réellement dans mon cas
striptags accepte une chaîne de balises à conserver, vous pouvez donc également ajouter toutes les balises sans contenu que vous attendez, comme
<form><img>
etc.la source
Ce qui suit fonctionne également lorsque le débogage de brindilles est activé:
la source
Pour détecter si la région est vide ou pas un code comme celui-ci:
Dans le code ci-dessus, il vérifie si la région local_tasks est vide ou non et s'il est vide, il n'imprimera pas cette région
la source