Saya memiliki bidang daftar untuk jenis blok khusus yang terlihat seperti ini:
left|Align left
right|Align right
Saya dapat mengakses kunci di Ranting dengan melakukan sesuatu seperti ini:
{% block content %}
{{ content.field_align }} {# outputs 'right' #}
{% endblock %}
Namun, jika saya melakukan perbandingan sederhana, hasilnya FALSE
.
{{ kint(content.field_align == 'right') }}
Kode berikut kembali TRUE
.
{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}
Apakah ada versi yang lebih pendek untuk mendapatkan string "nyata" sehingga saya dapat menggunakan filter string Ranting dan menjaganya tetap rapi?
Jawaban:
content
berisi array render berdasarkan formatters yang dikonfigurasi.Jika Anda ingin mengakses nilai aktual, Anda ingin mengaksesnya melalui objek entitas. Biasanya, itu sudah tersedia untuk template Anda, misalnya
node
. Untuk kasus Anda, ini agak istimewa karena block_content di-render dalam konten blok tanpa templatnya sendiri, jadi Anda harus membuatnya sendiriyourtheme_preprocess_block($variables)
seperti ini:Kemudian, Anda dapat mengakses nilai bidang dengan
block_content.field_name.property
. Jadi dalam kasus Andablock_content.field_align.value
,. Properti inivalue
untuk sebagian besar jenis bidang, untuk referensi, Anda dapat menggunakantarget_id
ID atauentity
objek entitas yang direferensikan. Ya, Anda dapat langsung mengakses bidang itu, tetapi pastikan untuk selalu memeriksa bahwa ada referensi jika tidak, Anda dapat berakhir dengan kesalahan fatal atau pengecualian. Untuk mengakses label referensi istilah misalnya, Anda dapat mengaksesnya sebagaiblock_content.field_tags.entity.name.value
.Jika Anda tidak menentukan delta bidang, standarnya adalah yang pertama. Jika Anda ingin mengakses delta yang berbeda, Anda dapat menggunakan
entity.field_name.1.value
dan sebagainya. Anda juga dapat mengulanginya.Ini semua peta langsung ke PHP, Anda juga dapat melakukannya
$block_content->field_tags->entity->name->value
di preprocess dan tempat-tempat lain di mana Anda memiliki block_content.sumber
block_content.field_name.value
Terima kasih telah membantu saya memahami!Inilah cara alternatif, hanya templat yang memungkinkan Anda membuat render array dan memeriksa nilainya (memungkinkan memeriksa variabel seolah-olah Anda sedang mencetaknya, karena mencetak di Drupal 8 Twig secara otomatis membuat variabel yang merupakan array render):
Atau opsi lain untuk menyimpan render tambahan jika Anda mencetak variabel nanti:
sumber
Anda dapat menggunakan modul Nilai Bidang Ranting dalam kasus ini. Memungkinkan untuk mendapatkan data parsial dari array render bidang. Misalnya content.field_name | field_value - dapatkan nilai bidang. Anda dapat menggunakannya dalam pernyataan IF
sumber