Jadi saya punya Node ini:
object(Drupal\node\Entity\Node)[1862]
protected 'values' =>
array (size=17)
'vid' =>
array (size=1)
'x-default' => string '7' (length=1)
'langcode' =>
array (size=1)
'x-default' =>
array (size=1)
0 =>
array (size=1)
'value' => string 'en' (length=2)
... (more fields)
'field_image' =>
array (size=1)
'x-default' =>
array (size=1)
0 =>
array (size=5)
'target_id' => string '1' (length=1)
'alt' => string '' (length=0)
'title' => string '' (length=0)
'width' => string '150' (length=3)
'height' => string '120' (length=3)
Sekarang field_image memiliki array dengan x-default dan beberapa data gambar dasar. Bagaimana cara menampilkan gambar, atau membuat tautan ke gambar di dalam templat Ranting?
url(node.field_image.0.entity.uri)
( masalah yang relevan )Recoverable fatal error: Object of class Drupal\Core\Field\FieldItemList could not be converted to string
jadi saya mencobanya dengan ini:url(node.field_image.0.entity.uri.value)
tapi kemudian hanya memberitahu saya ini:Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Route "public://image.png" does not exist.")
FieldItemList
s menjadi representasi string (yang saya tidak dapat menemukan)url()
ingin rute. Bagaimana denganurl_from_path(node.field_image.0.entity.uri.value)
?url_from_path()
sepertinya menghasilkan ini:http://mywebsite.local/public%3A//image.png
jadi sepertinya urlencoding dan menambahkan nilai yang tepat ke urlJawaban:
Berikut ini adalah versi pembaruan untuk jawaban ini setelah 8.0.x. Ini berdasarkan pada komentar @ joelpittet .
sumber
url()
metode, jadi Anda bisa memanggilentity.url()
alih-alih meneruskanentity.fileuri
kefile_url()
Saya tidak tahu tentang Ranting, tetapi Anda mendapatkan file URI
$node->field_image->entity->getFileUri()
dalam PHP, dan Anda perlu memanggilfile_create_url()
itu:Saya tidak tahu apakah itu mungkin di ranting. Jika tidak memungkinkan, Anda selalu dapat menghitungnya dalam praproses dan menambahkan sebagai variabel baru.
sumber
Jika seseorang membutuhkan gambar gaya:
sumber
use Drupal\image\Entity\ImageStyle;
$relative = file_url_transform_relative($styled_image_url);
untuk memastikan itu relatif. API di siniTidak ada solusi ranting di atas yang berfungsi untuk saya (mungkin yang bekerja untuk versi 8.x yang lebih lama tetapi tidak untuk versi 8.5
CATATAN: harus bekerja untuk Drupal 8.5+
sumber
Jadi saya sudah menemukan jawabannya dengan bantuan Clive .
Mendapatkan gambar URI di Ranting selesai menggunakan
node.field_image.0.entity.uri.value
Mendapatkan URL lengkap untuk gambar dapat dilakukan dengan menggunakan
file_create_url(node.field_image.0.entity.uri.value)
Melakukan ini di Twig belum memungkinkan tetapi mereka sedang mengerjakannya -> lihat di sini
sumber
Apa yang akhirnya bekerja untuk saya di D8 adalah:
Menggunakan
kint($node->get('field_image')->entity)
dan melihat array sangat membantuKemudian dalam file ranting saya, saya menggunakan:
sumber
Anda bisa mendapatkan url secara langsung dengan menggunakan field_image.entity.url
sumber
Saya selalu menggunakan fungsi pembantu
sumber
Ini adalah caranya jika Anda ingin mendapatkan URL gambar dengan gaya gambar terkait untuk bidang gambar apa pun di templat ranting:
Pertama instal modul Twig Tweak
Kemudian atur gambar URI sebagai variabel. Dengan URI, Anda dapat menggunakan pola ranting ranting untuk mendapatkan jalur dengan gaya gambar apa pun yang Anda inginkan. Lihat di bawah:
Twig Tweak v2.4 + menawarkan
file_url
filter untuk mengekstrak URL file dari suatu entitas.sumber
Saya memiliki masalah yang sama, jadi saya membuat
get_image_path()
fungsi Ranting dan menambahkannya dengan banyak hal berguna lainnya ke modul Starter boilerplate saya:https://github.com/brynj-digital/starter
Fungsi menerima bidang gambar dan nama mesin dari gaya gambar, lalu mengembalikan jalur gambar itu.
Ini berfungsi dalam banyak konteks - Anda bisa lewat
node.field_name
,content.field_name
ataurow._entity.field_name
(dalam kasus templat bidang tampilan).sumber
Astaga, sebenarnya butuh waktu untuk mengetahui mengapa URL yang saya hasilkan tidak berfungsi. Semua 404'ed. Anda harus membuat turunan terlebih dahulu jika belum ada .
Jadi misalnya ketika Anda menambahkan gaya gambar nanti, setelah gambar asli diunggah, maka belum ada file gambar gaya (turunan gambar). Itu harus dibuat terlebih dahulu.
Ganti
field_MYIMAGE
danMYSTYLE
sesuai kebutuhan Anda.Saya berharap ini akan terjadi secara otomatis.
sumber
agak terkait, inilah yang saya gunakan (terima kasih atas semua jawaban sebelumnya untuk membawa saya ke sana) untuk mendapatkan URL file gambar dari bidang gambar entitas media di ranting:
sekarang saya bisa menggunakan variabel ini di templat ranting saya
sumber
Untuk mendapatkan atribut gambar seperti URI, alt, judul dll gunakan sintaks seperti di bawah ini
Dalam template ranting simpul
Di ranting templat bidang
Di ranting templat bidang lain
Catatan: Periksa juga lembar cheat modul twig_tweaks untuk detail yang terkait dengan masalah terkait ranting.
sumber
Anda bisa menggunakan
url()
metode yang ada di kelas File sebagai pintasan jadi:dapat disingkat menjadi:
Ini berfungsi dalam fungsi preprocess tetapi memicu
Twig_Sandbox_SecurityError
ketika dipanggil dalam ranting template.Jika Anda menerima,
Twig_Sandbox_SecurityError
Anda dapat memberitahu ranting untuk mengizinkanurl
dalam file settings.php Anda sebagaimana disebutkan dalam posting Stackoverflow iniLihat dokumentasi pada File :: Url () https://api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/function/File%3A%3Aurl/8.6.x
sumber
Anda bisa melakukannya dengan dua cara!
1) file_create_url (---------) // di dalam tulis path node
2) file_url (-------) // di dalam tulis path node
sumber