ตรวจสอบว่าฟิลด์ไม่ว่างเปล่า


15

เป็นวิธีที่ดีที่สุดในการตรวจสอบว่าเขตข้อมูลว่างเปล่าในแม่แบบโหนด

ในโหนด - example.html.twig เราสามารถใช้ตัวแปร "เนื้อหา"

ฉันไม่สามารถใช้เช็คเช่นเดียวกับการตรวจสอบบล็อก

{% if content.field_example  %}

ฉันสามารถใช้สิ่งนี้:

{% if content.field_example['#object'] is defined  %}

แต่วิธีที่ดีที่สุดคืออะไร?


1
ใช้ hook_preprocess และตรวจสอบโดยทางโปรแกรมซึ่งอาจเพิ่มตัวแปรตัวบ่งชี้ มิฉะนั้นสิ่งที่ 4k4 เขียน

คำตอบ:


21

เช่นเดียวกับที่ฉันเขียนไว้ในคุณจะแสดงผลฟิลด์จากการอ้างอิงเอนทิตีในเทมเพลตโหนดได้อย่างไร [Drupal 8]เนื้อหาคืออาร์เรย์การเรนเดอร์ที่มีข้อมูลเตรียมพร้อมสำหรับการแสดงผล

หากคุณต้องการตรวจสอบหรือเปรียบเทียบบางสิ่งให้ใช้ค่าแทนซึ่งมีอยู่บนวัตถุโหนด

{% if node.field_example.value %}.

โปรดทราบว่าคุณสมบัติขึ้นอยู่กับชนิดของฟิลด์ หากเป็นเขตข้อมูลอ้างอิงคุณต้องใช้ target_id แทน ลิงก์คำถามที่อ้างอิงไปยังชีท API ของฟิลด์เอนทิตีที่แสดงประเภทฟิลด์ทั่วไปและคุณสมบัติ


สำหรับฟิลด์รูปภาพ {% node.field_article_image.target_id%}
Yogesh Kushwaha

13

คุณไม่แน่ใจเกี่ยวกับโครงสร้างของเรนเดอร์เรนเดอร์ภายในเนื้อหาดังนั้นจึงเป็นไปไม่ได้วิธีที่ดีที่สุด

นี่อาจเป็นทางออกที่ดีกว่า:

{% if content.field_example|render|striptags|trim %}
  <p>field is not empty</p>
{% endif %}

เป็นการตรวจสอบว่าการเรนเดอร์ฟิลด์สร้างผลลัพธ์ใด ๆ

แต่ขึ้นอยู่กับว่าคุณกำหนดค่ารูปแบบฟิลด์อย่างไรและคุณพยายามทำอะไร ตัวอย่างเช่นคุณอาจกำหนดค่าให้แสดงป้ายกำกับหากช่องว่างเปล่า จากนั้นคุณต้องปรับเปลี่ยนนี้ หากคุณไม่ได้ขึ้นอยู่กับเอาต์พุตที่เรนเดอร์และต้องการตรวจสอบเฉพาะถ้าฟิลด์มีค่าในฐานข้อมูลให้ใช้ออบเจ็กต์โหนด ดูคำตอบของ Berdir


ฉันคิดว่าคำตอบของ Berdir นั้นถูกต้องเพราะมันยืดหยุ่นกว่า
sainf

@ 4k4: |renderไม่เพียงพอเนื่องจากปัญหาช่องว่างแบบสุ่มจากเทมเพลตฟิลด์โปรดดูที่ลิงก์นี้: การตรวจสอบฟิลด์ว่างในเทมเพลตทวิกนั้นซับซ้อน
Mojtaba Reyhani

@MojtabaReyhani: ขอบคุณมากค่ะ พบว่ามีการเชื่อมโยงนี้drupal.org/node/2783633#comment-11510195 เพิ่มสิ่งนี้ในรหัส
4k4

4

ตรวจสอบว่าข้อมูลไม่ว่างเปล่าในทวิ templating ( สนามเก็บ )
แม่แบบ : สนามคอลเลกชันรายการ - สนาม services.html.twig

ติดตั้งField Twig Value Moduleเพื่อรับค่าโดยใช้ " | field_value " ตามด้วย " ไม่ว่าง "

{% if content.field_work|field_value is not empty %}

       ...

{% endif %} 

1
{% if not (node.field_whatever.isEmpty == true) and content.field_whatever is defined %}
  <div class="whatever_markup">
    {{ content.field_whatever }}
  </div>
{% endif %}

โซลูชันนี้ค่อนข้างกันกระสุนและแม้กระทั่งทำงานใน reusealbe และ / หรือเทมเพลตที่ใช้ร่วมกัน (เช่นแชร์node--teaser.html.twigผ่านหลาย ๆ บันเดิล) เพราะ

  • ใช้งานได้กับฟิลด์ทุกประเภท
  • มันจะตรวจสอบว่าเขตข้อมูลที่มีอยู่
  • มันจะตรวจสอบว่าเขตข้อมูลไม่ว่างเปล่า
  • มันจะตรวจสอบว่าสนามไม่ได้ซ่อนอยู่ในโหมดการแสดงผล

ลบสองครั้งnot ...isEmpty == trueเป็นสิ่งที่จำเป็นมิฉะนั้นเขตข้อมูลที่ไม่มีอยู่จะล้มเหลวในการตรวจสอบ ฉันเชื่อว่าโซลูชันของฉันเร็วกว่าและยืดหยุ่นต่อข้อผิดพลาดมากกว่าการตรวจสอบใด ๆ ที่เกี่ยวข้องกับการแสดงผลฟิลด์

นี้จะทำงานสำหรับแม่นิติบุคคลใด ๆ เช่นคุณก็สามารถแทนที่node.field_xxxด้วยparagraph.field_xxxในparagraph.html.twigแฟ้มแม่แบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.