Mam warunek drukowania regionów w szablonie strony, ponieważ nie jest pusty , ale zawsze drukuje puste regiony bez względu na wszystko. Jaki jest właściwy sposób wykrywania pustych regionów?
Na przykład {% if page.local_tasks is not empty %}{{ page.local_tasks }}{% endif %}
drukuje <div class="region region-local-tasks"></div>
.
Jeśli renderuję region za themename_preprocess_page()
pomocą var_dump(drupal_render($variables['page']['highlighted']));
, otrzymam SafeString z tokenem zastępczym:
<div class="region region-highlighted"><drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder></div>
Więc technicznie region nie jest pusty, ale nic na to nie poradzę.
page.local_tasks
zawiera, gdy uważasz, że powinno być puste?Odpowiedzi:
TL; DR w tym przypadku polega na tym, że nie ma możliwości wiarygodnego sprawdzenia, czy region jest pusty, czy nie w szablonie.
W Drupal 8 w momencie, gdy jesteśmy na poziomie szablonu, nie jesteśmy w stanie stwierdzić, czy region ma treść, czy nie, ponieważ treść jest renderowana leniwie. Jest do tego otwarty problem Drupala 8 .
Aby to osiągnąć, prawdopodobnie będziesz musiał napisać CSS, który sprawdza, czy region jest pusty. Możesz spróbować użyć : pusty pseudo-selektor .
źródło
spróbuj zastosować filtry po renderowaniu, w ten sposób:
źródło
strip_tags
filtrze).W gałązce naprawdę powinieneś być w stanie:
Jednak być może istnieje coś w obrębie page.local_tasks (np. Puste znaczniki). Spróbuj wykonać następujące czynności:
źródło
debug
, masz na myślidump
? Co się stanie, jeśli to zrobisz{% if page.local_tasks %}Crazy magic{% endif %}
?page.local_tasks
nie jest puste. Jest pełen HTML. Zaktualizuję moją odpowiedź.To zadziałało dla mnie.
Wystarczająco proste.
źródło
Należy użyć
Renderer
usługi zamiastktóry jest przestarzały, więc:drupal_render()
Pozwoli to uniknąć generowania
drupal-render-placeholder
znacznika na wyjściu.Podobny problem: jak ręcznie zastąpić symbol zastępczy renderowania-drupala?
źródło
Spróbuj tego :
źródło
To faktycznie działa w moim przypadku
striptags akceptuje ciąg tagów do zachowania, więc możesz także dodawać dowolne tagi bez zawartości , takie jak
<form><img>
itp.źródło
Poniższe działa również, gdy włączone jest debugowanie gałązek:
źródło
Aby wykryć, czy region jest pusty, czy nie taki kod:
W powyższym kodzie sprawdza, czy region zadania_lokalne jest pusty, czy nie, a jeśli jest pusty, nie wydrukuje tego regionu
źródło