Bagaimana menemukan URL gaya gambar dari dalam ranting template?


10

Saya menerapkan template simpul yang menggunakan gambar dua kali; sekali dengan cara 'normal' (yaitu menggunakan gaya gambar yang ditentukan dalam konfigurasi tampilan bidang untuk mode tampilan itu), dan yang lainnya adalah sebagai properti gambar latar css.

Saya butuh satu dari dua hal:

  1. (idealnya) cara untuk mendapatkan URL untuk gaya gambar berbeda dari gambar yang sama.

  2. cara untuk mendapatkan URL untuk bidang gambar.

Saya berjuang untuk menggunakan dump()dan kint()membantu diri sendiri untuk menjawab. Mereka berdua mengeluarkan terlalu banyak (berkat tautan yang disematkan ke "induk" dll.) Dan sepertinya tidak memiliki info yang saya butuhkan. misalnya melihat dump(content.field_image)output URL sebenarnya dari gambar tidak ada (jadi dari mana asalnya sehingga dapat di-render {{ content.field_image }}?!). kint()di sisi lain mati sepenuhnya jika saya memberikan argumen padanya dan versi tingkat atas sekali lagi terlalu besar untuk dinavigasi. Debugging sangat mudah dengan phptemplate + xdebug. (Ya saya tahu itu baik bahwa themers tidak dapat menjatuhkan database.)

Ada jawaban untuk (1) yang menyiratkan Anda tidak bisa melakukannya , tetapi saya tidak mengerti mengapa saya tidak bisa mendapatkan URL yang ada di (2)?

Jawaban:


11

Anda bisa mendapatkan url gaya gambar dalam fungsi preprocess dan meneruskannya ke templat simpul. (dalam kasus saya, saya perlu di tingkat halaman, saya kira ini masih berfungsi untuk node)

Sesuatu seperti ini, dengan "myimagefield" menjadi nama mesin untuk bidang gambar Anda, dan "myimagestyle" menjadi nama mesin untuk gaya Anda, juga pastikan Anda menyertakan Entity \ ImageStyle.

use Drupal\image\Entity\ImageStyle;

/**
 * Implements hook_preprocess_page().
*/
function mytheme_preprocess_page(&$variables, $hook) {
  if ($variables['node']) {
    $node = $variables['node'];
    if($node->myimagefield[0]){
        $cover_image = $node->myimagefield[0]->entity->getFileUri();
        $image_url = ImageStyle::load('myimagestyle')->buildUrl($cover_image);
        $variables['my_image'] = $image_url;
    }
  }
}

1
pertanyaannya mengatakan untuk menarik mode tampilan dari konfigurasi tampilan bidang. Dengan melakukan $ image_url = ImageStyle :: load ('myimagestyle') -> buildUrl ($ cover_image); bagaimana Anda menarik gaya gambar dari konfigurasi bidang? Anda cukup menambahkan myimagestyle, tetapi bagaimana jika bidang yang sama ada pada banyak entitas (misalnya node) yang memerlukan gaya gambar berbeda?
usernameabc

14

Bagian pertama sudah dijawab dalam pertanyaan terkait, di mana ada kode bagaimana melakukan ini. Untuk menjawab bagian kedua dari pertanyaan, Anda dapat mengakses gambar asli di objek simpul:

{{ file_url(node.field_image.entity.uri.value) }}

Satu komentar tentang content:

Dalam templat simpul bidang gambar di contenttidak siap untuk dirender. Kolom berisi konfigurasi bagaimana seharusnya ditampilkan dan objek bidang yang berisi semua data mentah. Nantinya ini akan disatukan dalam bidang, formatter gambar dan template gambar. Itulah alasan Anda tidak menemukan url yang Anda cari contentsaat ini.

Di templat simpul, Anda bisa menggunakan bidang di tingkat atas array konten, misalnya menampilkan bidang gambar

{{ content.field_image }}

seperti yang dikonfigurasi dalam mode tampilan.

Edit:

Ada filter baru di modul Twig Tweak . Sekarang Anda dapat membuat url gaya gambar di ranting langsung dari uri atau url dari gambar asli:

{{ node.field_image.entity.uri.value | image_style('thumbnail') }} 

Terima kasih. Jadi semua kait preprocess dipanggil ketika ranting memanggil render misalnya pada titik Anda pergi {{ content.field_image }}dan tidak sebelumnya? Juga, saya pikir url saya akan dapatkan dari saran Anda adalah url asli - bagian 2 dari Q saya meminta url dari gaya gambar, seperti mengkonfigurasi oleh mode tampilan. Apakah itu mungkin?
artfulrobot

Ini hanya berfungsi untuk gambar yang diunggah secara teratur dan bukan untuk gambar yang direferensikan entitas. Bagaimana ini bisa dibuat untuk bekerja dengan entitas yang direferensikan gambar?
paulcap1

@ paulcap1, tidak tahu persis apa yang Anda maksud, karena bidang gambar adalah bidang referensi (ke entitas file). Jika Anda berarti Anda memiliki gambar di dalam entitas yang direferensikan, maka Anda perlu .entitydua kali, pertama untuk sampai ke entitas dan kedua ke gambar.
4k4

1
@ paulcap1, misalnya{{ node.field_ref.entity.field_image.entity.uri.value }}
4k4

@ 4k4. Saya menggunakan tipe konten Halaman default. Saya memiliki bidang yang direferensikan entitas yang disebut field_global_image. Ini menggunakan Bundel Gambar. Bidang gambar Bundel disebut "" gambar "Saya mencobanya dengan menggunakan {{node.field_global_image.entity.image.entity.uri.value}} Saya juga mencoba mengganti bidang seperti {{node.image.entity.field_global_image} .entity.uri.value}} Tidak ada yang berhasil. Dalam Jawaban saya di pos terpisah, itulah yang berhasil bagi saya
paulcap1

6

Instal Modul Twig Tweak https://www.drupal.org/project/twig_tweak

Dan modul Twig Field ini https://www.drupal.org/project/twig_field_value

Jika Anda menggunakan bidang unggah gambar biasa, gunakan gambar ini di templat simpul Anda:

<img src="{{ node.field_regular_image.entity.uri.value | image_style('thumbnail') }} " >

Jika Anda menggunakan gambar referensi entitas, gunakan ini:

<img src="{{ file_url(content.field_global_image|field_target_entity.image.entity.uri.value | image_style('thumbnail'))}} " >

Perhatikan bahwa dalam contoh tentang menggunakan entitas yang direferensikan imagesetelah field_target_entitymerujuk ke bidang gambar pada entitas yang direferensikan. Anda mungkin harus menyesuaikannya.
daniels

1
Terima kasih! Contoh referensi entitas juga dapat diselesaikan tanpa modul twig_field_value oleh:file_url(node.field_image.entity.field_referenced_image.entity.uri.value | image_style('thumbnail'))
John
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.