Magento 2 obtém imagens da galeria de produtos na página de listagem de produtos sem modelo de carregamento em loop


7

Posso obter imagens da galeria na página da lista de produtos usando o código abaixo:

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

Eu sei que o modelo de carga no loop é uma prática ruim e afeta o desempenho. Alguém pode me sugerir a melhor maneira de obter a mesma função.

Respostas:


1

=> Use este código. Talvez seja útil para você.

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

e no seu phtml

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

Espero que ajude. Além disso, não use o Gerenciador de Objetos diretamente, é absolutamente contra as melhores práticas; em vez disso, crie seu próprio auxiliar ou o que for e use a injeção de dependência, como mostrado no meu exemplo.


0

Você pode tentar seguir as coisas.

$product->getMediaGallery('images')

Ou

$product->getMediaGalleryEntries():
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.