Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Filter.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
16 
20 class Filter
21 {
25  private $searchResultFactory;
26 
30  private $productDataProvider;
31 
35  private $fieldTranslator;
36 
40  private $layerResolver;
41 
48  public function __construct(
49  SearchResultFactory $searchResultFactory,
50  Product $productDataProvider,
51  \Magento\Catalog\Model\Layer\Resolver $layerResolver,
52  FieldTranslator $fieldTranslator
53  ) {
54  $this->searchResultFactory = $searchResultFactory;
55  $this->productDataProvider = $productDataProvider;
56  $this->fieldTranslator = $fieldTranslator;
57  $this->layerResolver = $layerResolver;
58  }
59 
68  public function getResult(
71  bool $isSearch = false
72  ): SearchResult {
73  $fields = $this->getProductFields($info);
74  $products = $this->productDataProvider->getList($searchCriteria, $fields, $isSearch);
75  $productArray = [];
77  foreach ($products->getItems() as $product) {
78  $productArray[$product->getId()] = $product->getData();
79  $productArray[$product->getId()]['model'] = $product;
80  }
81 
82  return $this->searchResultFactory->create($products->getTotalCount(), $productArray);
83  }
84 
91  private function getProductFields(ResolveInfo $info) : array
92  {
93  $fieldNames = [];
94  foreach ($info->fieldNodes as $node) {
95  if ($node->name->value !== 'products') {
96  continue;
97  }
98  foreach ($node->selectionSet->selections as $selection) {
99  if ($selection->name->value !== 'items') {
100  continue;
101  }
102 
103  foreach ($selection->selectionSet->selections as $itemSelection) {
104  if ($itemSelection->kind === 'InlineFragment') {
105  foreach ($itemSelection->selectionSet->selections as $inlineSelection) {
106  if ($inlineSelection->kind === 'InlineFragment') {
107  continue;
108  }
109  $fieldNames[] = $this->fieldTranslator->translate($inlineSelection->name->value);
110  }
111  continue;
112  }
113  $fieldNames[] = $this->fieldTranslator->translate($itemSelection->name->value);
114  }
115  }
116  }
117 
118  return $fieldNames;
119  }
120 }
__construct(SearchResultFactory $searchResultFactory, Product $productDataProvider, \Magento\Catalog\Model\Layer\Resolver $layerResolver, FieldTranslator $fieldTranslator)
Definition: Filter.php:48
$fields
Definition: details.phtml:14
$searchCriteria
foreach( $_productCollection as $_product)() ?>" class $info
Definition: listing.phtml:52