나뭇 가지 템플릿의 여러 값 콘텐츠 필드를 반복


23

템플릿 field_admin_tags에서 필드 렌더링을 제어해야합니다 node.html.twig.

작동합니다 :

  • {{ content.field_admin_tags }} — 모든 것을 렌더링합니다 (레이블 + 모든 필드 값)
  • {{ content.field_admin_tags.0 }} — 필드에서 첫 번째 값만 렌더링하며 레이블은 없습니다.

문제 : 태그 주변의 마크 업을 제어 할 수 없습니다 (예 :) <ul><li>...</li></ul>.

그래서 내 생각은 렌더 배열반복하는 것이 었습니다 .

그러나 그것은 작동하지 않습니다 :

{% for tag in content.field_admin_tags %}
  {{ tag }}
{% endfor %}

나는 얻는다 : Exception: Object of type Drupal\node\Entity\Node cannot be printed.

렌더 배열의 키 / 값과 필드 내부의 항목을 반복 한다고 생각 합니다 (각 루프에서 "X"를 인쇄하면이 필드에 2 ~ 3 개의 값만있는 동안 20 X가 나타납니다) .

내가 반복하고 싶은 content.field_admin_tags.0, content.field_admin_tags.1

이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 감사.


답변:


15

필드 잔가지에서이 문제를 해결할 수 있습니다. 기존 루프를 사용하여 필드 항목을 반복 할 수 있습니다.

node.html.twig

{{ content.field_admin_tags }}

field--field-admin-tags.html.twig

<ul{{ attributes }}>
  {% for item in items %}
    <li>{{ item.content }}</li>
  {% endfor %}
</ul>

이 예는 <div>로 대체 됩니다 <ul>. {{ attributes }}필드 템플릿을 제거 하거나 무시 하지 마십시오. 빠른 편집을 중단 할 수있는 사항 및 해결 방법무엇입니까?를 참조하십시오 .


이것은와 부모 템플릿에서 호출{{ content.field_admin_tags }}
aydow

23

4k4에 동의하면 필드 템플릿이 가장 좋은 장소입니다. 엔터티 템플릿 (예 : 노드)에서 실제로 원하는 경우 다음과 같이 할 수 있습니다.

{% for key, item in content.field_tags if key|first != '#' %}
  <div class="item-{{ key + 1 }}">{{ item }}</div>
{% endfor %}

그러나 솔직히 나는 그것이 추악한 것 같아 필드 템플릿이 올바른 장소입니다.


1
동의합니다. 조금 추악합니다. ;) 그래도 코드 스 니펫에 감사드립니다.
AngularChef

entites의 다른 유형과 완벽하게 작동
크리스토프 CARON

11

나와 마찬가지로 노드의 나뭇 가지 템플릿에서 단락을 반복하는 방법을 찾고 있다면 다음과 같이하십시오.

값이 여러 개인 단락 필드가있는 노드가 있고 컨텐츠 편집기가 여러 단락을 작성할 수 있고 노드 나뭇 가지 템플리트에서 각 단락을 반복하려는 경우 (예 : 각 단락 주위에 랩퍼 추가) :

{% for key,value in node.my_paragraph_field.value %}
    {{ content.my_paragraph_field[key] }}
{% endfor %}

업데이트 : 내용을 사용하지 않고 모든 단락을 인쇄하는 다른 방법을 찾아야했습니다. content 변수에는 노드의 '디스플레이 관리'섹션에서 설정 한 모든 것이 포함되어 있지만 현재 작업 방법은 실제로 노드 나뭇 가지 파일의 모든 데이터에 액세스 할 수 있기 때문에 '디스플레이 관리'또는 레이아웃을 사용하지 않는 것입니다. 이미지 스타일 적용 또는 날짜 형식 설정과 같은 '디스플레이 관리'에서 수행 할 설정을 직접 나뭇 가지로 수행 할 수 있습니다.

나에게 이것은 내가 보는 모든 것이 나뭇 가지 파일에서 나온다는 것을 알고 있기 때문에 이점이 있으며 어딘가에 클래스를 추가 할 수있는 모호한 필드 설정을 찾을 필요가 없습니다. 그래서 내가 볼 수있는 모든 것은 한곳 (노드 나뭇 가지 파일)에서 왔으며 나뭇 가지 파일과 디스플레이 관리 화면의 조합이 아닙니다.

어쨌든 멋진 Twig Tweak 모듈을 사용하여 content 변수를 사용하지 않고 노드의 나뭇 가지 파일에 다중 값 단락 필드를 인쇄하는 방법은 다음과 같습니다.

{% for item in node.field_paragraphs %}
    {{ drupal_entity('paragraph', item.target_id) }}
{% endfor %}

1

#itemsTwig에서 길이를 알 수없는 루프를 만들 때이 속성이 유용하다는 것을 알았습니다 .

print number of values within field:
{{ content.field_admin_tags['#items']|length }}

---

{# remember length in variable (minus 1 because it starts from 0): #}
{% set numTagsIndex = content.field_admin_tags['#items']|length - 1 %}

{# loop until the max value is reached: #}
{% for i in 0..numTagsIndex %}
  {{ content.field_admin_tags[i] }}
{% endfor %}

0

단락 필드 내의 필드 주위에 추가 랩퍼를 배치하거나 특정 이유로 특정 단락 참조 필드 값을 필요로하는 경우 다음을 수행 할 수 있습니다.

{% for key,value in node.paragraph_field_name.value %}

<div class="example-wrapper">
{{ content.paragraph_field_name[key]['#paragraph'].field_content.value }}
</div>

{% endfor %}

를 수행 {{kint(content.paragraph_field_name[key])}}하면 배열의 [ '#paragraph'] 부분에서 필드에 액세스 할 수 있음을 알 수 있습니다.

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