비어 있지 않은 것처럼 페이지 템플리트에서 영역을 인쇄하기위한 조건이 있지만 무엇이든 상관없이 항상 빈 영역을 인쇄합니다. 빈 영역을 감지하는 올바른 방법은 무엇입니까?
예를 {% 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>
따라서 기술적 으로이 지역은 비어 있지 않지만 나는 그것에 대해 아무것도 할 수 없습니다.
답변
TL; DR은 템플릿에 영역이 비어 있는지 여부를 확실하게 확인할 수있는 방법이 없다는 것입니다.
템플릿 레벨에있는 시점에서 Drupal 8에서는 컨텐츠가 느리게 렌더링되므로 해당 영역에 컨텐츠가 있는지 여부를 알 수 없습니다. 이에 대한 공개 Drupal 8 문제 가 있습니다.
이를 달성하기 위해해야 할 일은 영역이 비어 있는지 테스트하는 CSS를 작성하는 것입니다. : empty pseudo-selector 사용하여 시도 할 수 있습니다 .
답변
다음과 같이 렌더링 후 필터를 적용하십시오.
{% set has_sidebar_first = page.sidebar_first|render|striptags|trim is not empty %}
{% if has_sidebar_first %}
{# ... #}
{% endif %}
답변
나뭇 가지에서 당신은 정말로 할 수 있어야합니다 :
{% if page.local_tasks %}{{ page.local_tasks }}{% endif %}
그러나 page.local_tasks 내에 빈 마크 업과 같은 것이있을 수 있습니다. 다음을 시도하십시오 :
{% if page.local_tasks|striptags|trim %}{{ page.local_tasks }}{% endif %}
답변
이것은 나를 위해 일했습니다.
{% if page.sidebar_first|render|striptags %}
<aside id="sidebar-first" class="sidebar sidebar-first layout-sidebar-first" role="complementary">{{ page.sidebar_first }}</aside>
{% endif %}
충분히 간단합니다.
답변
대신에 Renderer
서비스 를 사용해야 합니다 더 이상 사용되지 않습니다.drupal_render()
$output = \Drupal::service('renderer')->renderRoot($some_array)
이렇게하면 drupal-render-placeholder
출력에서 태그가 생성되지 않습니다 .
답변
이 시도 :
{% if page.local_tasks|render|striptags|trim is not empty %}
{{ page.local_tasks }}
{% endif %}
답변
이것은 실제로 내 경우에 작동
{% if page.sidebar_second|render|striptags('<drupal-render-placeholder>')|trim|length > 0 %}
당신은 또한 무엇이든 추가 할 수 있도록 striptags은 계속 태그의 문자열을 받아 콘텐츠가없는 당신처럼있을 것으로 예상 태그 <form><img>
등