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 197 return true;
198 198 }
199 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 249 public function getTaxGroupsForMenu()
... ...
frontend/models/ProductFrontendSearch.php
... ... @@ -104,61 +104,6 @@ class ProductFrontendSearch extends Product {
104 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 108 public function priceLimits($category = null, $params = []) {
164 109 if (!empty($category)) {
... ...