Saya memiliki bidang gambar pada tipe konten saya (field_hero_image).
Saya tidak ingin membuatnya dalam file node.html.twig. Namun, saya DO ingin merendernya di file page.html.twig. Secara khusus, saya ingin merendernya di samping judul halaman.
Kode apa yang akan saya gunakan dalam file page.html.twig untuk mengakses bidang level node dan merendernya?
(Ada pertanyaan serupa yang diposting, tetapi saya tidak dapat menggunakan jawaban yang disediakan di sana untuk menyelesaikan masalah saya.)
Ini untuk tema Drupal 8.
Jawaban:
Setelah melakukan sedikit lebih banyak riset, saya dapat menemukan cukup banyak pertanyaan lain dan di drupal.org untuk mencapai apa yang ingin saya lakukan.
Tidak diperlukan pra-pemrosesan untuk jawaban ini, jadi tidak ada kode yang perlu ditambahkan ke file mytheme.theme Anda.
Semua variabel ini sudah dapat diakses di page.html.twig secara default.
Untuk merender nilai default bidang di dalam page.html.twig, Anda biasanya menggunakan variabel Twig seperti pada
{{ node.field_some_name.value }}
.Jika Anda memiliki bidang gambar, dan ingin merender URL ke gambar yang disimpan di bidang itu di dalam halaman.html.twig template, Anda akan menggunakan
{{ file_url(node.field_some_image.entity.fileuri) }}
.Terakhir, jika Anda ingin merender judul sebuah simpul di dalam template page.html.twig, Anda akan menggunakannya
{{ node.label }}
.Saya juga belajar bagaimana menggunakan beberapa persyaratan Ranting untuk masalah khusus saya, tetapi itu berada di luar cakupan pertanyaan / jawaban ini.
sumber
file_url()
dalam dokumen ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) melakukan hal ini, jadi, dipilih.page.html.twig
?Ada tiga metode praktis untuk bekerja dengan ini, yang semuanya menghemat waktu Anda menggali dalam array render yang rumit.
Menggunakan Display Suite (dengan submodule ds_extras) Anda dapat menetapkan blok wilayah ("wilayah blok") yang merupakan mode tampilan yang berbeda (yaitu hanya satu yang berisi gambar pahlawan). Dengan demikian Anda mendapatkan dua mode tampilan berbeda yang ditampilkan sekaligus. Perhatikan bahwa beberapa kait praproses mungkin tidak menyala seperti yang Anda harapkan jika Anda melakukan ini.
The Modul twig_tweak sangat menyederhanakan tugas-tugas tersebut dan dapat memberikan pernyataan ranting mudah bagi nilai-nilai lapangan. Lihatlah lembar contekan untuk beberapa kegunaan umum:
{{ drupal_field('field_image', 'node', 1) }}
Fungsi tanda tangan adalah:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)
The twig_field_value modul membuat pernyataan ranting sederhana. Per README.txt:
<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />
Jika saya tahu ini sebelumnya, itu akan menyelamatkan saya banyak waktu!
sumber
{{ node.field_some_name.value }}
jangan membuat bidang. Itu tidak memanggil sistem tema lengkap (fungsi preprocess, template, dll). OTOH, jika Anda menggunakantwig_tweak
modul, Anda bisa mendapatkan bidang yang sepenuhnya diterjemahkan dengan{{ node.field_some_name|view }}