Magento 2 erhält Bilder der Produktgalerie auf der Produktlistenseite, ohne das Modell in einer Schleife zu laden

7

Ich kann Galeriebilder auf der Produktlistenseite mit dem folgenden Code erhalten:

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

Ich weiß, dass das Laden des Loop-Modells in der Schleife eine schlechte Praxis ist und sich auf die Leistung auswirkt. Kann mir jemand bitte den besten Weg vorschlagen, um dieselbe Funktion zu erreichen?

Prashant Valanda
quelle

Antworten:

1

=> Verwenden Sie diesen Code. Es ist vielleicht hilfreich für Sie.

<?php
$product->getMediaGalleryImages();

foreach($images as $child)
 { ?>

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

}
Pawan
quelle
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);
}

und in Ihrem phtml

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

Ich hoffe es hilft. Verwenden Sie den Objekt-Manager auch nicht direkt, er verstößt absolut gegen die Best Practices. Erstellen Sie stattdessen Ihren eigenen Helfer oder was auch immer und verwenden Sie die Abhängigkeitsinjektion, wie in meinem Beispiel gezeigt.

Michele Ongaro
quelle
0

Sie können versuchen, folgende Dinge zu tun.

$product->getMediaGallery('images')

Oder

$product->getMediaGalleryEntries():
Dhiren Vasoya
quelle