/** * @param $itemsPerPage * @param $currentPage * @param $sort * @param $currency * @param $country * @param array $filters * @param array $facets * @return array */ public function getProducts($itemsPerPage, $currentPage, $sort, $currency, $country, $filters = null, $facets = null) { $searchRequest = ProductProjectionSearchRequest::of()->sort($sort)->limit($itemsPerPage)->currency($currency)->country($country)->offset(min($itemsPerPage * ($currentPage - 1), 100000)); if (!is_null($facets)) { foreach ($facets as $facet) { $searchRequest->addFacet($facet); } } if (!is_null($filters)) { foreach ($filters as $type => $typeFilters) { foreach ($typeFilters as $filter) { switch ($type) { case 'filter': $searchRequest->addFilter($filter); break; case 'filter.query': $searchRequest->addFilterQuery($filter); break; case 'filter.facets': $searchRequest->addFilterFacets($filter); break; } } } } $this->profiler->enter($profile = new Profile('getProducts')); $response = $searchRequest->executeWithClient($this->client); $this->profiler->leave($profile); $products = $searchRequest->mapResponse($response); return [$products, $response->getFacets(), $response->getOffset(), $response->getTotal()]; }
/** * @param $locale * @param $itemsPerPage * @param $currentPage * @param $sort * @param $currency * @param $country * @param $search * @param UriInterface $uri * @param array $filters * @return array */ public function getProducts($locale, $itemsPerPage, $currentPage, $sort, $currency, $country, $search = null, UriInterface $uri, $filters = null) { $searchRequest = ProductProjectionSearchRequest::of()->sort($sort)->limit($itemsPerPage)->currency($currency)->country($country)->offset(min($itemsPerPage * ($currentPage - 1), 100000)); if (!is_null($search)) { $language = \Locale::getPrimaryLanguage($locale); $searchRequest->addParam('text.' . $language, $search); $searchRequest->fuzzy(true); } $selectedValues = $this->searchModel->getSelectedValues($uri); $searchRequest = $this->searchModel->addFacets($searchRequest, $selectedValues); if (!is_null($filters)) { foreach ($filters as $type => $typeFilters) { foreach ($typeFilters as $filter) { switch ($type) { case 'filter': $searchRequest->addFilter($filter); break; case 'filter.query': $searchRequest->addFilterQuery($filter); break; case 'filter.facets': $searchRequest->addFilterFacets($filter); break; } } } } $response = $searchRequest->executeWithClient($this->getClient()); $products = $searchRequest->mapFromResponse($response, $this->getMapper($locale)); return [$products, $response->getFacets(), $response->getOffset(), $response->getTotal()]; }