From 886cf4d7694cfbd09eeeba8dfe2c2ff30a9c862f Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 8 Jun 2017 15:29:05 +0300 Subject: [PATCH] -Sitemap started and event products removed --- console/controllers/SiteMapController.php | 9 ++++----- frontend/models/ProductFrontendSearch.php | 317 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------- 2 files changed, 184 insertions(+), 142 deletions(-) diff --git a/console/controllers/SiteMapController.php b/console/controllers/SiteMapController.php index d1595d4..023dbdd 100755 --- a/console/controllers/SiteMapController.php +++ b/console/controllers/SiteMapController.php @@ -48,7 +48,6 @@ { return [ 'https://www.linija-svitla.ua', - 'https://www.linija-svitla.ua/catalog', ]; } @@ -191,7 +190,7 @@ true ); - $this->createRow($url, 1, $content); + $this->createRow($url, 0.7, $content); } $this->stdout('Add categories' . "\n", Console::FG_BLUE); @@ -204,7 +203,7 @@ ], true ); - $this->createRow($url, 1, $content); + $this->createRow($url, 0.9, $content); } $this->stdout('Add products' . "\n", Console::FG_BLUE); @@ -218,7 +217,7 @@ ], true ); - $this->createRow($url, 0.9, $content); + $this->createRow($url, 0.7, $content); } $this->stdout('Add articles' . "\n", Console::FG_BLUE); @@ -232,7 +231,7 @@ ], true ); - $this->createRow($url, 0.8, $content); + $this->createRow($url, 0.7, $content); } diff --git a/frontend/models/ProductFrontendSearch.php b/frontend/models/ProductFrontendSearch.php index 58c6f96..9379007 100755 --- a/frontend/models/ProductFrontendSearch.php +++ b/frontend/models/ProductFrontendSearch.php @@ -1,144 +1,187 @@ $this->getSearchQuery($category, $params, $in_stock)->with([ - 'images', - 'events', - 'variant', - 'variant.image', - 'comments', - 'averageRating', - ])->all(), - 'pagination' => [ - 'pageSize' => 15, - ], - 'sort' => [ - 'attributes' => [ - 'name' => [ - 'asc' => ['name' => SORT_ASC], - 'desc' => ['name' => SORT_DESC], - 'default' => SORT_DESC, - 'label' => 'имени', - ], - 'price' => [ - 'asc' => ['price' => SORT_ASC], - 'desc' => ['price' => SORT_DESC], - 'default' => SORT_DESC, - 'label' => 'по цене', + + public $price_interval; + public $brands; + + /** + * @inheritdoc + */ + public function rules() + { + return [ + [ + [ + 'price_interval', + 'brands', ], + 'safe', ], - ] - ]); - - return $dataProvider; - } - - public function getSearchQuery($category = null, $params = [], $in_stock = true) { - - if (!empty($category)) { - /** @var ActiveQuery $query */ - /**@var Category $category **/ - $query = $category->getProducts(); - - } else { - $query = Product::find(); + ]; } - - $query->select(['product.*']); - $query->joinWith(['enabledVariants','brand','options', 'category']); - -// $query->groupBy(['product.product_id', 'product_variant.price', 'product_variant.stock']); - $query->orderBy(['product_variant.stock' => SORT_DESC]); - ProductHelper::_setQueryParams($query, $params); - if($in_stock){ - $query->andWhere(['!=', ProductVariant::tableName() .'.status', 1]); + + /** + * @inheritdoc + */ + public function scenarios() + { + // bypass scenarios() implementation in the parent class + return Model::scenarios(); + } + + /** + * Creates data provider instance with search query applied for frontend + * + * @param array $params + * + * @return ActiveDataProvider + */ + public function search($category = null, $params = [], $in_stock = true) + { + + $dataProvider = new ArrayDataProvider( + [ + 'allModels' => $this->getSearchQuery($category, $params, $in_stock) + ->with( + [ + 'images', + 'events', + 'variant', + 'variant.image', + 'comments', + 'averageRating', + ] + ) + ->all(), + 'pagination' => [ + 'pageSize' => 15, + ], + 'sort' => [ + 'attributes' => [ + 'name' => [ + 'asc' => [ 'name' => SORT_ASC ], + 'desc' => [ 'name' => SORT_DESC ], + 'default' => SORT_DESC, + 'label' => 'имени', + ], + 'price' => [ + 'asc' => [ 'price' => SORT_ASC ], + 'desc' => [ 'price' => SORT_DESC ], + 'default' => SORT_DESC, + 'label' => 'по цене', + ], + ], + ], + ] + ); + + return $dataProvider; + } + + public function getSearchQuery($category = null, $params = [], $in_stock = true) + { + + if (!empty($category)) { + /** @var ActiveQuery $query */ + /**@var Category $category * */ + $query = $category->getProducts(); + + } else { + $query = Product::find(); + } + + $query->select([ 'product.*' ]); + $query->joinWith( + [ + 'enabledVariants', + 'brand', + 'options', + 'category', + ] + ); + + // $query->groupBy(['product.product_id', 'product_variant.price', 'product_variant.stock']); + $query->orderBy([ 'product_variant.stock' => SORT_DESC ]); + ProductHelper::_setQueryParams($query, $params); + if ($in_stock) { + $query->andWhere( + [ + '!=', + ProductVariant::tableName() . '.status', + 1, + ] + ); + } + + /** + * Removing products that currently in events + */ + $query->andWhere( + [ + 'not', + [ + 'product.product_id' => ( new Query() )->select('events_to_products.product_id') + ->from('events_to_products') + ->innerJoin( + 'event', + 'event.event_id=events_to_products.event_id' + )->where(['event.is_event' => true]), + ], + ] + ); + + return $query; } - - - return $query; - } - - - /** - * @param Category|null $category - * @return array - */ - - public function priceLimits($category = null, $params = []) { - if (!empty($category)) { - /** @var ActiveQuery $query */ -// $query = $category->getRelations('product_categories'); - $query = $category->getProducts(); - } else { - $query = Product::find(); + + /** + * @param Category|null $category + * + * @return array + */ + + public function priceLimits($category = null, $params = []) + { + if (!empty($category)) { + /** @var ActiveQuery $query */ + // $query = $category->getRelations('product_categories'); + $query = $category->getProducts(); + } else { + $query = Product::find(); + } + $query->joinWith('variant'); + + // Price filter fix + unset($params[ 'prices' ]); + + ProductHelper::_setQueryParams($query, $params); + $query->andWhere( + [ + '>=', + ProductVariant::tableName() . '.stock', + 1, + ] + ); + return [ + 'min' => $query->min(ProductVariant::tableName() . '.price'), + 'max' => $query->max(ProductVariant::tableName() . '.price'), + ]; } - $query->joinWith('variant'); - - // Price filter fix - unset($params['prices']); - - ProductHelper::_setQueryParams($query, $params); - $query->andWhere( - [ - '>=', - ProductVariant::tableName() . '.stock', - 1, - ] - ); - return [ - 'min' => $query->min(ProductVariant::tableName() .'.price'), - 'max' => $query->max(ProductVariant::tableName() .'.price'), - ]; - } -} \ No newline at end of file + } \ No newline at end of file -- libgit2 0.21.4