public function loadPreviewAction() { $conditions = $this->Request()->getParam('conditions'); $conditions = json_decode($conditions, true); $sorting = $this->Request()->getParam('sort'); $criteria = new Criteria(); /** @var RepositoryInterface $streamRepo */ $streamRepo = $this->get('shopware_product_stream.repository'); $sorting = $streamRepo->unserialize($sorting); foreach ($sorting as $sort) { $criteria->addSorting($sort); } $conditions = $streamRepo->unserialize($conditions); foreach ($conditions as $condition) { $criteria->addCondition($condition); } $criteria->offset($this->Request()->getParam('start', 0)); $criteria->limit($this->Request()->getParam('limit', 20)); $context = $this->createContext($this->Request()->getParam('shopId'), $this->Request()->getParam('currencyId'), $this->Request()->getParam('customerGroupKey')); $criteria->addBaseCondition(new CustomerGroupCondition([$context->getCurrentCustomerGroup()->getId()])); $category = $context->getShop()->getCategory()->getId(); $criteria->addBaseCondition(new CategoryCondition([$category])); $result = Shopware()->Container()->get('shopware_search.product_search')->search($criteria, $context); $products = array_values($result->getProducts()); $this->View()->assign(['success' => true, 'data' => $products, 'total' => $result->getTotalCount()]); }
/** * @inheritdoc */ public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context) { if ($request->has('esd')) { $criteria->addCondition(new EsdCondition()); } if ($request->get('sSort') == 'random') { $criteria->addSorting(new RandomSorting()); } $criteria->addFacet(new EsdFacet()); }
public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context) { $minSales = $request->getParam('minSales', null); $maxSales = $request->getParam('maxSales', null); if ($minSales || $maxSales) { $criteria->addCondition(new SalesCondition($minSales, $maxSales)); } $criteria->addFacet(new SalesFacet()); if ($request->getParams('sSort') == 'sales') { $criteria->resetSorting(); $criteria->addSorting(new SalesSorting()); } }
public function testIndexedSorting() { /** @var SortingInterface[] $sortings */ $sortings = array(new PriceSorting(), new ProductNameSorting(), new PopularitySorting()); $criteria = new Criteria(); foreach ($sortings as $sort) { $criteria->addSorting($sort); } foreach ($sortings as $expected) { $sorting = $criteria->getSorting($expected->getName()); $this->assertEquals($expected, $sorting); } }
/** * @param Request $request * @param Criteria $criteria * @param ShopContextInterface $context */ public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context) { $requestedCategoryId = $request->getParam('sCategory', $request->getParam('categoryId', false)); if (!$requestedCategoryId) { return; } $closestIdWithRules = $this->databaseAdapter->fetchClosestCategoryIdWithRule($requestedCategoryId); if (!$closestIdWithRules) { return; } $this->enabled = true; if ($request->sSort && $request->sSort != self::REQUEST_VALUE) { return; } $request->setParam('sSort', self::REQUEST_VALUE); $rules = $this->ruleHydrator->createRuleVos($this->databaseAdapter->fetchRawData($closestIdWithRules)); $criteria->resetSorting(); $criteria->addSorting(new DefaultSorting($rules)); }
/** * @param Request $request * @param Criteria $criteria */ private function addSorting(Request $request, Criteria $criteria) { $defaultSort = $this->config->get('defaultListingSorting'); $sort = $request->getParam('sSort', $defaultSort); switch ($sort) { case self::SORTING_RELEASE_DATE: $criteria->addSorting(new ReleaseDateSorting(SortingInterface::SORT_DESC)); break; case self::SORTING_POPULARITY: $criteria->addSorting(new PopularitySorting(SortingInterface::SORT_DESC)); break; case self::SORTING_CHEAPEST_PRICE: $criteria->addSorting(new PriceSorting(SortingInterface::SORT_ASC)); break; case self::SORTING_HIGHEST_PRICE: $criteria->addSorting(new PriceSorting(SortingInterface::SORT_DESC)); break; case self::SORTING_PRODUCT_NAME_ASC: $criteria->addSorting(new ProductNameSorting(SortingInterface::SORT_ASC)); break; case self::SORTING_PRODUCT_NAME_DESC: $criteria->addSorting(new ProductNameSorting(SortingInterface::SORT_DESC)); break; case self::SORTING_SEARCH_RANKING: $criteria->addSorting(new SearchRankingSorting(SortingInterface::SORT_DESC)); break; } }
/** * @param array $productStream * @param Criteria $criteria */ private function assignSortings(array $productStream, Criteria $criteria) { $serializedSortings = json_decode($productStream['sorting'], true); /** @var SortingInterface $sortings */ $sortings = $this->unserialize($serializedSortings); foreach ($sortings as $sorting) { $criteria->addSorting($sorting); } }
/** * @param Criteria $criteria * @param SortingInterface[] $sortings */ protected function addSortings(Criteria $criteria, $sortings) { foreach ($sortings as $sorting) { $criteria->addSorting($sorting); } }