Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Category.php
Go to the documentation of this file.
1 <?php
7 
10 
14 class Category extends AbstractFilter
15 {
19  private $escaper;
20 
24  private $dataProvider;
25 
38  public function __construct(
39  \Magento\Catalog\Model\Layer\Filter\ItemFactory $filterItemFactory,
41  \Magento\Catalog\Model\Layer $layer,
42  \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder,
43  \Magento\Framework\Escaper $escaper,
44  \Magento\Catalog\Model\Layer\Filter\DataProvider\CategoryFactory $categoryDataProviderFactory,
45  array $data = []
46  ) {
47  parent::__construct(
48  $filterItemFactory,
50  $layer,
52  $data
53  );
54  $this->escaper = $escaper;
55  $this->_requestVar = 'cat';
56  $this->dataProvider = $categoryDataProviderFactory->create(['layer' => $this->getLayer()]);
57  }
58 
65  public function apply(\Magento\Framework\App\RequestInterface $request)
66  {
67  $categoryId = $request->getParam($this->_requestVar) ?: $request->getParam('id');
68  if (empty($categoryId)) {
69  return $this;
70  }
71 
72  $this->dataProvider->setCategoryId($categoryId);
73 
74  $category = $this->dataProvider->getCategory();
75 
76  $this->getLayer()->getProductCollection()->addCategoryFilter($category);
77 
78  if ($request->getParam('id') != $category->getId() && $this->dataProvider->isValid()) {
79  $this->getLayer()->getState()->addFilter($this->_createItem($category->getName(), $categoryId));
80  }
81  return $this;
82  }
83 
89  public function getResetValue()
90  {
91  return $this->dataProvider->getResetValue();
92  }
93 
99  public function getName()
100  {
101  return __('Category');
102  }
103 
109  protected function _getItemsData()
110  {
112  $productCollection = $this->getLayer()->getProductCollection();
113  $optionsFacetedData = $productCollection->getFacetedData('category');
114  $category = $this->dataProvider->getCategory();
115  $categories = $category->getChildrenCategories();
116 
117  $collectionSize = $productCollection->getSize();
118 
119  if ($category->getIsActive()) {
120  foreach ($categories as $category) {
121  if ($category->getIsActive()
122  && isset($optionsFacetedData[$category->getId()])
123  && $this->isOptionReducesResults($optionsFacetedData[$category->getId()]['count'], $collectionSize)
124  ) {
125  $this->itemDataBuilder->addItemData(
126  $this->escaper->escapeHtml($category->getName()),
127  $category->getId(),
128  $optionsFacetedData[$category->getId()]['count']
129  );
130  }
131  }
132  }
133  return $this->itemDataBuilder->build();
134  }
135 }
__construct(\Magento\Catalog\Model\Layer\Filter\ItemFactory $filterItemFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Layer $layer, \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder, \Magento\Framework\Escaper $escaper, \Magento\Catalog\Model\Layer\Filter\DataProvider\CategoryFactory $categoryDataProviderFactory, array $data=[])
Definition: Category.php:38
$storeManager
__()
Definition: __.php:13
$categories
apply(\Magento\Framework\App\RequestInterface $request)
Definition: Category.php:65