Twig에서 필드 데이터에 어떻게 액세스합니까?


15

다음과 같은 사용자 정의 블록 유형에 대한 목록 필드가 있습니다.

left|Align left
right|Align right

다음과 같이 Twig의 키에 액세스 할 수 있습니다.

{% block content %}
  {{ content.field_align }}  {# outputs 'right' #}
{% endblock %}

그러나 간단한 비교를 수행하면 출력 FALSE됩니다.

{{ kint(content.field_align == 'right') }}

다음 코드는를 반환합니다 TRUE.

{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}

"실제"문자열을 얻기위한 짧은 버전이 있으므로 Twigs 문자열 필터를 사용하고 깔끔하게 유지할 수 있습니까?


답변:


16

content 구성된 포맷터를 기반으로하는 렌더 배열을 포함합니다.

실제 값에 액세스하려면 엔티티 객체를 통해 값에 액세스하려고합니다. 일반적으로 예를 들어 템플릿에서 이미 사용할 수 있습니다 node. 귀하의 경우 block_content가 자체 템플릿없이 블록 컨텐츠에 렌더링되므로 약간 특별하므로 다음 yourtheme_preprocess_block($variables)과 같이 직접 사용할 수 있어야합니다 .

if (isset($variables['elements']['content']['#block_content'])) {
  $variables['block_content'] = $variables['elements']['content']['#block_content'];
}

그런 다음을 사용하여 필드 값에 액세스 할 수 있습니다 block_content.field_name.property. 따라서 귀하의 경우에는 block_content.field_align.value. 이 속성은 value대부분의 필드 유형, 참조 target_id용, ID 또는 entity참조 된 엔터티 개체에 사용할 수 있습니다 . 예, 해당 필드에 직접 액세스 할 수 있지만 항상 참조가 있는지 확인해야합니다. 그렇지 않으면 치명적인 오류나 예외가 발생할 수 있습니다. 예를 들어 용어 참조의 레이블에 액세스하려면로 참조하십시오 block_content.field_tags.entity.name.value.

필드 델타를 지정하지 않으면 기본값이 첫 번째입니다. 다른 델타에 액세스하려는 경우 등을 사용할 수 있습니다 entity.field_name.1.value. 그것들을 반복 할 수도 있습니다.

이것은 모두 PHP에 직접 매핑 $block_content->field_tags->entity->name->value되며 전처리 및 block_content가있는 다른 곳 에서도 수행 할 수 있습니다 .


답변 주셔서 감사합니다! 노드 개체를 사용할 수없는 (블록 하위 테마 "클래식") 블록 나뭇 가지 템플릿에서이 작업을 수행 할 때 값을 사전 처리하고 어떻게 든 주입해야합니까?
estrar

죄송합니다. block_content 부분이 없습니다. 답변을 업데이트했습니다.
Berdir

완전한! 이렇게하면 가치를 얻을 수 block_content.field_name.value 있습니다. 이해하도록 도와 주셔서 감사합니다!
estrar

6

다음은 렌더링 배열을 렌더링하고 그 값을 확인할 수있는 대안적인 템플릿 전용 방법입니다. Drupal 8 Twig에서 인쇄하면 렌더링 배열 인 변수가 자동으로 렌더링되므로 변수를 인쇄하는 것처럼 변수를 확인할 수 있습니다.

{{ kint(content.field_align|render == 'right') }}

또는 나중에 변수를 인쇄하는 경우 추가 렌더링을 저장하는 또 다른 옵션이 있습니다.

{% set field_align = content.field_align|render %}
{{ kint(field_align == 'right') }}

{{ field_align }}

매우 유용하고 잘 알고 있습니다! 입력 주셔서 감사합니다.
estrar

2

이 경우 Twig Field Value 모듈을 사용할 수 있습니다 . 필드 렌더 배열에서 부분 데이터를 가져올 수 있습니다. 예를 들어. content.field_name | field_value-필드 값을 얻습니다. IF 문에서 사용할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.