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?

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

}

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.


0

Sie können versuchen, folgende Dinge zu tun.

$product->getMediaGallery('images')

Oder

$product->getMediaGalleryEntries():
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.