La grille de produits d'une page de catégorie (frontend) est rendue via la mise en page dans catalog_category_view.xml .
Disons que j'ai une collection de produits personnalisés (que j'ai obtenue via
ProductRepositoryInterface::getList($searchCriteria) method
dans une classe de bloc personnalisée et souhaitez rendre cette collection. Le résultat rendu doit être affiché sous forme de grille de produit sur le frontend (comme n'importe quelle page de catégorie).
Comment cela peut-il être fait ?
En examinant, catalog_category_view.xml
il existe deux lignes importantes, qui sont responsables du rendu d'une collection de produits:
<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">
Comment puis-je fournir ma collection de produits personnalisée à ces fichiers de modèle, afin qu'ils rendent ma collection?
Corrigez-moi si je me trompe.
Voici à quoi ressemble mon code de bloc:
<?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;
}
}