Commit db2894a2ae5e58489411f17288ff733b43a270cc
1 parent
ec07777f
big commti
Showing
7 changed files
with
50 additions
and
48 deletions
Show diff stats
common/modules/product/helpers/ProductHelper.php
@@ -249,21 +249,21 @@ | @@ -249,21 +249,21 @@ | ||
249 | $query->andWhere( | 249 | $query->andWhere( |
250 | Product::tableName() . '.product_id IN ( | 250 | Product::tableName() . '.product_id IN ( |
251 | SELECT DISTINCT products | 251 | SELECT DISTINCT products |
252 | - FROM ( | ||
253 | - SELECT product_id AS products FROM product WHERE product_id IN( | ||
254 | - SELECT product_id FROM product_option | ||
255 | - INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id | ||
256 | - INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id | ||
257 | - WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\')) | ||
258 | - OR product_id IN ( | ||
259 | - (SELECT product_id AS products | ||
260 | - FROM product_variant_option | ||
261 | - INNER JOIN product_variant ON product_variant_option.product_variant_id = product_variant.product_variant_id | ||
262 | - INNER JOIN tax_option ON tax_option.tax_option_id = product_variant_option.option_id | ||
263 | - INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id | ||
264 | - WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\')) | ||
265 | - ) | ||
266 | - ) AS table_name | 252 | + FROM ( |
253 | + SELECT product_id AS products FROM product WHERE product_id IN( | ||
254 | + SELECT product_id FROM product_option | ||
255 | + INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id | ||
256 | + INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id | ||
257 | + WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\')) | ||
258 | + OR product_id IN ( | ||
259 | + (SELECT product_id AS products | ||
260 | + FROM product_variant_option | ||
261 | + INNER JOIN product_variant ON product_variant_option.product_variant_id = product_variant.product_variant_id | ||
262 | + INNER JOIN tax_option ON tax_option.tax_option_id = product_variant_option.option_id | ||
263 | + INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id | ||
264 | + WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\')) | ||
265 | + ) | ||
266 | + ) AS table_name | ||
267 | )' | 267 | )' |
268 | ); | 268 | ); |
269 | } | 269 | } |
common/modules/product/models/Category.php
@@ -125,7 +125,6 @@ class Category extends \yii\db\ActiveRecord | @@ -125,7 +125,6 @@ class Category extends \yii\db\ActiveRecord | ||
125 | public function getProducts() { | 125 | public function getProducts() { |
126 | return $this->hasMany(Product::className(), ['product_id' => 'product_id']) | 126 | return $this->hasMany(Product::className(), ['product_id' => 'product_id']) |
127 | ->viaTable('product_category', ['category_id' => 'category_id']); | 127 | ->viaTable('product_category', ['category_id' => 'category_id']); |
128 | -// return $this->getRelations('product_categories'); | ||
129 | } | 128 | } |
130 | 129 | ||
131 | 130 |
common/modules/product/models/Product.php
@@ -177,6 +177,14 @@ class Product extends \yii\db\ActiveRecord | @@ -177,6 +177,14 @@ class Product extends \yii\db\ActiveRecord | ||
177 | /** | 177 | /** |
178 | * @return \yii\db\ActiveQuery | 178 | * @return \yii\db\ActiveQuery |
179 | */ | 179 | */ |
180 | + public function getVariants() | ||
181 | + { | ||
182 | + return $this->hasMany(ProductVariant::className(), ['product_id' => 'product_id']); | ||
183 | + } | ||
184 | + | ||
185 | + /** | ||
186 | + * @return \yii\db\ActiveQuery | ||
187 | + */ | ||
180 | public function getEnabledVariant() | 188 | public function getEnabledVariant() |
181 | { | 189 | { |
182 | return $this->hasOne(ProductVariant::className(), ['product_id' => 'product_id']) | 190 | return $this->hasOne(ProductVariant::className(), ['product_id' => 'product_id']) |
@@ -191,13 +199,7 @@ class Product extends \yii\db\ActiveRecord | @@ -191,13 +199,7 @@ class Product extends \yii\db\ActiveRecord | ||
191 | return $this->enabledVariants[0]->price; | 199 | return $this->enabledVariants[0]->price; |
192 | } | 200 | } |
193 | 201 | ||
194 | - /** | ||
195 | - * @return \yii\db\ActiveQuery | ||
196 | - */ | ||
197 | - public function getVariants() | ||
198 | - { | ||
199 | - return $this->hasMany(ProductVariant::className(), ['product_id' => 'product_id']); | ||
200 | - } | 202 | + |
201 | 203 | ||
202 | public function getEnabledVariants() | 204 | public function getEnabledVariants() |
203 | { | 205 | { |
@@ -298,7 +300,7 @@ class Product extends \yii\db\ActiveRecord | @@ -298,7 +300,7 @@ class Product extends \yii\db\ActiveRecord | ||
298 | $groups[] = $group; | 300 | $groups[] = $group; |
299 | } | 301 | } |
300 | } | 302 | } |
301 | - Yii::$app->cache->set($cacheKey,$groups); | 303 | + Yii::$app->cache->set($cacheKey,$groups,3600*24); |
302 | } | 304 | } |
303 | 305 | ||
304 | return $groups; | 306 | return $groups; |
common/modules/product/models/ProductVariant.php
@@ -227,7 +227,7 @@ class ProductVariant extends \yii\db\ActiveRecord | @@ -227,7 +227,7 @@ class ProductVariant extends \yii\db\ActiveRecord | ||
227 | } | 227 | } |
228 | return $groups; | 228 | return $groups; |
229 | } | 229 | } |
230 | - | 230 | + |
231 | 231 | ||
232 | public function getId(){ | 232 | public function getId(){ |
233 | return $this->product_variant_id; | 233 | return $this->product_variant_id; |
frontend/controllers/CatalogController.php
@@ -118,7 +118,8 @@ class CatalogController extends \yii\web\Controller | @@ -118,7 +118,8 @@ class CatalogController extends \yii\web\Controller | ||
118 | 118 | ||
119 | $groups = $category->getActiveFilters(); | 119 | $groups = $category->getActiveFilters(); |
120 | $groups = ArrayHelper::index($groups, null, 'name'); | 120 | $groups = ArrayHelper::index($groups, null, 'name'); |
121 | - $priceLimits = $productModel->priceLimits($category, $params); | 121 | + |
122 | + $priceLimits = $productModel->priceLimits($productProvider->query); | ||
122 | 123 | ||
123 | /* | 124 | /* |
124 | * Greedy search for comments and rating | 125 | * Greedy search for comments and rating |
frontend/controllers/EventController.php
@@ -31,8 +31,16 @@ class EventController extends Controller | @@ -31,8 +31,16 @@ class EventController extends Controller | ||
31 | 31 | ||
32 | $model = $this->findModel($alias); | 32 | $model = $this->findModel($alias); |
33 | $productProvider = new ActiveDataProvider([ | 33 | $productProvider = new ActiveDataProvider([ |
34 | - 'query' => $model->getProducts(), | 34 | + 'query' => $model->getProducts()->with([ |
35 | + 'images', | ||
36 | + 'events', | ||
37 | + 'variant', | ||
38 | + 'variant.image', | ||
39 | + 'comments', | ||
40 | + 'averageRating', | ||
41 | + ]), | ||
35 | ]); | 42 | ]); |
43 | + | ||
36 | return $this->render('show', [ | 44 | return $this->render('show', [ |
37 | 'productProvider' => $productProvider, | 45 | 'productProvider' => $productProvider, |
38 | 'model' => $model, | 46 | 'model' => $model, |
@@ -43,9 +51,18 @@ class EventController extends Controller | @@ -43,9 +51,18 @@ class EventController extends Controller | ||
43 | { | 51 | { |
44 | 52 | ||
45 | $model = Event::find()->where(['percent'=>$percent])->one(); | 53 | $model = Event::find()->where(['percent'=>$percent])->one(); |
54 | + | ||
46 | $productProvider = new ActiveDataProvider([ | 55 | $productProvider = new ActiveDataProvider([ |
47 | - 'query' => $model->getProducts(), | 56 | + 'query' => $model->getProducts()->with([ |
57 | + 'images', | ||
58 | + 'events', | ||
59 | + 'variant', | ||
60 | + 'variant.image', | ||
61 | + 'comments', | ||
62 | + 'averageRating', | ||
63 | + ]), | ||
48 | ]); | 64 | ]); |
65 | + | ||
49 | return $this->render('show', [ | 66 | return $this->render('show', [ |
50 | 'productProvider' => $productProvider, | 67 | 'productProvider' => $productProvider, |
51 | 'model' => $model, | 68 | 'model' => $model, |
frontend/models/ProductFrontendSearch.php
@@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
3 | namespace frontend\models; | 3 | namespace frontend\models; |
4 | 4 | ||
5 | use common\modules\product\helpers\ProductHelper; | 5 | use common\modules\product\helpers\ProductHelper; |
6 | +use common\modules\product\models\Category; | ||
6 | use common\modules\product\models\ProductCategory; | 7 | use common\modules\product\models\ProductCategory; |
7 | use common\modules\product\models\ProductOption; | 8 | use common\modules\product\models\ProductOption; |
8 | use common\modules\rubrication\models\TaxGroup; | 9 | use common\modules\rubrication\models\TaxGroup; |
@@ -85,7 +86,7 @@ class ProductFrontendSearch extends Product { | @@ -85,7 +86,7 @@ class ProductFrontendSearch extends Product { | ||
85 | public function getSearchQuery($category = null, $params = [], $in_stock = true) { | 86 | public function getSearchQuery($category = null, $params = [], $in_stock = true) { |
86 | if (!empty($category)) { | 87 | if (!empty($category)) { |
87 | /** @var ActiveQuery $query */ | 88 | /** @var ActiveQuery $query */ |
88 | -// $query = $category->getRelations('product_categories'); | 89 | + /**@var Category $category **/ |
89 | $query = $category->getProducts(); | 90 | $query = $category->getProducts(); |
90 | } else { | 91 | } else { |
91 | $query = Product::find(); | 92 | $query = Product::find(); |
@@ -105,25 +106,7 @@ class ProductFrontendSearch extends Product { | @@ -105,25 +106,7 @@ class ProductFrontendSearch extends Product { | ||
105 | } | 106 | } |
106 | 107 | ||
107 | 108 | ||
108 | - public function priceLimits($category = null, $params = []) { | ||
109 | - if (!empty($category)) { | ||
110 | - /** @var ActiveQuery $query */ | ||
111 | -// $query = $category->getRelations('product_categories'); | ||
112 | - $query = $category->getProducts(); | ||
113 | - } else { | ||
114 | - $query = Product::find(); | ||
115 | - } | ||
116 | - $query->joinWith('variant'); | ||
117 | - | ||
118 | - // Price filter fix | ||
119 | - unset($params['prices']); | ||
120 | - | ||
121 | - ProductHelper::_setQueryParams($query, $params, false); | ||
122 | - | ||
123 | -// $query->select([ | ||
124 | -// 'MIN('. ProductVariant::tableName() .'.price) AS priceMIN', | ||
125 | -// 'MAX('. ProductVariant::tableName() .'.price) AS priceMAX', | ||
126 | -// ]); | 109 | + public function priceLimits($query) { |
127 | 110 | ||
128 | return [ | 111 | return [ |
129 | 'min' => $query->min(ProductVariant::tableName() .'.price'), | 112 | 'min' => $query->min(ProductVariant::tableName() .'.price'), |