การเข้าถึงแต่ละฟิลด์ในเทมเพลต Drupal 8 views

ฉันมีปัญหาในการทำบางสิ่งที่ฉันคิดว่าควรจะเป็น drupal 8 views ที่ค่อนข้างง่าย

ฉันมีเนื้อหาประเภทที่เรียกว่าประเทศ ฉันต้องการแสดงโหนดประเทศล่าสุด 3 รายการบนหน้าแรกของฉันในบล็อกการดู แต่ละประเทศจะแสดงพร้อมกับคลาส "views-row" บน div คอนเทนเนอร์ ฉันใช้ views--view--unformatted--countries--block_1.tpl เพื่อเทมเพลตเอาต์พุต

ฉันต้องการส่งออกมาร์กอัปต่อไปนี้:

<a class="view-row-1" href="/th/link/to/node">
    <img src="source-of-teaser-image.png">
    <h3>Title of node</h3>
</a>

<a class="view-row-2" href="/th/link/to/node">
    <img src="source-of-teaser-image.png">
    <h3>Title of node</h3>
</a>

<a class="view-row-3" href="/th/link/to/node">
    <img src="source-of-teaser-image.png">
    <h3>Title of node</h3>
</a>

ปัญหาที่ฉันพบคือการเข้าถึงแต่ละฟิลด์ในเทมเพลต หากฉันใช้โหมดมุมมอง ฉันสามารถเข้าถึงแต่ละฟิลด์ได้ หากฉันเลือก "แสดงฟิลด์" ในมุมมอง ฉันสามารถเพิ่มฟิลด์สำหรับ "ตัวนับผลลัพธ์การดู" และ "เส้นทาง" ซึ่งจะอนุญาตให้ฉันเพิ่มคลาส "view-row-N" และเชื่อมโยงแท็กกับโหนด แต่ฉันไม่สามารถเข้าถึงแต่ละฟิลด์ได้ ฉันมีตัวแปร {{row.content}} แต่ความพยายามใด ๆ ที่จะเจาะลึกเข้าไปในตัวแปร (เช่น row.content.field_name) ไม่ได้ช่วยอะไรเลยและการเรียก {{dump(row.content)}} ทำให้เว็บไซต์ขัดข้อง

ฉันไม่สามารถส่งออกสิ่งนี้เป็นโหมดมุมมองได้ด้วยเหตุผล 2 ประการ ฉันไม่สามารถเข้าถึงช่อง "ตัวนับผลลัพธ์การดู" หรือ "เส้นทาง" ในโหมดมุมมองได้ และแม้ว่าฉันจะมีตัวแปรเหล่านี้ แต่บางช่องก็อาจซ้อนอยู่ในช่องอื่น (รูปภาพและชื่อจะซ้อนอยู่ภายใน )

ฉันรู้สึกว่าสิ่งนี้ควรจะง่ายเหมือนกัน

<a class="view-row-{{ row.content.view_result_counter }}" href="/th{{ row.content.path }}">

ฯลฯ แต่ฉันได้ลองทุกอย่างที่คิดได้แล้ว ฉันกำลังเดินผิดทางหรือเปล่า? ฉันกับทวิกยังไม่เข้ากันได้เลย...


person Kaizen9001    schedule 18.10.2016    source แหล่งที่มา


คำตอบ (6)


ฉันคิดวิธีใช้ kint แล้ว

ภายใน views-view-unformatted.html.twig ของคุณให้ใช้โค้ดต่อไปนี้เพื่อแสดงแต่ละฟิลด์ของคุณ:

{% for row in rows %}

{{ row.content['#view'].style_plugin.render_tokens[ loop.index0 ]['{{ YOUR_FIELD_NAME }}'] }}

{% endfor %}
person Ibrahim Samir    schedule 31.03.2017
comment
+1 โหวตให้กับคำตอบนี้และคำถาม - คำตอบ (และคำถาม) นี้สามารถช่วยผู้ที่ต้องการมาร์กอัป (เช่น <script>) / js) ให้ส่งออกในแถว/ฟิลด์ผลลัพธ์การดู - สิ่งเหล่านี้ถูกกรองออกด้วยเหตุผลด้านความปลอดภัย แต่หลายคนโต้แย้งอย่างสมเหตุสมผล (ในใจของฉัน) ว่ามีเพียงผู้ดูแลระบบที่ได้รับอนุญาตเท่านั้นที่สามารถจัดการมุมมองได้ตั้งแต่แรก! ดู drupal.org/project/views/issues/853880 drupal.org/project/views/issues/417956 และ drupal.org/forum/support/ หลังการติดตั้ง/2009-10-16/ ขอบคุณอีกครั้ง - person therobyouknow; 17.10.2018

