Commit ad348101313a18a8a165a7a2eb3c4e14b0741d3a
1 parent
4fd39cf0
add variantSku
Showing
1 changed file
with
66 additions
and
25 deletions
Show diff stats
helpers/FilterHelper.php
| @@ -108,7 +108,9 @@ | @@ -108,7 +108,9 @@ | ||
| 108 | 108 | ||
| 109 | return $filterView; | 109 | return $filterView; |
| 110 | } | 110 | } |
| 111 | - | 111 | + |
| 112 | + | ||
| 113 | + | ||
| 112 | /** | 114 | /** |
| 113 | * Fill query with filter conditions | 115 | * Fill query with filter conditions |
| 114 | * | 116 | * |
| @@ -121,28 +123,33 @@ | @@ -121,28 +123,33 @@ | ||
| 121 | foreach ($params as $key => $param) { | 123 | foreach ($params as $key => $param) { |
| 122 | switch ($key) { | 124 | switch ($key) { |
| 123 | case 'special': | 125 | case 'special': |
| 126 | + unset($params[$key]); | ||
| 124 | self::filterSpecial($param, $query); | 127 | self::filterSpecial($param, $query); |
| 125 | break; | 128 | break; |
| 126 | case 'brands': | 129 | case 'brands': |
| 130 | + unset($params[$key]); | ||
| 127 | self::filterBrands($param, $query); | 131 | self::filterBrands($param, $query); |
| 128 | break; | 132 | break; |
| 129 | case 'keywords': | 133 | case 'keywords': |
| 134 | + unset($params[$key]); | ||
| 130 | self::filterKeywords($param, $query); | 135 | self::filterKeywords($param, $query); |
| 131 | break; | 136 | break; |
| 132 | case 'prices': | 137 | case 'prices': |
| 138 | + unset($params[$key]); | ||
| 133 | self::filterPrices($param, $query); | 139 | self::filterPrices($param, $query); |
| 134 | break; | 140 | break; |
| 135 | - default: | ||
| 136 | - $last_query = self::filterOptions($param, $last_query); | ||
| 137 | - break; | ||
| 138 | } | 141 | } |
| 139 | } | 142 | } |
| 143 | + $last_query = self::filterOptions($params, $last_query); | ||
| 140 | // If tax option filters were provided filter query with them | 144 | // If tax option filters were provided filter query with them |
| 141 | if (!empty( $last_query )) { | 145 | if (!empty( $last_query )) { |
| 142 | $query->andWhere([ 'product.id' => $last_query ]); | 146 | $query->andWhere([ 'product.id' => $last_query ]); |
| 143 | } | 147 | } |
| 144 | } | 148 | } |
| 145 | - | 149 | + |
| 150 | + | ||
| 151 | + | ||
| 152 | + | ||
| 146 | /** | 153 | /** |
| 147 | * Tax Option filter | 154 | * Tax Option filter |
| 148 | * | 155 | * |
| @@ -160,31 +167,65 @@ | @@ -160,31 +167,65 @@ | ||
| 160 | ->innerJoin( | 167 | ->innerJoin( |
| 161 | 'product_variant', | 168 | 'product_variant', |
| 162 | 'product_variant_option.product_variant_id = product_variant.id' | 169 | 'product_variant_option.product_variant_id = product_variant.id' |
| 163 | - ) | ||
| 164 | - ->innerJoin( | ||
| 165 | - 'tax_option', | ||
| 166 | - 'tax_option.id = product_variant_option.option_id' | ||
| 167 | - ) | ||
| 168 | - ->innerJoin( | ||
| 169 | - 'tax_option_lang', | ||
| 170 | - 'tax_option_lang.tax_option_id = tax_option.id' | ||
| 171 | - ) | ||
| 172 | - ->where([ 'tax_option_lang.alias' => $params ]); | 170 | + ); |
| 171 | + | ||
| 172 | + foreach ($params as $key=>$param){ | ||
| 173 | + $product_variant_id = ( new Query() )->distinct()->select('product_variant_option.product_variant_id as id') | ||
| 174 | + ->from('product_variant_option') | ||
| 175 | + ->innerJoin( | ||
| 176 | + 'tax_option', | ||
| 177 | + 'tax_option.id = product_variant_option.option_id' | ||
| 178 | + ) | ||
| 179 | + ->innerJoin( | ||
| 180 | + 'tax_option_lang', | ||
| 181 | + 'tax_option_lang.tax_option_id = tax_option.id' | ||
| 182 | + ) | ||
| 183 | + ->innerJoin( | ||
| 184 | + 'tax_group', | ||
| 185 | + 'tax_group.id = tax_option.tax_group_id' | ||
| 186 | + ) | ||
| 187 | + ->innerJoin( | ||
| 188 | + 'tax_group_lang', | ||
| 189 | + 'tax_group_lang.tax_group_id = tax_group.id' | ||
| 190 | + ) | ||
| 191 | + ->where([ 'tax_group_lang.alias' => $key ]) | ||
| 192 | + ->andWhere([ 'tax_option_lang.alias' => $param ]); | ||
| 193 | + $variant_query->andWhere(['product_variant_option.product_variant_id'=>$product_variant_id]); | ||
| 194 | + | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + | ||
| 173 | if($in_stock) { | 198 | if($in_stock) { |
| 174 | $variant_query->andWhere(['!=', 'product_variant.stock', 0]); | 199 | $variant_query->andWhere(['!=', 'product_variant.stock', 0]); |
| 175 | } | 200 | } |
| 176 | $product_query = ( new Query() )->distinct() | 201 | $product_query = ( new Query() )->distinct() |
| 177 | ->select('product_option.product_id as products') | 202 | ->select('product_option.product_id as products') |
| 178 | - ->from('product_option') | ||
| 179 | - ->innerJoin('tax_option', 'product_option.option_id = tax_option.id') | ||
| 180 | - ->innerJoin( | ||
| 181 | - 'tax_option_lang', | ||
| 182 | - 'tax_option_lang.tax_option_id = tax_option.id' | ||
| 183 | - ) | ||
| 184 | - ->where( | ||
| 185 | - [ 'tax_option_lang.alias' => $params ] | ||
| 186 | - ) | ||
| 187 | - ->union($variant_query); | 203 | + ->from('product_option'); |
| 204 | + foreach ($params as $key=>$param){ | ||
| 205 | + $product_id = ( new Query() )->distinct()->select('product_option.product_id as id') | ||
| 206 | + ->from('product_option') | ||
| 207 | + ->innerJoin( | ||
| 208 | + 'tax_option', | ||
| 209 | + 'tax_option.id = product_option.option_id' | ||
| 210 | + ) | ||
| 211 | + ->innerJoin( | ||
| 212 | + 'tax_option_lang', | ||
| 213 | + 'tax_option_lang.tax_option_id = tax_option.id' | ||
| 214 | + ) | ||
| 215 | + ->innerJoin( | ||
| 216 | + 'tax_group', | ||
| 217 | + 'tax_group.id = tax_option.tax_group_id' | ||
| 218 | + ) | ||
| 219 | + ->innerJoin( | ||
| 220 | + 'tax_group_lang', | ||
| 221 | + 'tax_group_lang.tax_group_id = tax_group.id' | ||
| 222 | + ) | ||
| 223 | + ->where([ 'tax_group_lang.alias' => $key ]) | ||
| 224 | + ->andWhere([ 'tax_option_lang.alias' => $param ]); | ||
| 225 | + $product_query->andWhere(['product_option.product_id'=>$product_id]); | ||
| 226 | + | ||
| 227 | + } | ||
| 228 | + $product_query->union($variant_query); | ||
| 188 | $query = ( new Query() )->select('products') | 229 | $query = ( new Query() )->select('products') |
| 189 | ->from([ 'result_table' => $product_query ]); | 230 | ->from([ 'result_table' => $product_query ]); |
| 190 | if (!empty( $last_query )) { | 231 | if (!empty( $last_query )) { |