Commit 5fd5b9ca32ded3f4f684a9d157643a2f5364974e

Authored by Administrator
1 parent 29c20011

big commti

common/modules/product/models/Category.php
@@ -197,51 +197,53 @@ class Category extends \yii\db\ActiveRecord @@ -197,51 +197,53 @@ class Category extends \yii\db\ActiveRecord
197 return true; 197 return true;
198 } 198 }
199 public function getActiveFilters() { 199 public function getActiveFilters() {
  200 + return Category::getDb()->cache(function(){
  201 + $query1 = (new Query())
  202 + ->distinct()
  203 + ->select([
  204 + 'option_id'
  205 + ])
  206 + ->from('tax_option')
  207 + ->innerJoin('product_variant_option', 'tax_option.tax_option_id = product_variant_option.option_id')
  208 + ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id')
  209 + ->innerJoin('product_variant', 'product_variant.product_variant_id = product_variant_option.product_variant_id')
  210 + ->innerJoin('product', 'product.product_id = product_variant.product_id')
  211 + ->innerJoin('product_category', 'product_category.product_id = product.product_id')
  212 + ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id')
  213 + ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id])
  214 + ->andWhere(['!=', 'product_variant.status', 1]);
  215 +
  216 + $query2 = (new Query())
  217 + ->distinct()
  218 + ->select([
  219 + 'option_id'
  220 + ])
  221 + ->from('tax_option')
  222 + ->innerJoin('product_option', 'tax_option.tax_option_id = product_option.option_id')
  223 + ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id')
  224 + ->innerJoin('product', 'product.product_id = product_option.product_id')
  225 + ->innerJoin('product_category', 'product_category.product_id = product.product_id')
  226 + ->innerJoin('product_variant', 'product_variant.product_id = product.product_id')
  227 + ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id')
  228 + ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id])
  229 + ->andWhere(['!=', 'product_variant.status', 1]);
  230 + $query3 = (new Query())
  231 + ->select([
  232 + 'tax_option.*',
  233 + 'tax_group.*',
  234 + 'tax_option.alias as option_alias',
  235 + 'tax_group.alias as group_alias',
  236 + 'tax_option.name as value',
  237 + 'tax_option.sort AS tax_option_sort',
  238 + 'tax_group.sort AS tax_group_sort',
  239 + ])
  240 + ->from(['tax_option' ])
  241 + ->where(['tax_option.tax_option_id'=>$query1->union($query2)])
  242 + ->innerJoin('tax_group','tax_group.tax_group_id = tax_option.tax_group_id')
  243 + ->orderBy('tax_option.sort, tax_group.sort');
  244 + return $query3->all();
  245 + }, 3600*24);
