Commit c7d997a91f5dae14617545be1a9cdf91e4f9e2be

Authored by Administrator
1 parent 4ace1a69

add variantSku

Showing 2 changed files with 49 additions and 41 deletions   Show diff stats
helpers/FilterHelper.php
... ... @@ -119,32 +119,41 @@
119 119 * @return mixed
120 120 */
121 121 public static function getProductVariantOptions($categoryId,$langId){
122   - $result = \Yii::$app->db->cache(function () use($categoryId,$langId) {
123   - return ( new Query() )->distinct()->select('tax_group_lang.alias')
124   - ->from('product_variant_option')
125   - ->innerJoin(
126   - 'tax_option',
127   - 'product_variant_option.option_id = tax_option.id'
128   - )
129   - ->innerJoin(
130   - 'tax_group',
131   - 'tax_group.id = tax_option.tax_group_id'
132   - )
133   - ->innerJoin(
134   - 'tax_group_lang',
135   - 'tax_group_lang.tax_group_id = tax_group.id'
136   - )
137   - ->innerJoin(
138   - 'tax_group_to_category',
139   - 'tax_group_to_category.tax_group_id = tax_group.id'
140   - )
141   - ->where([
142   - 'tax_group_lang.language_id' => $langId,
143   - 'tax_group_to_category.category_id' => $categoryId,
144   - 'tax_group.is_filter' => true
145   - ])->all();
146   - },60*60*24);
147   - return ArrayHelper::getColumn($result,'alias');
  122 +
  123 + $cacheKey = [
  124 + 'OptionsForFilter',
  125 + 'categoryId' => $categoryId,
  126 + 'langId' =>$langId
  127 + ];
  128 + if (!$OptionsForFilter = \Yii::$app->cache->get($cacheKey)) {
  129 + $OptionsForFilter = ( new Query() )->distinct()->select('tax_group_lang.alias')
  130 + ->from('product_variant_option')
  131 + ->innerJoin(
  132 + 'tax_option',
  133 + 'product_variant_option.option_id = tax_option.id'
  134 + )
  135 + ->innerJoin(
  136 + 'tax_group',
  137 + 'tax_group.id = tax_option.tax_group_id'
  138 + )
  139 + ->innerJoin(
  140 + 'tax_group_lang',
  141 + 'tax_group_lang.tax_group_id = tax_group.id'
  142 + )
  143 + ->innerJoin(
  144 + 'tax_group_to_category',
  145 + 'tax_group_to_category.tax_group_id = tax_group.id'
  146 + )
  147 + ->where([
  148 + 'tax_group_lang.language_id' => $langId,
  149 + 'tax_group_to_category.category_id' => $categoryId,
  150 + 'tax_group.is_filter' => true
  151 + ])->all();
  152 + $OptionsForFilter = ArrayHelper::getColumn($OptionsForFilter,'alias');
  153 + \Yii::$app->cache->set($cacheKey, $OptionsForFilter, 3600 * 24);
  154 + }
  155 +
  156 + return $OptionsForFilter;
148 157 }
149 158  
150 159  
... ...
models/ProductFrontendSearch.php
... ... @@ -4,6 +4,7 @@
4 4  
5 5 use artweb\artbox\ecommerce\helpers\FilterHelper;
6 6 use artweb\artbox\ecommerce\models\Category;
  7 + use artweb\artbox\language\models\Language;
7 8 use yii\base\Model;
8 9 use yii\data\ActiveDataProvider;
9 10 use yii\data\ArrayDataProvider;
... ... @@ -117,22 +118,18 @@
117 118 return $dataProvider;
118 119 }
119 120  
120   - public function getSearchQuery($category = null, $params = [], $in_stock = true)
  121 +
  122 + /**
  123 + * @param Category $category
  124 + * @param array $params
  125 + * @param bool $in_stock
  126 + * @return mixed
  127 + */
  128 + public function getSearchQuery($category, $params = [], $in_stock = true)
121 129 {
122 130  
123   - if (!empty( $category )) {
124   - /** @var ActiveQuery $query */
125   - /**@var Category $category * */
126   - $query = $category->getProducts();
  131 + $query = $category->getProducts();
127 132  
128   - } else {
129   - $query = Product::find()
130   - ->joinWith(
131   - [
132   - 'category.lang',
133   - ]
134   - );
135   - }
136 133  
137 134 $query->select([ 'product.*' ]);
138 135 $query->joinWith(
... ... @@ -176,7 +173,8 @@
176 173 ]
177 174 );
178 175  
179   - FilterHelper::setQueryParams($query, $params);
  176 + $lang = Language::getCurrent();
  177 + FilterHelper::setQueryParams($query, $params, $category->id, $lang->id);
180 178 return $query;
181 179 }
182 180  
... ... @@ -202,7 +200,8 @@
202 200 // Price filter fix
203 201 unset( $params[ 'prices' ] );
204 202  
205   - FilterHelper::setQueryParams($query, $params);
  203 + $lang = Language::getCurrent();
  204 + FilterHelper::setQueryParams($query, $params, $category->id, $lang->id);
206 205 $query->andWhere(
207 206 [
208 207 '>=',
... ...