Example #1
0
 /**
  * @param ListProduct[] $listProducts
  * @param ShopContextInterface $context
  * @return Category[] indexed by product id
  */
 public function getList($listProducts, ShopContextInterface $context)
 {
     $ids = array_map(function (ListProduct $product) {
         return $product->getId();
     }, $listProducts);
     //select all seo category ids, indexed by product id
     $ids = $this->getCategoryIds($ids, $context);
     //now select all category data for the selected ids
     $categories = $this->categoryService->getList($ids, $context);
     $result = [];
     foreach ($ids as $productId => $categoryId) {
         if (!isset($categories[$categoryId])) {
             continue;
         }
         $result[$productId] = $categories[$categoryId];
     }
     return $result;
 }
 /**
  * Generates the facet for the \Shopware\Bundle\SearchBundle\Facet;\Category class.
  * Displays how many products are assigned to the children categories.
  *
  * The handler use the category ids of the \Shopware\Bundle\SearchBundle\Condition\Category.
  * If no \Shopware\Bundle\SearchBundle\Condition\Category is set, the handler uses as default the id 1.
  *
  * @param FacetInterface|Facet\CategoryFacet $facet
  * @param Criteria $criteria
  * @param ShopContextInterface $context
  * @return TreeFacetResult
  */
 public function generateFacet(FacetInterface $facet, Criteria $criteria, ShopContextInterface $context)
 {
     $ids = $this->getCategoryIds($criteria, $context);
     $categories = $this->categoryService->getList($ids, $context);
     $active = [];
     if ($criteria->hasCondition('category')) {
         /**@var $condition CategoryCondition*/
         $condition = $criteria->getCondition('category');
         $active = $condition->getCategoryIds();
     }
     return $this->createTreeFacet($categories, $facet, $active);
 }
Example #3
0
 /**
  * Returns the category tree from the root until the category
  * with the provided id. Also loads siblings for elements in the
  * category path.
  *
  * @param int $id Id of the category to load
  * @return array Tree of categories
  */
 public function sGetCategories($id)
 {
     $pathIds = $this->getCategoryPath($id);
     $grouped = $this->getCategoryIdsWithParent($pathIds);
     $ids = array_merge($pathIds, array_keys($grouped));
     $context = $this->contextService->getShopContext();
     $categories = $this->categoryService->getList($ids, $context);
     unset($grouped[$this->baseId]);
     $tree = $this->buildTree($grouped, $this->baseId);
     $result = $this->assignCategoriesToTree($categories, $tree, $pathIds, $this->getChildrenCountOfCategories($ids));
     return $result;
 }
 /**
  * {@inheritdoc}
  */
 public function hydrate(array $elasticResult, ProductNumberSearchResult $result, Criteria $criteria, ShopContextInterface $context)
 {
     if (!isset($elasticResult['aggregations'])) {
         return;
     }
     if (!isset($elasticResult['aggregations']['agg_category'])) {
         return;
     }
     $data = $elasticResult['aggregations']['agg_category']['buckets'];
     $ids = $this->getCategoryIds($criteria, $data);
     $categories = $this->categoryService->getList($ids, $context);
     $active = [];
     if ($criteria->hasCondition('category')) {
         /**@var $condition CategoryCondition*/
         $condition = $criteria->getCondition('category');
         $active = $condition->getCategoryIds();
     }
     $criteriaPart = $this->createTreeFacet($categories, $active);
     $result->addFacet($criteriaPart);
 }
 /**
  * @inheritdoc
  */
 public function getList(array $numbers, Struct\ProductContextInterface $context)
 {
     $products = $this->productGateway->getList($numbers, $context);
     $covers = $this->mediaService->getCovers($products, $context);
     $graduatedPrices = $this->graduatedPricesService->getList($products, $context);
     $cheapestPrices = $this->cheapestPriceService->getList($products, $context);
     $voteAverages = $this->voteService->getAverages($products, $context);
     $categories = $this->categoryService->getProductsCategories($products, $context);
     $result = [];
     foreach ($numbers as $number) {
         if (!array_key_exists($number, $products)) {
             continue;
         }
         $product = $products[$number];
         if (isset($covers[$number])) {
             $product->setCover($covers[$number]);
         }
         if (isset($graduatedPrices[$number])) {
             $product->setPriceRules($graduatedPrices[$number]);
         }
         if (isset($cheapestPrices[$number])) {
             $product->setCheapestPriceRule($cheapestPrices[$number]);
         }
         if (isset($voteAverages[$number])) {
             $product->setVoteAverage($voteAverages[$number]);
         }
         if (isset($categories[$number])) {
             $product->setCategories($categories[$number]);
         }
         $product->addAttribute('marketing', $this->marketingService->getProductAttribute($product));
         $this->priceCalculationService->calculateProduct($product, $context);
         if ($this->isProductValid($product, $context)) {
             $result[$number] = $product;
         }
     }
     return $result;
 }