การใช้โหมดเนื้อหา/มุมมองใช้งานได้ในกรณีของคุณ

1/ ใน "views-view-unformatted.html.twig" คุณสามารถใช้ "loop.index" ในลูป "for" เพื่อรับดัชนีของแถวปัจจุบันและเพิ่มลงในตัวแปร "row_classes"

2/ในเทมเพลตทวิกสำหรับโหนด คุณสามารถใช้สิ่งที่ต้องการ:

<a href="/th{{ path('entity.node.canonical', {'node': node.id}) }}">
    {{ content.field_img }}
    {{ node.getTitle()}}
</a>

3/คุณอาจจะได้รับ html พิเศษ แต่คุณสามารถกำจัดส่วนใหญ่ได้โดยการแทนที่เทมเพลตที่เกี่ยวข้อง

person progzy    schedule 21.10.2016

ฉันไม่แน่ใจว่าเป็นไปตามที่คุณคาดหวังหรือไม่ แต่คุณสามารถแทนที่เทมเพลตฟิลด์ได้:

  1. เปิดใช้งานการแก้ไขข้อบกพร่อง Twig: https://www.drupal.org/node/1903374
  2. ตรวจสอบเพจของคุณในเบราว์เซอร์ (หากไซต์อยู่ในโหมดแก้ไขข้อบกพร่อง จะมีความคิดเห็นในรูปแบบ html พร้อมเส้นทางไปยังเทมเพลตสำหรับแต่ละองค์ประกอบ) ตัวอย่างเช่น นี่คือเทมเพลตฟิลด์: core/themes/stable/templates/views/views-view-fields.html.twig
  3. คัดลอกเทมเพลตที่จำเป็นลงในโฟลเดอร์ธีมของคุณ
  4. เพิ่มหรือแก้ไขมาร์กอัป

คุณสามารถแก้ไขข้อบกพร่องของเทมเพลตได้โดยใช้ {{ dump(variable) }} หรือ {{ kint(variable) }}

person fadehelix    schedule 21.10.2016

ในกรณีของคุณ คุณควรใช้ views-view-fields--countries--block_1.html.twig แทน views-view-unformatted--countries--block_1.html ไฟล์ทวิ

เทมเพลตช่องมุมมองจะวนซ้ำในทุกแถวของผลลัพธ์ views-view-fields--countries--block_1.html.twig ของคุณควรมีโค้ดด้านล่าง -

<div>
  <a class="view-row" href="/th{{variable-to-print-path }}">
   <img src="{{ image-path }}">
   <h3>{{ fields.title.content</h3>
  </a>
</div>

คุณสามารถตรวจสอบอาร์เรย์ของเขตข้อมูลได้โดยใช้ฟังก์ชัน kint เช่น - {{ kint(fields) }}

ตรวจสอบเส้นทางรูปภาพและตัวแปรเส้นทางจุดยึดจากเอาต์พุตของฟังก์ชัน kint

หากคุณต้องการทำสิ่งนี้ใน views-view-unformatted--countries--block_1.html ทวิก จากนั้นคุณก็จะสามารถเข้าถึงค่าของฟิลด์ได้ดังนี้ -

{% for row in rows %}
  {% set photo = file_url(row['content']['#row']._entity.field_page_photo.entity.fileuri) %}          
  <li><img src={{ photo }} class="img-responsive img-circle"></li>
{% endfor %}
person Renuka Kulkarni    schedule 27.11.2017

วิธีแก้ไขคือใช้เทมเพลตฟิลด์มุมมองอย่างง่าย

ฉันสร้างเทมเพลตใหม่ภายใต้โฟลเดอร์ธีม/เทมเพลต:

views-view-fields--VIEW-NAME.html.twig

และตอนนี้คุณสามารถเข้าถึงค่าฟิลด์ของคุณได้ดังนี้:

{{ fields.field_NAME.content }}
person Viswa    schedule 25.02.2019

หากคุณต้องการเข้าถึงแต่ละฟิลด์ใน Views Twig Template พร้อมกับข้อมูลแถว ให้แทนที่ Views Fields Template ในธีมที่คุณกำหนดเอง:

views-view-fields--VIEW-NAME.html.twig

หากต้องการรับดัชนีแถวในไฟล์เดียวกัน ให้ใช้:

{{ row.index }}

person Heena Suman    schedule 21.06.2020