Bagaimana cara saya menambahkan variabel untuk templat Ranting di fungsi preproses saya?


10

Saya menggunakan kode berikut untuk memproses ulang variabel untuk templat saya:

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
  $vars['image']['#thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars ['image']['#uri']);
  $vars['image']['#fullimage'] = file_create_url($vars ['image']['#uri']);
}

Variabel #uri sudah ada, dan jika saya memodifikasinya semuanya berfungsi dengan baik. Tapi saya perlu menambahkan variabel tambahan di sini karena saya perlu dua gaya berbeda dari gambar yang sama. Tetapi hanya menambahkan variabel-variabel ke array tidak bekerja.

Jika saya membuang variabel yang tersedia di templat Twig saya {{ dump(_context|keys) }}, saya tidak melihat variabel yang saya tambahkan di sana. Jika saya mencoba menggunakannya di template saya, tidak ada yang dimasukkan.

Saya bisa melihat bahwa nilai ditambahkan ke array, ketika saya membuang variabel gambar di tema yang membuat seluruh bidang, saya melihat variabel saya di array. Tapi mereka masih belum tersedia di templat yang membuat variabel gambar itu sendiri.

Apa lagi yang harus saya lakukan untuk menambahkan variabel dalam fungsi preproses saya yang dapat saya gunakan dalam templat Ranting saya?


Anda memiliki ruang antara nama array $varsdan kunci Anda (misalnya ['image']). Saya cukup yakin itu tidak diizinkan.
mesin lainnya

Saya menghapus spasi, sebenarnya tidak masalah dan saya memiliki hasil yang sama dengan atau tanpa spasi. Spasi berasal dari kode yang saya salin dari sebuah contoh.
Mad Scientist

Apakah Anda mengganti nama fungsinya? Seharusnya tidak template_preprocess_imagegallery_formattetapi 'template' harus diganti dengan tema atau nama modul Anda. Anda juga perlu cache yang jelas.
mesin lainnya

Jawaban:


8

Saya akhirnya memecahkan masalah, ternyata masalahnya adalah saya mencoba menambahkan variabel dalam preprocessor yang salah. Mengedit tema # berfungsi di sana, tetapi untuk menambahkan variabel, saya perlu memproses ulang tema yang saya atur di sana:

function template_preprocess_imagegallery_format(&$vars) {
  template_preprocess_image_formatter($vars);
  $vars['image']['#theme'] = 'igimage';
}

function template_preprocess_igimage(&$vars) {
    $vars['thumbnail'] = ImageStyle::load('thumbnail')->buildUrl($vars['uri']);
    $vars['fullimage'] = file_create_url($vars['uri']);
}

4

Nama tema: atvdirect

  • buat file atvdirect.theme di root tema Anda, selain atvdirect.info.yml
  • tambahkan kode di bawah ini dalam file atvdirect.theme
  • gunakan {{logopath}} di page.html.twig

    <?php
    function atvdirect_preprocess_page(&$variables) {
      $variables['logopath'] = '/'.drupal_get_path('theme','atvdirect') .'/logo.png';
    }
    ?>
    

1
Terima kasih karena akhirnya mengatakan file apa yang harus diletakkan ini.
Ryan H

Jawaban yang sangat bagus, dijelaskan dengan baik.
Murid
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.