У меня есть условие для печати областей в моем шаблоне страницы, так как он не пустой , но он всегда будет печатать пустые области, несмотря ни на что. Как правильно определять пустые регионы?
Например, {% if page.local_tasks is not empty %}{{ page.local_tasks }}{% endif %}
распечатывает <div class="region region-local-tasks"></div>
.
Если я отобразлю регион themename_preprocess_page()
с помощью, var_dump(drupal_render($variables['page']['highlighted']));
я получу SafeString с токеном-заполнителем:
<div class="region region-highlighted"><drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder></div>
Итак, технически регион не пустой, но я ничего не могу с этим поделать.
page.local_tasks
содержится, когда вы чувствуете, что оно должно быть пустым?Ответы:
TL; DR для этого заключается в том, что нет способа надежно проверить, является ли регион пустым или нет в шаблоне.
В Drupal 8 в тот момент, когда мы находимся на уровне шаблонов, мы не можем сказать, есть ли в регионе контент или нет, потому что контент воспроизводится лениво. Существует открытая проблема Drupal 8 для этого.
Для этого вам, вероятно, придется написать CSS, который проверяет, является ли область пустой. Вы можете попробовать использовать : empty псевдоселектор .
источник
попробуйте применить фильтры после рендера, вот так:
источник
strip_tags
фильтра).В ветке вы действительно должны уметь:
Однако, возможно, что-то есть внутри page.local_tasks (например, пустая разметка). Пожалуйста, попробуйте следующее:
источник
debug
что имеете в видуdump
? Что произойдет , если вы делаете{% if page.local_tasks %}Crazy magic{% endif %}
?page.local_tasks
это не пусто. Это полно HTML. Я обновлю свой ответ.Это сработало для меня.
Достаточно просто.
источник
Вы должны использовать
Renderer
сервис вместочто устарело, так чтоdrupal_render()
Это позволит избежать генерации
drupal-render-placeholder
тега в выводе.Подобная проблема: как заменить drupal-render-placeholder вручную?
источник
попробуй это :
источник
Это на самом деле работает в моем случае
striptags принимает строку тегов для хранения, поэтому вы также можете добавить любые теги без содержимого, которые вы ожидаете, например, и
<form><img>
т. д.источник
Следующее также работает, когда включена отладка веток:
источник
Чтобы определить, является ли регион пустым или нет кода, как это:
В приведенном выше коде он проверяет, является ли регион local_tasks пустым или нет, и если он пуст, он не будет печатать этот регион.
источник