카테고리 페이지 (프론트 엔드)의 제품 그리드는 catalog_category_view.xml의 레이아웃을 통해 렌더링됩니다. .
맞춤 제품 컬렉션이 있다고 가정 해 보겠습니다.
ProductRepositoryInterface::getList($searchCriteria) method
사용자 정의 블록 클래스에서이 컬렉션을 렌더링하려고합니다. 렌더링 된 결과는 프런트 엔드에서 카테고리 페이지와 같이 제품 표로 표시되어야합니다.
어떻게 할 수 있습니까?
를 조사하여 catalog_category_view.xml
제품 컬렉션을 렌더링 할 책임이 있습니다 두 가지 중요한 라인이있다 :
<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">
이 템플릿 파일에 사용자 지정 제품 컬렉션을 제공하여 컬렉션을 렌더링하려면 어떻게해야합니까?
내가 잘못하면 나를 바로 잡으십시오.
내 블록 코드는 다음과 같습니다.
<?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;
}
}