Example #1
0
 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());
     }
 }
Example #4
0
 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;
     }
 }
Example #7
0
 /**
  * @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);
     }
 }
Example #8
0
 /**
  * @param Criteria $criteria
  * @param SortingInterface[] $sortings
  */
 protected function addSortings(Criteria $criteria, $sortings)
 {
     foreach ($sortings as $sorting) {
         $criteria->addSorting($sorting);
     }
 }