Verifikasi bidang tidak kosong

15

Apa metode terbaik untuk memeriksa apakah bidang kosong di templat simpul.

Dalam node - example.html.twig kita dapat menggunakan variabel "content".

Saya tidak bisa menggunakan cek seperti memeriksa blok

{% if content.field_example  %}

Saya dapat menggunakan sesuatu seperti ini:

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

Tetapi apa metode terbaik?

sainf
sumber
1
Gunakan proses hook_prep dan periksa secara program, mungkin tambahkan variabel indikator. Kalau tidak, apa yang ditulis 4k4.

Jawaban:

21

Seperti saya juga menulis di Bagaimana Anda bisa membuat bidang dari referensi entitas di templat node? [Drupal 8] , konten adalah array render yang berisi data yang disiapkan untuk ditampilkan.

Jika Anda ingin memeriksa atau membandingkan sesuatu, gunakan nilainya, yang tersedia pada objek simpul.

{% if node.field_example.value %}.

Perhatikan bahwa properti tergantung pada jenis bidang. Jika ini adalah bidang referensi, Anda harus menggunakan target_id sebagai gantinya. Tautan pertanyaan yang direferensikan ke lembar contekan API bidang entitas yang mencantumkan jenis bidang umum dan propertinya.

Berdir
sumber
Untuk bidang gambar {% node.field_article_image.target_id%}
Yogesh Kushwaha
13

Anda tidak dapat yakin tentang struktur array render di dalam konten, jadi ini mungkin bukan metode terbaik.

Ini mungkin solusi yang lebih baik:

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

Ini memeriksa apakah rendering bidang menghasilkan output apa pun.

Tapi ini tergantung, bagaimana Anda mengonfigurasi format bidang dan apa yang Anda coba lakukan. Misalnya, Anda bisa mengonfigurasi untuk menampilkan label jika bidang kosong. Maka Anda harus menyesuaikan ini. Jika Anda tidak bergantung pada output yang diberikan dan hanya ingin memeriksa, jika bidang memiliki nilai dalam database, gunakan objek node. Lihat jawaban Berdir.

4k4
sumber
Saya menganggap jawaban Berdir benar karena lebih fleksibel.
sainf
@ 4k4: Tidak |rendercukup karena masalah spasi putih acak dari templat bidang, Lihat tautan ini: Memeriksa bidang kosong di templat Twig itu rumit
Mojtaba Reyhani
@MojtabaReyhani: Terima kasih, temukan. Ditemukan di sana tautan ini drupal.org/node/2783633#comment-11510195 . Menambahkan ini ke kode.
4k4
4

Periksa apakah bidang tidak kosong di Templat ranting templat ( Koleksi Bidang ) : bidang-koleksi-item - bidang-layanan.html.twig

Instal Modul Nilai Ranting Bidang untuk mendapatkan nilai menggunakan " | field_value ", diikuti oleh " tidak kosong "

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

       ...

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

Solusi ini cukup anti peluru dan bahkan bekerja di reusealbe dan / atau templat yang dibagikan (mis. Shared node--teaser.html.twigdi berbagai bundel) karena

  • ini bekerja untuk semua tipe bidang
  • memeriksa apakah bidang itu ada
  • memeriksa apakah bidang tidak kosong
  • memeriksa apakah bidang tidak disembunyikan dalam mode tampilan

not ...isEmpty == trueDiperlukan double double , jika tidak, bidang yang tidak ada akan gagal dalam pemeriksaan. Saya juga percaya bahwa solusi saya jauh lebih cepat dan tahan terhadap kesalahan daripada pemeriksaan apa pun yang melibatkan rendering bidang.

Ini harus berfungsi untuk semua templat entitas, mis. Anda cukup mengganti node.field_xxxdengan paragraph.field_xxxdalam paragraph.html.twigfile templat

Hudri
sumber