/** * @param SortingInterface $sorting * @param QueryBuilder $query * @param ShopContextInterface $context * @throws \Exception */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { /** @var Listing $categoryComponent */ $categoryComponent = Shopware()->Container()->get('swagcustomsort.listing_component'); $categoryId = Shopware()->Front()->Request()->getParam('sCategory'); $linkedCategoryId = $categoryComponent->getLinkedCategoryId($categoryId); $hasCustomSort = $categoryComponent->hasCustomSort($categoryId); $baseSort = $categoryComponent->getCategoryBaseSort($categoryId); if ($hasCustomSort || $baseSort > 0) { $baseSorting = $categoryComponent->getCategoryBaseSort($categoryId); } else { $baseSorting = Shopware()->Config()->get('defaultListingSorting'); } //apply 'plugin' order if ($linkedCategoryId) { $query->leftJoin('productCategory', 's_articles_sort', 'customSort', 'customSort.articleId = productCategory.articleID AND (customSort.categoryId = :sortCategoryId OR customSort.categoryId IS NULL)'); $query->setParameter('sortCategoryId', $linkedCategoryId); } else { $query->leftJoin('productCategory', 's_articles_sort', 'customSort', 'customSort.articleId = productCategory.articleID AND (customSort.categoryId = productCategory.categoryID OR customSort.categoryId IS NULL)'); } //exclude passed products ids from result $sortedProductsIds = $this->sortingComponent->getSortedProductsIds(); if ($sortedProductsIds) { $query->andWhere($query->expr()->notIn("product.id", $sortedProductsIds)); } //for records with no 'plugin' order data use the default shopware order $handlerData = $this->getDefaultData($baseSorting); if ($handlerData) { $sorting->setDirection($handlerData['direction']); $handlerData['handler']->generateSorting($sorting, $query, $context); } }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { /** @var ProductAttributeSorting $sorting */ if (!$sorting->getField()) { throw new \Exception('ProductAttributeSorting class requires a defined attribute field!'); } $query->addOrderBy('productAttribute.' . $sorting->getField(), $sorting->getDirection()); }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { /** @var RuleVo[] $rules */ $rules = $sorting->getRules(); foreach ($rules as $rule) { $this->gateway->addRule($rule, $query); } }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { $selection = $this->priceHelper->getSelection($context); $this->priceHelper->joinPrices($query, $context); $query->addSelect('MIN(' . $selection . ') as cheapest_price'); /** @var PriceSorting $sorting */ $query->addOrderBy('cheapest_price', $sorting->getDirection())->addOrderBy('product.id', $sorting->getDirection()); }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { if (!$query->hasState(SalesConditionHandler::STATE_INCLUDES_TOPSELLER_TABLE)) { $query->leftJoin('product', 's_articles_top_seller_ro', 'topSeller', 'topSeller.article_id = product.id'); $query->addState(SalesConditionHandler::STATE_INCLUDES_TOPSELLER_TABLE); } /** @var PopularitySorting $sorting */ $query->addOrderBy('topSeller.sales', $sorting->getDirection())->addOrderBy('topSeller.article_id', $sorting->getDirection()); }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { if (!$query->hasState(SearchTermConditionHandler::STATE_INCLUDES_RANKING)) { return; } /** @var SearchRankingSorting $sorting */ $query->addOrderBy('searchTable.ranking', $sorting->getDirection()); $query->addOrderBy('product.id', $sorting->getDirection()); }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { /** @var ReleaseDateSorting $sorting */ $query->addOrderBy('product.datum', $sorting->getDirection())->addOrderBy('product.changetime', $sorting->getDirection())->addOrderBy('product.id', $sorting->getDirection()); }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { /** @var ProductNameSorting $sorting */ $query->addOrderBy('product.name', $sorting->getDirection())->addOrderBy('product.id', $sorting->getDirection()); }
/** * {@inheritdoc} */ public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context) { $query->addOrderBy('variant.instock', $sorting->getDirection())->addOrderBy('product.id', 'DESC'); }