Magento2:获取产品的图像路径


8

我创建了用于获取产品的自定义页面。我得到了所有信息,但是如何获得完整的图像路径。我正在使用getImage()它只显示图像如何获取完整路径。

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

请分享您的代码。
Rakesh Jesadiya

您需要什么尺寸的图像?全尺寸,原始尺寸,缩略图,还是可以中等尺寸?
Bartosz Kubicki

Answers:


2

请在您的模板文件中使用以下代码:

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

我们怎么知道有哪些可用的选项是$ImageType在:$imageBlock->getImage($product, $ImageType)
肖恩·诺斯罗普

1
您可以在主题的etc / view.xml中检查所有$ ImageType
Sneha Panchal

这大大减慢了我的页面的速度,但这正是我想要的。
哈里

@SnehaPanchal,我们可以使用$ productImage = $ this-> getBaseUrl(\ Magento \ Framework \ UrlInterface :: URL_TYPE_MEDIA)。'产品目录/产品'。$ _product-> getImage(); 如下所示
jafar pinjar

2

使用获取图片网址

$image->getImageUrl();

或者如果您想将其输出为元素:

echo $image->toHtml();

或者尝试一下:

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

注意:如果使用上一个解决方案,则需要创建objectmanager。


什么是$ image在这里@ Ronak
User0434 '16

如何获得$ product
User0434'Dec

如果您使用的是产品页面,而不是所使用的productObject,请在此处传递单个产品
Ronak Chauhan

共享您的块代码,以便获取适当的解决方案
Ronak Chauhan

2

获取自定义产品集合时需要记住的一件事是如何过滤集合以使其具有需要在前端调用的值。您说您有一个自定义页面,因此我将假定您也正在创建一个自定义集合。

在执行此操作时,您必须过滤掉所需的内容。在您的块类内部,您将需要以下内容:

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

请注意,我们有$collection->addFieldToSelect('small_image');一个字段可供选择。如果不执行此操作,则在将调用传递给getImage()product对象时,将没有图像url(这很难看到,因为m2对象很大且难以访问var_dump)。因此,NULL当您调用图像URL时,最终将获得返回值。

然后,您可以在模板中使用:

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

在产品/查看页面上查看如何在magento中实现

Magento \ Catalog \ Block \ Product \ View \ Gallery

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

在哪里$_imageHelper

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

0

如果您只想获取图像URL而不必渲染完整的图像HTML代码,并且无需调用多个块,则可以采用以下方式:

$imageUrl = $product->getMediaConfig()->getMediaUrl($product->getImage());
// Returns "https://www.example.com/media/catalog/product/y/o/your_image.jpg"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.