Saya mencoba membuat blok statis untuk menampilkan produk dinamis. Ini adalah kode yang seharusnya mendapatkan setiap kategori anak dan mencetak gambar untuk setiap produk di setiap kategori.
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');
?><ol><?php
foreach ($category->getChildrenCategories() as $child_category) {
?><li>
<ul><?php
foreach ($child_category->getProductCollection() as $product) {
?><li><img src="<?php echo $product->getImage();?>"/><li><?php
}
?></ul>
</li><?php
}
?></ol>
Ini hampir berfungsi kecuali untuk img srcs hanya "/a/b/ab001.jpg" sebagai contoh dan bukan path lengkap misalnya "/ pub / media / katalog / produk / cache / 1 / small_image / 240x300 / abc123def456 / a / b / 001.jpg "sehingga gambar tidak dapat ditemukan. Apa cara yang benar untuk mendapatkan gambar produk?
Jawaban:
Jika blok Anda meluas
Magento\Catalog\Block\Product\AbstractProduct
, Anda dapat menggunakan:Kemudian dapatkan URL gambar dengan
atau jika Anda ingin menampilkannya sebagai
<img>
elemen:Jika blok Anda tidak / tidak dapat memperpanjang blok produk abstrak, Anda dapat membuat
getImage()
metode sendiri:$this->imageBuilder
harus disuntikkan sebagaiMagento\Catalog\Block\Product\ImageBuilder
The
$imageType
atau$imageId
variabel harus menjadi salah satu jenis citra didefinisikan dalam tema, misalnyacategory_page_list
.Lihat
app/design/frontend/Magento/luma/etc/view.xml
untuk semua jenis gambar dalam tema Luma, misalnya.Di Magento 2 jenis gambar ini digunakan alih-alih menentukan lebar dan tinggi secara langsung dalam templat.
sumber
Uncaught Magento\Framework\View\Asset\File\NotFoundException: Unable to resolve the source file for 'adminhtml/_view/en_US/Magento_Catalog/images/product/placeholder/.jpg'
category_page_list
. Lihat: github.com/magento/magento2/blob/… di Magento 2 Anda menggunakan ini alih-alih menentukan lebar dan tinggi secara langsung dalam templatJika Anda perlu mengubah ukuran gambar produk dan menggunakan sistem cache gambar Magento default dan Anda tidak berada di area frontend, Anda dapat menggunakan solusi ini.
Use case: Ini mungkin berguna jika Anda membutuhkan URL gambar yang diubah ukurannya pada API khusus Anda untuk aplikasi eksternal.
Kode fungsi:
Contoh output:
Komentar:
Parameter ketiga dari fungsi startEnvironmentEmulation digunakan untuk memaksa penggunaan area frontend jika Anda sudah menggunakan storeId yang sama. (berguna untuk area API)
Solusi ini menghindarkan Anda dari kesalahan seperti ini:
sumber
Cobalah
sumber
Coba kode ini ..
sumber
getUrl()
bukanlah cara yang tepat bahkan jika itu dapat bekerja secara tidak sengaja. Dibutuhkan$route
parameter dalam bentuk "module / controller / action". "pub / media / katalog" terlihat seperti rute, tetapi tidak.Mungkin
Magento\Catalog\Helper\Product::getImageUrl()
bisa membantu. Saya tidak mengerti mengapa pengembang Magento tidak mengimplementasikannya diMagento\Catalog\Helper\Image
kelas karenagetUrl
metode dalam image helper tidak mengembalikan apa yang bisa diharapkan ...sumber
Silakan coba kode ini:
sumber
Anda bisa menggunakan ObjectManager atau Block.
Objectmanager:
Blokir:
Panggil fungsi:
sumber
Coba kode ini
Semoga ini bisa membantu Anda
sumber
Dalam modul Anda:
Kemudian di blok Anda, Anda akan mendapatkan hasil ini:
Yah, itu tidak sempurna, tetapi itu bekerja untuk saya.
Lihatlah hasilnya:
sumber
Di kelas Anda menyuntikkan dependensi StoreManagerInterface seperti:
setelah dalam metode Anda, untuk mendapatkan thumbail misalnya
sumber
Anda dapat mencoba kode di bawah ini.
sumber
Ini adalah metode kerja lain:
Atau menghormati URL aman / tidak aman berdasarkan permintaan saat ini:
Saya akan menyerahkan objek objek ke imajinasi Anda sendiri.
sumber
Kita bisa mendapatkan url Gambar Dasar dalam file phtml
sumber