Xác minh một trường không trống


15

Phương pháp tốt nhất để kiểm tra xem một trường có trống trong mẫu nút không.

Trong nút - example.html.twig chúng ta có thể sử dụng biến "nội dung".

Tôi không thể sử dụng kiểm tra như kiểm tra một khối

{% if content.field_example  %}

Tôi có thể sử dụng một cái gì đó như thế này:

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

Nhưng phương pháp tốt nhất là gì?


1
Sử dụng hook_pre process và kiểm tra theo chương trình, có thể thêm biến chỉ báo. Nếu không thì những gì 4k4 đã viết.

Câu trả lời:


21

Giống như tôi cũng đã viết trong Làm thế nào bạn có thể kết xuất các trường từ một tham chiếu thực thể trong các mẫu nút? [Drupal 8] , nội dung là một mảng kết xuất có chứa dữ liệu được chuẩn bị để hiển thị.

Nếu bạn muốn kiểm tra hoặc so sánh một cái gì đó, hãy sử dụng các giá trị thay thế, có sẵn trên đối tượng nút.

{% if node.field_example.value %}.

Lưu ý rằng tài sản phụ thuộc vào loại trường. Nếu đó là trường tham chiếu, bạn cần sử dụng target_id thay thế. Câu hỏi được tham chiếu liên kết đến bảng cheat API trường thực thể liệt kê các loại trường phổ biến và thuộc tính của chúng.


Đối với trường hình ảnh {% node.field_article_image.target_id%}
Yogesh Kushwaha

13

Bạn không thể chắc chắn về cấu trúc của mảng kết xuất bên trong nội dung, vì vậy đây có thể không phải là phương pháp tốt nhất.

Đây có thể là một giải pháp tốt hơn:

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

Điều này kiểm tra nếu kết xuất trường tạo ra bất kỳ đầu ra.

Nhưng điều này phụ thuộc vào cách bạn định cấu hình định dạng trường và những gì bạn cố gắng thực hiện. Ví dụ: bạn có thể đã cấu hình để hiển thị nhãn nếu trường trống. Sau đó, bạn phải điều chỉnh điều này. Nếu bạn không phụ thuộc vào đầu ra được kết xuất và chỉ muốn kiểm tra, nếu trường có giá trị trong cơ sở dữ liệu, hãy sử dụng đối tượng nút. Xem câu trả lời của Berdir.


Tôi coi Berdir trả lời đúng vì nó linh hoạt hơn.
sainf

@ 4k4: Điều đó |renderlà không đủ do các vấn đề về khoảng trắng ngẫu nhiên từ các mẫu trường, Xem liên kết này: Kiểm tra các trường trống trong các mẫu Twig rất phức tạp
Mojtaba Reyhani

@MojtabaReyhani: Cảm ơn bạn, tìm thấy tuyệt vời. Tìm thấy ở đó liên kết này drupal.org/node/2783633#comment-11510195 . Đã thêm mã này vào mã.
4k4

4

Kiểm tra xem trường không trống trong Mẫu khuôn mẫu ( Bộ sưu tập trường ) : trường-bộ sưu tập-mục - trường-services.html.twig

Cài đặt Mô-đun Giá trị Twig Trường để nhận giá trị bằng cách sử dụng " | field_value ", theo sau là " không trống "

{% 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 %}

Giải pháp này khá chống đạn và thậm chí hoạt động trong các mẫu reusealbe và / hoặc chia sẻ (ví dụ: chia sẻ node--teaser.html.twigqua nhiều gói) bởi vì

  • nó hoạt động cho tất cả các loại trường
  • nó kiểm tra nếu trường tồn tại
  • nó kiểm tra nếu trường không trống
  • nó kiểm tra xem trường không bị ẩn trong chế độ hiển thị

Tiêu cực kép not ...isEmpty == truelà cần thiết, nếu không, trường không tồn tại sẽ không kiểm tra. Tôi cũng tin rằng giải pháp của tôi nhanh hơn và có khả năng phục hồi các lỗi hơn bất kỳ kiểm tra nào liên quan đến kết xuất trường.

Điều này sẽ làm việc cho bất kỳ mẫu thực thể nào, ví dụ: bạn có thể chỉ cần thay thế node.field_xxxbằng paragraph.field_xxxtrong một paragraph.html.twigtệp mẫu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.