Bagaimana cara menambahkan variabel ke templat ranting bidang?


9

Pada halaman node saya ingin menambahkan judul node ke output bersama bidang lain yang lain (bidang contoh).

Saya telah membuat yang baru field--field-example.html.twigtetapi saya tidak dapat mengakses variabel judul simpul karena tidak tersedia di templat bidang.

Saya perlu menambahkan variabel ke dalam preprocess tema: themename.theme.

Bagaimana cara menambahkan variabel themename.themedan apa yang akan menjadi entri yang sesuai di field--field-example.html.twig?


Gunakan hook_preprocess_node untuk mengekstraksi nilai dari bidang yang ingin Anda gunakan dalam templat.

@IvanJaros, saya telah memperbarui pertanyaan sekarang.
Taylor Taff

Jawaban:


15

Karena Anda bertanya tentang meneruskan judul simpul sebagai variabel melalui file .theme, Anda bisa menggunakan template_preprocess_field untuk melakukan sesuatu seperti ini:

  function themename_preprocess_field(&$variables, $hook) {
    if ($variables['element']['#field_name'] == 'field_example') {
      $variables['node_title'] = $variables['element']['#object']->getTitle();
    }
  }

maka di Anda, field--field-example.html.twigAnda cukup menggunakan saja{{node_title}} untuk membuat judul simpul.

Lihat juga jawaban 4k4 di bawah ini.


Saya mencoba mengedit jawaban Anda untuk memasukkan jawaban yang diberikan oleh 4k4 karena sudah benar tetapi hasil edit saya ditolak karena dianggap tidak relevan ...
Taylor Taff

@TaylorTaff yang menyetujui pengeditan? Saya tidak pernah melihatnya. Akan berusaha mengedit untuk memasukkan jawaban di bawah.
Janey

@ Janey banyak pengguna dengan lencana yang cukup dapat meninjau pengeditan tersebut. Saya telah menandai jawaban Anda untuk ulasan selanjutnya. Satu pertanyaan lagi: Apakah Anda yakin itu $variables['element']['#object']->getTitle();bisa ditangkap preprocess_field? Karena ini sebenarnya akan menjawab pertanyaan saya di sini: drupal.stackexchange.com/questions/197497/…
nilsun

11

Ada objek simpul yang tersedia di variabel templat bidang, jadi Anda tidak perlu fungsi preprocess.

Untuk mendapatkan judul dari node dalam templat bidang:

{{ element['#object'].label }}

Ini menjawab pertanyaan tetapi sebagai jawaban lain oleh Janey akan lebih bermanfaat saya menambahkan ini ke jawaban itu dan ditandai sebagai diterima.
Taylor Taff

1
Tetapi pertanyaan Anda berada di bawah asumsi yang salah: "tetapi saya tidak dapat mengakses variabel judul simpul karena tidak tersedia di templat bidang."
4k4

Ya 4k4, Anda benar, pertanyaan saya salah.
Taylor Taff
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.