Dapatkan gambar dari artikel / entitas


8

Bagaimana cara termudah mendapatkan gambar (jalurnya) dari jenis konten artikel yang termasuk dalam Drupal 8?

Apa yang saya miliki adalah sebuah entitas. Menggunakan $image = $node->fields['field_image']memberi saya struktur yang sangat besar.

Apakah tidak ada cara yang lebih mudah untuk mendapatkan jalur gambar? Juga saya tidak dapat menemukan URL ini, yang saya dapatkan adalah semacam target_id (ID file?).


Apa yang get_class ($node->fields['field_image'])memberimu?
Clive

Drupal \ file \ Plugin \ Field \ FieldType \ FileFieldItemList adalah apa yang diberikannya kepada saya, ini hanya berisi properti dari apa yang diizinkan untuk diunggah.
Undrium

Jika Anda mengulang daftar apa jenis anggotanya? Saya belum memeriksanya, tapi saya berharap untuk mengetik bidang yang cukup kuat. Jika semuanya gagal, Anda dapat menggunakan file_load()dan salah satu metode yang tersedia diDrupal\file\FileInterface
Clive

Drupal \ image \ Plugin \ Field \ FieldType \ ImageItem adalah apa yang saya dapatkan, tidak yakin bagaimana cara menanganinya dengan benar.
Undrium

file_load adalah pilihan terakhir, tetapi sudah rusak dan terasa sangat salah.
Undrium

Jawaban:


17

Tidak melihat ini sebelumnya.

Cara terpendek untuk mendapatkan entitas yang direferensikan untuk bidang bernilai tunggal adalah ini:

$node->field_image->entity->url()

Anda juga dapat menentukan delta secara eksplisit:

$node->field_image[0]->entity->url()

Ini berfungsi dengan banyak sihir ArrayAccess dan __get ().

Lihat juga lembar contekan hebat di http://wizzlern.nl/drupal/drupal-8-entity-cheat-sheet . dan https://www.drupal.org/node/1795854 dan halaman dokumentasi lainnya di sana untuk informasi lebih lanjut (masih sangat banyak pekerjaan yang sedang berjalan).


Bagus! Saya bertanya-tanya bagaimana kita bisa mendapatkan alt gambar. Saya mencoba $ node-> field_image [0] -> entitas-> alt dan $ node-> field_image [0] -> entity-> image-> alt; yang saya temukan dalam dokumentasi yang Anda sebutkan tetapi tidak bekerja dengan entitas simpul saya pikir.
Hedeshy

1
alt / judul tidak pada entitas file yang dirujuk tetapi item bidang itu sendiri. Hanya $ node-> field_image [0] -> alt akan berfungsi dengan baik.
Berdir

3

Apa yang akhirnya bekerja untuk saya di D8 adalah:

$imageUrl = $node->get('field_image')->entity->uri->value;

Menggunakan kint($node->get('field_image')->entity)dan melihat array sangat membantu

masukkan deskripsi gambar di sini

Kemudian dalam file ranting saya, saya menggunakan:

<img class="top-article-image" src="{{ file_url(imageUrl) }}" />

1

Jadi solusi saya adalah menggunakan metode "referencedEntities ()" yang ditemukan di objek node. Ini memberi saya array File-objek yang saya bisa mengulanginya dan menggunakan metode "url ()" dari objek file untuk mengambil jalur yang valid.


0

Jika simpul Anda memiliki lebih dari satu gambar, Anda dapat menggunakan ini untuk mendapatkan array dari url gambar (membantu untuk membuat modul slideshow di antara banyak hal berguna lainnya)

$allImagesFound = false;
$imageUrls = array();
$numberOfImages = 0;
while(!$allImagesFound)
{
    //make sure we are not calling a null value, if so then we have found all images
    if($node->get('your_image_field_name')[$numberOfImages] != null) {
        $imageUrls[] = $node->get('your_image_field_name')[$numberOfImages]->entity->url();
        $numberOfImages++;
    } else {
        $allImagesFound = true;
        break;
    }
}

Array imageUrls akan menampung semua url untuk setiap gambar yang terkait dengan bidang node. Semoga ini membantu.

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.