コード例 #1
0
 /**
  * @inheritdoc
  */
 public function getListByCategory($products, Struct\ShopContextInterface $context)
 {
     if (!$this->config->offsetExists('similarLimit') || $this->config->get('similarLimit') <= 0) {
         return [];
     }
     $ids = [];
     foreach ($products as $product) {
         $ids[] = $product->getId();
     }
     $ids = array_unique($ids);
     $categoryId = 1;
     if ($context->getShop() && $context->getShop()->getCategory()) {
         $categoryId = $context->getShop()->getCategory()->getId();
     }
     $query = $this->connection->createQueryBuilder();
     $query->select(['main.articleID', "GROUP_CONCAT(subVariant.ordernumber SEPARATOR '|') as similar"]);
     $query->from('s_articles_categories', 'main');
     $query->innerJoin('main', 's_articles_categories', 'sub', 'sub.categoryID = main.categoryID AND sub.articleID != main.articleID');
     $query->innerJoin('sub', 's_articles_details', 'subVariant', 'subVariant.articleID = sub.articleID AND subVariant.kind = 1');
     $query->innerJoin('main', 's_categories', 'category', 'category.id = sub.categoryID AND category.id = main.categoryID');
     $query->where('main.articleID IN (:ids)')->andWhere('category.path LIKE :path');
     $query->setParameter(':ids', $ids, Connection::PARAM_INT_ARRAY)->setParameter(':path', '%|' . (int) $categoryId . '|');
     $query->groupBy('main.articleID');
     $statement = $query->execute();
     $data = $statement->fetchAll(\PDO::FETCH_ASSOC);
     $limit = (int) $this->config->get('similarLimit');
     $result = [];
     foreach ($data as $row) {
         $similar = explode('|', $row['similar']);
         $result[$row['articleID']] = array_slice($similar, 0, $limit);
     }
     return $result;
 }