request->get('category'); $filter = Yii::$app->request->get('filters', []); if (empty($category->category_id) && empty($word)) { return $this->render( 'catalog' ); } $params = []; $optionsList = ArrayHelper::getColumn(TaxGroup::find()->where(['is_filter' => 'TRUE'])->all(),'alias'); if ( !empty($filter['brands']) ) { $brands = Brand::find()->select('brand_id')->where(['in', 'alias', $filter['brands']])->all(); $params['brands'] = []; foreach ($brands as $brand) { $params['brands'][] = $brand->brand_id; } } if ( !empty($filter['special']) ) { if (!is_array($filter['special'])) { $filter['special'] = [$filter['special']]; } if (in_array('new', $filter['special'])) { $params['special']['is_new'] = true; } if (in_array('top', $filter['special'])) { $params['special']['is_top'] = true; } if (in_array('promo', $filter['special'])) { $params['special']['akciya'] = true; } } // if ( !empty($filter['options']) ) { // $params['options'] = $filter['options']; // } foreach($optionsList as $optionList){ if(isset($filter[$optionList])){ $params[$optionList] = $filter[$optionList]; } } if ( !empty($filter['prices']) ) { $params['prices'] = $filter['prices']; } $productModel = new ProductFrontendSearch(); //$productQuery = $productModel->getSearchQuery($category, $params); $productProvider = $productModel->search($category, $params); $brandModel = new BrandSearch(); $brands = $brandModel->getBrands($category, $params)->all(); $optionsQuery = $productModel->optionsForCategory($category, $params); $groups = []; foreach ($optionsQuery->all() as $option) { if (!isset($groups[$option->tax_group_id])) { $groups[$option->tax_group_id] = $option->taxGroup; $groups[$option->tax_group_id]->_options = []; } $groups[$option->tax_group_id]->_options[] = $option; } foreach($groups as $i => $group) { if (empty($group->_options)) unset($groups[$i]); } $priceLimits = $productModel->priceLimits($category, $params); /* * Greedy search for comments and rating */ $query = $productProvider->query; $query->with(['comments', 'averageRating']); /* * End of greedy search for rating and comments */ return $this->render( 'products', [ 'category' => $category, 'brandModel' => $brandModel, 'brands' => $brands, 'filter' => $filter, 'params' => $params, 'productModel' => $productModel, 'productProvider' => $productProvider, 'groups' => $groups, 'priceLimits' => $priceLimits, ] ); } public function actionProduct() { /** @var Product $product */ $product = Yii::$app->request->get('product'); if(!$product->enabledVariant) { throw new HttpException(404, 'Товар не найден'); } ProductHelper::addLastProsucts($product->product_id); return $this->render('product', [ 'product' => $product, 'category' => $product->category, ]); } public function actionBrands() { $dataProvider = new ActiveDataProvider([ 'query' => Brand::find()->joinWith('brandName')->orderBy('brand_name.value'), 'pagination' => [ 'pageSize' => -1, ] ]); return $this->render('brands', [ 'dataProvider' => $dataProvider, ]); } public function actionBrand($brand) { $filter = Yii::$app->request->get('filter', []); $params = [ 'brand_id' => $brand->brand_id, ]; if ( !empty($filter['prices']) ) { $params['prices'] = $filter['prices']; } if ( !empty($filter['special']) ) { if (!is_array($filter['special'])) { $filter['special'] = [$filter['special']]; } if (in_array('new', $filter['special'])) { $params['special']['is_new'] = true; } if (in_array('top', $filter['special'])) { $params['special']['is_top'] = true; } if (in_array('promo', $filter['special'])) { $params['special']['akciya'] = true; } } $productModel = new ProductFrontendSearch(); $productProvider = $productModel->search(null, $params); $priceLimits = $productModel->priceLimits(null, $params); return $this->render('brand', [ 'productModel' => $productModel, 'productProvider' => $productProvider, 'brand' => $brand, 'priceLimits' => $priceLimits, 'filter' => $filter, ]); } }