영역이 비어 있는지 어떻게 올바르게 감지합니까? [닫은]

비어 있지 않은 것처럼 페이지 템플리트에서 영역을 인쇄하기위한 조건이 있지만 무엇이든 상관없이 항상 빈 영역을 인쇄합니다. 빈 영역을 감지하는 올바른 방법은 무엇입니까?

예를 {% 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출력에서 태그가 생성되지 않습니다 .

비슷한 문제 : 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>