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 2016

どのサイズの画像が必要ですか?フル、元のサイズ、サムネイルまたはそれはいくつかのミディアムサイズにすることができますか?
Bartosz Kubicki 2016

回答:


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)
Shawn Northrop

1
すべての$ ImageTypeをテーマのetc / view.xmlで確認できます
Panchal

これは私のページを著しく遅くしましたが、まさに私が望んでいるものです。
ハリ

@SnehaPanchal、$ productImage = $ this-> getBaseUrl(\ Magento \ Framework \ UrlInterface :: URL_TYPE_MEDIA)を使用できますか?'カタログ/製品'。$ _product-> getImage(); 以下のように
jafar pinjar

2

画像のURLを取得する

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

$ productの入手方法
User0434

使用しているどの製品オ​​ブジェクトよりも製品ページを使用している場合、ここに単一の製品を渡します
Ronak Chauhan

ブロックコードを共有して適切な解決策を得る
Ronak Chauhan

2

製品のカスタムコレクションを取得する際に留意する必要があることの1つは、コレクションをフィルター処理して、フロントエンドで呼び出す必要がある値を取得する方法です。あなたはあなたがカスタムページを持っていると言うので、私はあなたもカスタムコレクションを作成していると仮定します。

その際、必要なものを除外する必要があります。ブロッククラスの内部では、次のようなものが必要になります。

<?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()、製品オブジェクトへの呼び出しを渡すと、イメージの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

完全な画像のHTMLコードをレンダリングする必要がなく、複数のブロックを呼び出さずに画像のURLのみを取得したい場合は、次の方法で行うことができます。

$imageUrl = $product->getMediaConfig()->getMediaUrl($product->getImage());
// Returns "https://www.example.com/media/catalog/product/y/o/your_image.jpg"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.