category_id)) { throw new HttpException(404 ,'Page not found'); } if ($category->depth < 2) { return $this->render( 'categories', [ 'category' => $category ] ); } else { $per_page = 24; $sort = new Sort([ 'attributes' => [ 'name' => [ 'asc' => ['name' => SORT_ASC], 'desc' => ['name' => SORT_DESC], 'default' => SORT_DESC, 'label' => 'имени', ], 'price' => [ 'asc' => [ProductVariant::tableName() .'.price' => SORT_ASC], 'desc' => [ProductVariant::tableName() .'.price' => SORT_DESC], 'default' => SORT_DESC, 'label' => 'цене', ], ], ]); /** @var ActiveQuery $query */ $query = $category->getRelations('product_categories') ->joinWith([ 'variants' ]); $all_count = $query->count(); $priceQuery = clone $query; $priceMin = $priceMinCurr = $priceQuery->min(ProductVariant::tableName() .'.price'); $priceMax = $priceMaxCurr = $priceQuery->max(ProductVariant::tableName() .'.price'); if (($price_interval = \Yii::$app->request->get('price_interval')) != false) { $price_interval = explode(';', $price_interval); $price_interval = [ floatval($price_interval[0]), floatval($price_interval[1]), ]; if ($price_interval[0] > 0) { $query->andWhere(['>=', ProductVariant::tableName() .'.price', $price_interval[0]]); $priceMinCurr = $price_interval[0]; } if ($price_interval[1] > 0) { $query->andWhere(['<=', ProductVariant::tableName() .'.price', $price_interval[1]]); $priceMaxCurr = $price_interval[1]; } } $count = $query->count(); $pages = new Pagination(['totalCount' => $count, 'pageSize' => $per_page]); $query->offset($pages->offset) ->orderBy($sort->orders) ->limit($pages->limit); $products = $query->all(); $brandsQuery = Brand::find()->innerJoinWith('products')->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. Product::tableName() .'.product_id')->where([ ProductCategory::tableName() .'.category_id' => $category->category_id ])->groupBy(Brand::tableName() .'.brand_id'); $brands = $brandsQuery->all(); $brands_count = $brandsQuery->count(); $groups = $category->getTaxGroups()->all(); return $this->render( 'products', [ 'category' => $category, 'products' => $products, 'all_count' => $all_count, 'product_count' => $count, 'sort' => $sort, 'pages' => $pages, 'per_page' => $per_page, 'priceMin' => $priceMin, 'priceMax' => $priceMax, 'priceMinCurr' => $priceMinCurr, 'priceMaxCurr' => $priceMaxCurr, 'brands' => $brands, 'brands_count' => $brands_count, 'groups' => $groups, ] ); } } public function actionProduct($alias) { $product = ProductSearch::findByAlias($alias); if (empty($product->product_id)) { throw new HttpException(404 ,'Page not found'); } return $this->render('product'); } public function actionBrands() { return 'actionBrands'; } public function actionBrand($alias) { return 'actionBrand:'. $alias; } }