Eine Sache, die Sie beachten müssen, wenn Sie eine benutzerdefinierte Sammlung von Produkten erhalten, ist, wie Sie die Sammlung filtern, um Werte zu erhalten, die Sie im Front-End aufrufen müssen. Sie sagen, Sie haben eine benutzerdefinierte Seite, daher gehe ich davon aus, dass Sie auch eine benutzerdefinierte Sammlung erstellen.
Wenn Sie dies tun, müssen Sie herausfiltern, was Sie benötigen. In Ihrer Blockklasse benötigen Sie ungefähr Folgendes:
<?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;
}
}
Beachten Sie, dass wir $collection->addFieldToSelect('small_image');
als Feld zur Auswahl haben. Wenn Sie dies nicht tun, wird beim Weiterleiten des Aufrufs an getImage()
das Produktobjekt die Bild-URL nicht angezeigt (und dies ist schwer zu erkennen, da die m2-Objekte riesig und schwer zu erkennen sind var_dump
). Sie würden also den Wert haben NULL
, zurück zu kommen, wenn Sie die Bild-URL aufrufen.
Dann können Sie in Ihrer Vorlage Folgendes verwenden:
<?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; ?>