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() ?>" />
Pengguna0434
sumber
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>
Sneha Panchal
sumber
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.

Ronak Chauhan
sumber
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; ?>
circleix
sumber
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;
zhartaunik
sumber
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"
Cladiuss
sumber