Magento2: lấy đường dẫn hình ảnh của sản phẩm


8

Tôi đã tạo trang tùy chỉnh để nhận sản phẩm. Tôi có tất cả thông tin nhưng làm thế nào để có được đường dẫn hình ảnh đầy đủ. Tôi đang sử dụng getImage () nó chỉ hiển thị hình ảnh làm thế nào để có được đường dẫn đầy đủ.

      <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() ?>" />

hãy chia sẻ mã của bạn
Rakesh Jesadiya

Bạn cần hình ảnh ở kích thước nào? đầy đủ, kích thước ban đầu, hình thu nhỏ hoặc nó có thể là một số kích thước trung bình?
Bartosz Kubicki

Câu trả lời:


3

Vui lòng sử dụng mã dưới đây trong tệp mẫu của bạn:

$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>

Làm thế nào để chúng ta biết những tùy chọn có sẵn $ImageTypetrong : $imageBlock->getImage($product, $ImageType)?
Shawn Northrop

1
Bạn có thể kiểm tra tất cả $ ImageType trong etc / view.xml của chủ đề
Sneha Panchal

Điều này làm chậm đáng kể các trang của tôi tuy nhiên chính xác là những gì tôi muốn.
harri

@SnehaPanchal, chúng tôi có thể sử dụng $ productImage = $ this-> getBaseUrl (\ Magento \ Framework \ UrlInterface :: URL_TYPE_MEDIA). 'Danh mục / sản phẩm'. $ _product-> getImage (); như dưới đây
jafar pinjar

2

Nhận URL hình ảnh với

$image->getImageUrl();

hoặc nếu bạn muốn xuất nó dưới dạng phần tử:

echo $image->toHtml();

HOẶC Hãy thử điều này:

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

Lưu ý: bạn cần tạo objectmanager nếu sử dụng giải pháp cuối cùng.


$ hình ảnh ở đây là gì @ Ronak
User0434

Cách nhận sản phẩm $
Người dùng0434

nếu bạn đang sử dụng trang sản phẩm hơn bất kỳ sản phẩm nào. Dự đoán bạn đang sử dụng hãy vượt qua một sản phẩm duy nhất tại đây
Ronak Chauhan

Chia sẻ mã khối của bạn, để có được giải pháp phù hợp
Ronak Chauhan

2

Một điều bạn cần lưu ý khi nhận bộ sưu tập sản phẩm tùy chỉnh là cách bạn lọc bộ sưu tập để có một giá trị bạn cần được gọi ở mặt trước. Bạn nói rằng bạn có một trang tùy chỉnh, vì vậy tôi sẽ cho rằng bạn cũng đang tạo một bộ sưu tập tùy chỉnh.

Khi bạn làm bạn phải lọc ra những gì bạn sẽ cần. Bên trong lớp khối, bạn sẽ cần một cái gì đó như thế này:

<?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;
    }
}

Hãy lưu ý rằng chúng tôi có $collection->addFieldToSelect('small_image');một trường để chọn. Nếu bạn không làm điều này, khi bạn chuyển cuộc gọi đến getImage()đối tượng sản phẩm sẽ không có url hình ảnh (và điều này rất khó thấy vì các đối tượng m2 rất lớn và khó thực hiện var_dump). Vì vậy, bạn sẽ kết thúc với một giá trị NULLquay trở lại khi bạn gọi cho url hình ảnh.

Sau đó, trong mẫu của bạn, bạn có thể sử dụng:

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

Có một cái nhìn về cách nó đạt được trong magento tại trang sản phẩm / xem

Magento \ Catalogue \ Chặn \ Sản phẩm \ Xem \ Thư viện

/**
 * 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;
}

ở đâu $_imageHelper:

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

0

Nếu bạn chỉ muốn lấy URL hình ảnh mà không phải hiển thị mã HTML hình ảnh đầy đủ và không cần gọi nhiều khối, bạn có thể thực hiện theo cách này:

$imageUrl = $product->getMediaConfig()->getMediaUrl($product->getImage());
// Returns "https://www.example.com/media/catalog/product/y/o/your_image.jpg"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.