<?php
namespace App\Controller\Document;
use App\Classes\DataMapper\Document\ProductListingDataMapper;
use App\ElasticSearch\Paginator\ElasticSearchPaginator;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\HttpKernel\BundleLocator\NotFoundException;
use Pimcore\Navigation\Builder;
use Pimcore\Templating\Model\ViewModel;
use App\Classes\Zend\Filter;
use App\Service\Contract\SearchServiceContract;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
class SubCategoryPageController extends AbstractDocumentController
{
/**
* @var SearchServiceContract
*/
protected $searchService;
/**
* @var PaginatorInterface
*/
private $paginator;
public function __construct(Builder $navigationBuilder, SearchServiceContract $searchService, PaginatorInterface $paginator)
{
parent::__construct($navigationBuilder);
$this->searchService = $searchService;
$this->paginator = $paginator;
}
#[Template()]
public function defaultAction(Request $request)
{
$ecommerceFactory = \Pimcore\Bundle\EcommerceFrameworkBundle\Factory::getInstance();
$productListing = $this->searchService->getCurrentSearchListing($request);
$templateParams = [];
$params = array_merge($request->query->all(), $request->attributes->all());
$templateParams['productListing'] = $productListing;
$filterDefinition = $this->document->getProperty('products_filter');
if (!$filterDefinition) {
throw new NotFoundException("Missing filter for \"{$this->document->getTitle()}\"");
}
$filterService = $ecommerceFactory->getFilterService();
(new \Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\ListHelper)->setupProductList($filterDefinition, $productListing, $params, $filterService, true, true);
$templateParams['filterService'] = $filterService;
$templateParams['filterDefinition'] = $filterDefinition;
$paginator = $this->paginator->paginate($productListing, $request->get('page', 1), 20);
$paginator->setItems(
ProductListingDataMapper::list(
$paginator->getItems()
)->toArray($request)
);
$paginator->setPageRange(5);
$templateParams['paginator'] = $paginator;
$templateParams['paginationVariables'] = $paginator->getPaginationData();
return $templateParams;
}
}