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?).

Undrium
sumber
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).

Berdir
sumber
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) }}" />
crobicha
sumber
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.

Undrium
sumber
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.

Trey Ellis
sumber