Saya punya pertanyaan tentang mendapatkan jalur ke gambar di templat Ranting. Gambar tidak ditugaskan ke bidang atau sesuatu. Hanya gambar statis yang disimpan dalam "MYTHEME / image / icon / my-icon.png".
Di Drupal 7 saya mendapatkan path di node.template saya dengan kode berikut:
<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png
Bagaimana cara kerjanya di Drupal 8? Saya mencoba untuk mengirimkan variabel template_preprocess_node()
.
Tema MYTHEME:
$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';
Templat ranting:
<img src="{{ images_path ~ 'icons/' ~ 'my-icon.png' }}">
Itu tidak bekerja. Tidak ada kesalahan PHP, tetapi jalurnya dikatakan salah sebagai http: //localhost/node/themes/template/image/icons/my-icon.png .
drupal_get_path
untuk D7 :)$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
Jawaban:
Anda dapat menggunakan
{{ base_path ~ directory }}
yang akan memperbaiki masalah absolut, tidak perlu melakukan preprocessing, kedua variabel ini dimasukkan oleh inti.Sebagai contoh
PS. yang
~
helper di ranting adalah concatenate.Sunting: setidaknya di halaman * .html.twig templat variabel base_path disertakan, mungkin Anda perlu melakukan preprocessing untuk templat lain, Anda dapat dengan mudah memeriksa
{{ dump() }}
apakah ada variabelsumber
{{ directory }}
variabel Twig dalam tema yang ingin Anda gunakan sebagai tema dasar dan membuat sub-tema untuk: drupal.stackexchange.com/questions/277278{{ base_bath }}
untuk setiap template yang; jika tidak, untuk beberapa templat Anda harus melakukan seperti yang dilakukan Marcos Buarque di komentar di atas, atau Matoeil melakukannya di drupal.stackexchange.com/a/238535/4195Secara default ada
{{ directory }}
variabel yang bisa Anda gunakan yang menunjuk ke direktori tema Anda. Masalahnya adalah, itu tidak mutlak, seperti yang Anda tambahkan. Saya pikir itu bug pada intinya karena harus menyertakan path dasar, tetapi mengubah itu tentu saja akan merusak situs yang ada yang menggunakannya.Jadi, Anda perlu menambahkan a / di depannya; ini akan rusak jika Drupal diinstal dalam subfolder. Anda dapat membuat hardcode yang ada di template Anda atau tetap menggunakan
base_path()
seperti yang Anda lakukan di 7.x dalam variabel khusus.sumber
/sites/default/files/MyFolder
? Saya memiliki gambar MyImage.jpg di MyFolder. Sekarang, dalam template ranting jika saya menulis di<img src={{ url }} alt={{ text }}>
sini variabel url memiliki path /MyFolder/MyImage.jpg tetapi, itu tidak berfungsi.<img src="/{{ directory }}/path/to/image"/>
untuk mendapatkan jalur absolut.bekerja untuk saya ketika
tidak
untuk templat konten, saya harus menggunakan .module
dan
sumber