Lưới sản phẩm của trang danh mục (frontend) được hiển thị thông qua bố cục trong catalog_carget_view.xml .
Hãy nói rằng tôi có một bộ sưu tập sản phẩm tùy chỉnh (mà tôi đã nhận được thông qua
ProductRepositoryInterface::getList($searchCriteria) method
trong một lớp khối tùy chỉnh và muốn kết xuất bộ sưu tập này. Kết quả được hiển thị phải được hiển thị dưới dạng lưới sản phẩm trên lối vào (giống như bất kỳ trang danh mục nào).
Điều này có thể giải quyết như thế nào ?
Bằng cách nhìn vào catalog_category_view.xml
có hai dòng quan trọng, chịu trách nhiệm hiển thị bộ sưu tập sản phẩm:
<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">
Làm cách nào tôi có thể cung cấp bộ sưu tập sản phẩm tùy chỉnh của mình cho các tệp mẫu này để chúng hiển thị bộ sưu tập của tôi?
Đúng tôi, nếu tôi sai về điều này.
Đây là cách mã khối của tôi trông như thế nào:
<?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;
}
}