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 | 249 | $query->andWhere( |
250 | 250 | Product::tableName() . '.product_id IN ( |
251 | 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 | 125 | public function getProducts() { |
126 | 126 | return $this->hasMany(Product::className(), ['product_id' => 'product_id']) |
127 | 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 | 177 | /** |
178 | 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 | 188 | public function getEnabledVariant() |
181 | 189 | { |
182 | 190 | return $this->hasOne(ProductVariant::className(), ['product_id' => 'product_id']) |
... | ... | @@ -191,13 +199,7 @@ class Product extends \yii\db\ActiveRecord |
191 | 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 | 204 | public function getEnabledVariants() |
203 | 205 | { |
... | ... | @@ -298,7 +300,7 @@ class Product extends \yii\db\ActiveRecord |
298 | 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 | 306 | return $groups; | ... | ... |
common/modules/product/models/ProductVariant.php
frontend/controllers/CatalogController.php
... | ... | @@ -118,7 +118,8 @@ class CatalogController extends \yii\web\Controller |
118 | 118 | |
119 | 119 | $groups = $category->getActiveFilters(); |
120 | 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 | 125 | * Greedy search for comments and rating | ... | ... |
frontend/controllers/EventController.php
... | ... | @@ -31,8 +31,16 @@ class EventController extends Controller |
31 | 31 | |
32 | 32 | $model = $this->findModel($alias); |
33 | 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 | 44 | return $this->render('show', [ |
37 | 45 | 'productProvider' => $productProvider, |
38 | 46 | 'model' => $model, |
... | ... | @@ -43,9 +51,18 @@ class EventController extends Controller |
43 | 51 | { |
44 | 52 | |
45 | 53 | $model = Event::find()->where(['percent'=>$percent])->one(); |
54 | + | |
46 | 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 | 66 | return $this->render('show', [ |
50 | 67 | 'productProvider' => $productProvider, |
51 | 68 | 'model' => $model, | ... | ... |
frontend/models/ProductFrontendSearch.php
... | ... | @@ -3,6 +3,7 @@ |
3 | 3 | namespace frontend\models; |
4 | 4 | |
5 | 5 | use common\modules\product\helpers\ProductHelper; |
6 | +use common\modules\product\models\Category; | |
6 | 7 | use common\modules\product\models\ProductCategory; |
7 | 8 | use common\modules\product\models\ProductOption; |
8 | 9 | use common\modules\rubrication\models\TaxGroup; |
... | ... | @@ -85,7 +86,7 @@ class ProductFrontendSearch extends Product { |
85 | 86 | public function getSearchQuery($category = null, $params = [], $in_stock = true) { |
86 | 87 | if (!empty($category)) { |
87 | 88 | /** @var ActiveQuery $query */ |
88 | -// $query = $category->getRelations('product_categories'); | |
89 | + /**@var Category $category **/ | |
89 | 90 | $query = $category->getProducts(); |
90 | 91 | } else { |
91 | 92 | $query = Product::find(); |
... | ... | @@ -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 | 111 | return [ |
129 | 112 | 'min' => $query->min(ProductVariant::tableName() .'.price'), | ... | ... |