Magento 2は、ロードモデルをループせずに製品リストページで製品ギャラリー画像を取得します


7

以下のコードを使用して、製品リストページでギャラリー画像を取得できます。

<?php
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $product = $objectManager->create('Magento\Catalog\Model\Product')->load($_product->getId());        
    $images = $product->getMediaGalleryImages();
    foreach($images as $child){ ?>
        <img src="<?php echo $child->getUrl(); ?>" >
<?php } ?>

ループ内のロードモデルは悪い習慣であり、パフォーマンスに影響することを知っています。

回答:


1

=>このコードを使用します。それはあなたに役立つかもしれません。

<?php
$product->getMediaGalleryImages();

foreach($images as $child)
 { ?>

"<?php echo $child->getPath(); ?>
"<?php echo $child->getUrl(); ?>

}

1
use Magento\Catalog\Model\Product\Gallery\ReadHandler as GalleryReadHandler;

public function __construct(
    ...
    GalleryReadHandler $readHandler
    ...
)
{
    ...
    $this->readHandler = $readHandler;
    ...
}

/**
 * @param $product
 */
public function addGallery($product)
{
    $this->readHandler->execute($product);
}

そしてあなたのphtml

<?php foreach ($_productCollection as $_product): ?>
<?php $helper->addGallery($_product); ?>
<?php $gallery = $_product->getMediaGalleryImages(); ?>
...
<?php endforeach; ?>

それが役に立てば幸い。また、オブジェクトマネージャーを直接使用しないでください。これは絶対にベストプラクティスに反します。代わりに、独自のヘルパーなどを作成して、私の例に示すように依存性注入を使用してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.