Kisi produk dari halaman kategori (frontend) diberikan melalui tata letak di catalog_category_view.xml .
Katakanlah saya memiliki koleksi produk khusus (yang saya dapat via
ProductRepositoryInterface::getList($searchCriteria) method
dalam kelas blok khusus dan ingin merender koleksi ini. Hasil yang diberikan harus ditampilkan sebagai kisi-kisi produk di frontend (sama seperti halaman kategori mana pun).
Bagaimana ini bisa dilakukan?
Dengan melihat catalog_category_view.xml
ada dua garis signifikan, yang bertanggung jawab untuk merender koleksi produk:
<block class="Magento\Catalog\Block\Category\View" name="category.products" template="Magento_Catalog::category/products.phtml">
<block class="Magento\Catalog\Block\Product\ListProduct" name="category.products.list" as="product_list" template="Magento_Catalog::product/list.phtml">
Bagaimana saya bisa memberikan koleksi produk khusus saya ke file template ini, sehingga mereka membuat koleksi saya?
Perbaiki saya, jika saya salah dalam hal ini.
Ini adalah bagaimana kode blok saya terlihat:
<?php
namespace Mod\Mod1\Block;
use Magento\Framework\View\Element\Template;
class Main extends Template
{
protected $_filterBuilder;
protected $_filterGroupArray;
protected $_filterGroupBuilder;
protected $_searchCriteriaBuilder;
protected $_productRepository;
protected $_productFactory;
protected $_list;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
\Magento\Framework\Api\Search\FilterGroupBuilder $filterGroupBuilder,
\Magento\Framework\Api\FilterBuilder $filterBuilder,
\Magento\Catalog\Model\ProductFactory $productFactory,
array $data = [])
{
$this->_productRepository = $productRepository;
$this->_searchCriteriaBuilder = $searchCriteriaBuilder;
$this->_filterGroupBuilder = $filterGroupBuilder;
$this->_filterBuilder = $filterBuilder;
parent::__construct($context, $data);
}
public function getLoadedProductCollection(){
$searchCrit = $this->buildSearchCriteria('','','','','','5-',1);
$list = $this->_productRepository->getList($searchCrit);
return $list;
}
public function buildSearchCriteria(...){
....
return $searchCriteria;
}
}