Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CatalogView.php
Go to the documentation of this file.
1 <?php
7 
15 
22 {
26  private $name;
27 
31  private $categoryRepository;
32 
36  private $storeManager;
37 
43  public function __construct(
44  CategoryRepositoryInterface $categoryRepository,
45  StoreManagerInterface $storeManager,
46  $name
47  ) {
48  $this->categoryRepository = $categoryRepository;
49  $this->storeManager = $storeManager;
50  $this->name = $name;
51  }
52 
57  {
58  $result = true;
59  if ($request->getName() === $this->name) {
60  $result = $this->hasAnchorCategory($request);
61  }
62 
63  return $result;
64  }
65 
74  private function hasAnchorCategory(RequestInterface $request)
75  {
76  $queryType = $request->getQuery()->getType();
77  $result = false;
78 
79  if ($queryType === QueryInterface::TYPE_BOOL) {
80  $categories = $this->getCategoriesFromQuery($request->getQuery());
81 
83  foreach ($categories as $category) {
84  // It's no need to render LN filters for non anchor categories
85  if ($category && $category->getIsAnchor()) {
86  $result = true;
87  break;
88  }
89  }
90  }
91 
92  return $result;
93  }
94 
104  private function getCategoriesFromQuery(QueryInterface $queryExpression)
105  {
107  $categoryIds = $this->getCategoryIdsFromQuery($queryExpression);
108  $categories = [];
109 
110  foreach ($categoryIds as $categoryId) {
111  try {
112  $categories[] = $this->categoryRepository
113  ->get($categoryId, $this->storeManager->getStore()->getId());
114  } catch (NoSuchEntityException $e) {
115  // do nothing if category is not found by id
116  }
117  }
118 
119  return $categories;
120  }
121 
130  private function getCategoryIdsFromQuery(QueryInterface $queryExpression)
131  {
132  $queryFilterArray = [];
134  $queryFilterArray[] = $queryExpression->getMust();
135  $queryFilterArray[] = $queryExpression->getShould();
136  $categoryIds = [];
137 
138  foreach ($queryFilterArray as $item) {
139  if (!empty($item) && isset($item['category'])) {
140  $queryFilter = $item['category'];
142  $categoryIds[] = $queryFilter->getReference()->getValue();
143  }
144  }
145 
146  return $categoryIds;
147  }
148 }
$storeManager
__construct(CategoryRepositoryInterface $categoryRepository, StoreManagerInterface $storeManager, $name)
Definition: CatalogView.php:43
$categories