200 246
201 - $query1 = (new Query())  
202 - ->distinct()  
203 - ->select([  
204 - 'option_id'  
205 - ])  
206 - ->from('tax_option')  
207 - ->innerJoin('product_variant_option', 'tax_option.tax_option_id = product_variant_option.option_id')  
208 - ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id')  
209 - ->innerJoin('product_variant', 'product_variant.product_variant_id = product_variant_option.product_variant_id')  
210 - ->innerJoin('product', 'product.product_id = product_variant.product_id')  
211 - ->innerJoin('product_category', 'product_category.product_id = product.product_id')  
212 - ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id')  
213 - ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id])  
214 - ->andWhere(['!=', 'product_variant.status', 1]);  
215 -  
216 - $query2 = (new Query())  
217 - ->distinct()  
218 - ->select([  
219 - 'option_id'  
220 - ])  
221 - ->from('tax_option')  
222 - ->innerJoin('product_option', 'tax_option.tax_option_id = product_option.option_id')  
223 - ->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id')  
224 - ->innerJoin('product', 'product.product_id = product_option.product_id')  
225 - ->innerJoin('product_category', 'product_category.product_id = product.product_id')  
226 - ->innerJoin('product_variant', 'product_variant.product_id = product.product_id')  
227 - ->innerJoin('tax_group_to_category', 'tax_group.tax_group_id = tax_group_to_category.tax_group_id')  
228 - ->where(['product_category.category_id' => $this->category_id, 'tax_group.is_filter' => TRUE,'tax_group_to_category.category_id'=>$this->category_id])  
229 - ->andWhere(['!=', 'product_variant.status', 1]);  
230 - $query3 = (new Query())  
231 - ->select([  
232 - 'tax_option.*',  
233 - 'tax_group.*',  
234 - 'tax_option.alias as option_alias',  
235 - 'tax_group.alias as group_alias',  
236 - 'tax_option.name as value',  
237 - 'tax_option.sort AS tax_option_sort',  
238 - 'tax_group.sort AS tax_group_sort',  
239 - ])  
240 - ->from(['tax_option' ])  
241 - ->where(['tax_option.tax_option_id'=>$query1->union($query2)])  
242 - ->innerJoin('tax_group','tax_group.tax_group_id = tax_option.tax_group_id')  
243 - ->orderBy('tax_option.sort, tax_group.sort');  
244 - return $query3->all();  
245 } 247 }
246 248
247 public function getTaxGroupsForMenu() 249 public function getTaxGroupsForMenu()
frontend/models/ProductFrontendSearch.php
@@ -104,61 +104,6 @@ class ProductFrontendSearch extends Product { @@ -104,61 +104,6 @@ class ProductFrontendSearch extends Product {
104 return $query; 104 return $query;
105 } 105 }
106 106
107 - public function optionsForCategory($category = null, $params = []) {  
108 - $query = TaxOption::find()  
109 - ->select([  
110 - TaxOption::tableName() .'.*',  
111 - ])  
112 - ->leftJoin(ProductOption::tableName(), ProductOption::tableName() .'.option_id='. TaxOption::tableName() .'.tax_option_id')  
113 - ->joinWith('taxGroup')  
114 - ->where([TaxGroup::tableName() .'.is_filter' => true]);  
115 -  
116 - $query->innerJoin('product_variant', 'product_variant.product_id = '. ProductOption::tableName() .'.product_id');  
117 - $query->andWhere(['!=', 'product_variant.status', 1]);  
118 - $query->groupBy(TaxOption::tableName() .'.tax_option_id');  
119 -// $query->having(['>', 'COUNT(product_variant.product_variant_id)', 0]);  
120 -  
121 - if (!empty($category)) {  
122 - $query->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. ProductOption::tableName() .'.product_id');  
123 - $query->andWhere([ProductCategory::tableName() .'.category_id' => $category->category_id]);  
124 - }  
125 -  
126 - $query->orderBy(TaxOption::tableName() .'.sort', SORT_ASC);  
127 - $query->limit(null);  
128 -  
129 -// $queryCount = ProductOption::find()  
130 -// ->select(['COUNT('. ProductOption::tableName() .'.product_id)'])  
131 -// ->where(ProductOption::tableName() .'.option_id = '. TaxOption::tableName() .'.tax_option_id');  
132 -// $queryCount->andWhere('(SELECT COUNT(pv.product_variant_id) FROM "product_variant" "pv" WHERE pv.stock != 0 AND pv.product_id = '. ProductOption::tableName() .'.product_id) > 0');  
133 -// if (!empty($category)) {  
134 -// $queryCount->andWhere('(SELECT COUNT(pc.product_id) FROM product_category pc WHERE pc.product_id = '. ProductOption::tableName() .'.product_id AND pc.category_id = '. $category->category_id .') > 0');  
135 -// }  
136 -// if (!empty($params['options'])) {  
137 -// $queryCount->innerJoin('tax_option', 'tax_option.tax_option_id = product_option.option_id');  
138 -// $queryCount->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id');  
139 -// foreach ($params['options'] as $group => $options) {  
140 -// $queryCount->andWhere([  
141 -// 'tax_group.alias' => $group,  
142 -// 'tax_option.alias' => $options  
143 -// ]);  
144 -// }  
145 -// }  
146 -// if (!empty($params['brands'])) {  
147 -// $queryCount->innerJoin(Product::tableName(), 'product.product_id='. ProductOption::tableName() .'.product_id');  
148 -// $queryCount->andWhere(['product.brand_id' => $params['brands']]);  
149 -// }  
150 -// if (!empty($params['prices'])) {  
151 -// if ($params['prices']['min'] > 0) {  
152 -// $queryCount->andWhere(['>=', 'pv.price', $params['prices']['min']]);  
153 -// }  
154 -// if ($params['prices']['max'] > 0) {  
155 -// $queryCount->andWhere(['<=', 'pv.price', $params['prices']['max']]);  
156 -// }  
157 -// }  
158 -// $query->addSelect(['_items_count' => $queryCount]);  
159 -  
160 - return $query;  
161 - }  
162 107
163 public function priceLimits($category = null, $params = []) { 108 public function priceLimits($category = null, $params = []) {
164 if (!empty($category)) { 109 if (!empty($category)) {