Satu hal yang perlu Anda ingat ketika mendapatkan koleksi produk kustom adalah cara Anda memfilter koleksi untuk memiliki nilai yang perlu Anda panggil di ujung depan. Anda mengatakan Anda memiliki halaman khusus, jadi saya akan berasumsi bahwa Anda juga membuat koleksi kustom.
Ketika Anda melakukannya, Anda harus menyaring apa yang Anda butuhkan. Di dalam kelas blok Anda, Anda akan membutuhkan sesuatu seperti ini:
<?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;
}
}
Perhatikan bahwa kita memiliki $collection->addFieldToSelect('small_image');
bidang yang harus dipilih. Jika Anda tidak melakukan ini, ketika Anda meneruskan panggilan ke getImage()
objek produk tidak akan memiliki url gambar (dan ini sulit dilihat karena objek m2 besar dan sulit var_dump
). Jadi, Anda akan mendapatkan nilai NULL
kembali ketika Anda memanggil url gambar.
Kemudian dalam template Anda, Anda dapat menggunakan:
<?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; ?>