Magento2: dapatkan jalur gambar produk


8

Saya membuat halaman khusus untuk mendapatkan produk. Saya mendapatkan semua informasi tetapi cara mendapatkan jalur gambar penuh. Saya menggunakan getImage () itu menunjukkan gambar hanya bagaimana mendapatkan path lengkap.

      <a href="<?php echo $this->getBaseUrl().$_item->getUrlKey();?>" title="<?php echo $_item->getName() ?>" class="product-image"><img src="<?php echo $this->getImage();?>" alt="<?php echo $_item->getName() ?>" />

tolong bagikan kode Anda.
Rakesh Jesadiya

apakah Anda memerlukan gambar dalam ukuran apa? penuh, ukuran asli, thumbnail atau bisa berukuran sedang?
Bartosz Kubicki

Jawaban:


2

Silakan gunakan kode di bawah ini dalam file templat Anda:

$imageBlock =  $block->getLayout()->createBlock('Magento\Catalog\Block\Product\ListProduct');
$productImage = $imageBlock->getImage($product, 'category_page_grid');  /* $product pass product object here */
<a href="<?php echo $product->getProductUrl(); ?>"><?php echo $productImage->toHtml()  ?></a>

Bagaimana kita tahu untuk opsi apa yang tersedia $ImageTypedi $imageBlock->getImage($product, $ImageType):?
Shawn Northrop

1
Anda dapat memeriksa semua $ ImageType di theme etc / view.xml
Sneha Panchal

Namun ini secara signifikan memperlambat halaman saya, persis seperti yang saya inginkan.
harri

@SnehaPanchal, bisakah kita menggunakan $ productImage = $ this-> getBaseUrl (\ Magento \ Framework \ UrlInterface :: URL_TYPE_MEDIA). 'katalog / produk'. $ _product-> getImage (); seperti di bawah ini
jafar pinjar

2

Dapatkan URL gambar dengan

$image->getImageUrl();

atau jika Anda ingin menampilkannya sebagai elemen:

echo $image->toHtml();

ATAU Coba ini:

$store = $objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore();
$imageUrl = $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . 'catalog/product' . $product->getImage();

Catatan: Anda perlu membuat objectmanager jika menggunakan solusi terakhir.


apa $ image di sini @ Ronak
Pengguna0434

cara mendapatkan $ produk
Pengguna0434

jika Anda menggunakan halaman produk dari pada produk apa pun. Anda dapat menggunakan melewati satu produk di sini
Ronak Chauhan

Bagikan kode blokir Anda, jadi dapatkan solusi yang tepat
Ronak Chauhan

2

Satu hal yang perlu Anda ingat ketika mendapatkan koleksi produk kustom adalah cara Anda memfilter koleksi untuk memiliki nilai yang perlu Anda panggil di ujung depan. Anda mengatakan Anda memiliki halaman khusus, jadi saya akan berasumsi bahwa Anda juga membuat koleksi kustom.

Ketika Anda melakukannya, Anda harus menyaring apa yang Anda butuhkan. Di dalam kelas blok Anda, Anda akan membutuhkan sesuatu seperti ini:

<?php

namespace Vendor\Namespace\Block;

use Magento\Catalog\Model\Product;

class Custompage extends \Magento\Framework\View\Element\Template {

    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
        array $data = []
    ){
        $this->_productCollectionFactory = $productCollectionFactory;
        $this->_catalogProductVisibility = $catalogProductVisibility;
        parent::__construct($context, $data);
    }

    public function getProductCollection() {       
        $attrId = $this->getAttrId();
        $collection = $this->_productCollectionFactory->create();
        $collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
        $collection->addFieldToSelect('name');
        $collection->addFieldToSelect('price');
        $collection->addFieldToSelect('small_image');

        return $collection;
    }
}

Perhatikan bahwa kita memiliki $collection->addFieldToSelect('small_image');bidang yang harus dipilih. Jika Anda tidak melakukan ini, ketika Anda meneruskan panggilan ke getImage()objek produk tidak akan memiliki url gambar (dan ini sulit dilihat karena objek m2 besar dan sulit var_dump). Jadi, Anda akan mendapatkan nilai NULLkembali ketika Anda memanggil url gambar.

Kemudian dalam template Anda, Anda dapat menggunakan:

<?php $productCollection = $block->getProductCollection(); ?>
<?php $imageBlock =  $block->getLayout()->createBlock('Magento\Catalog\Block\Product\ListProduct'); ?>
<?php if (count($productCollection)): ?>
    <?php foreach ($productCollection as $product): ?>
        <?php $productImage = $imageBlock->getImage($product, 'category_page_grid'); ?>
        <a href="<?php /* @escapeNotVerified */ echo $product->getProductUrl() ?>" class="product photo product-item-photo" tabindex="-1"><?php echo $productImage->toHtml(); ?></a>   
    <?php endforeach; ?>
<?php endif; ?>

1

Lihat bagaimana hal itu dicapai dalam magento di halaman produk / tampilan

Magento \ Katalog \ Blok \ Produk \ Lihat \ Galeri

/**
 * Retrieve collection of gallery images
 *
 * @return Collection
 */
public function getGalleryImages()
{
    $product = $this->getProduct();
    $images = $product->getMediaGalleryImages();
    if ($images instanceof \Magento\Framework\Data\Collection) {
        foreach ($images as $image) {
            /* @var \Magento\Framework\DataObject $image */
            $image->setData(
                'small_image_url',
                $this->_imageHelper->init($product, 'product_page_image_small')
                    ->setImageFile($image->getFile())
                    ->getUrl()
            );
            $image->setData(
                'medium_image_url',
                $this->_imageHelper->init($product, 'product_page_image_medium_no_frame')
                    ->setImageFile($image->getFile())
                    ->getUrl()
            );
            $image->setData(
                'large_image_url',
                $this->_imageHelper->init($product, 'product_page_image_large_no_frame')
                    ->setImageFile($image->getFile())
                    ->getUrl()
            );
        }
    }

    return $images;
}

dimana $_imageHelperadalah:

/**
 * @var \Magento\Catalog\Helper\Image
 */
protected $_imageHelper;

0

Jika Anda hanya ingin mendapatkan URL gambar tanpa harus merender kode HTML gambar penuh, dan tanpa memanggil beberapa blok, Anda dapat melakukan ini:

$imageUrl = $product->getMediaConfig()->getMediaUrl($product->getImage());
// Returns "https://www.example.com/media/catalog/product/y/o/your_image.jpg"
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.