Commit 21ce7afa7afd9888deef5a8e995c9c39efb51321
1 parent
321cea72
-Fix when cannot unset all options from product or variant
-Fix when product have no options its variants don't display during filtering by variant's options
Showing
6 changed files
with
25 additions
and
54 deletions
Show diff stats
common/modules/product/controllers/ManageController.php
... | ... | @@ -9,6 +9,7 @@ |
9 | 9 | use Yii; |
10 | 10 | use common\modules\product\models\Product; |
11 | 11 | use common\modules\product\models\ProductSearch; |
12 | + use yii\helpers\VarDumper; | |
12 | 13 | use yii\web\Controller; |
13 | 14 | use yii\web\NotFoundHttpException; |
14 | 15 | use yii\filters\VerbFilter; |
... | ... | @@ -125,7 +126,9 @@ |
125 | 126 | public function actionUpdate($id) |
126 | 127 | { |
127 | 128 | $model = $this->findModel($id); |
129 | + | |
128 | 130 | if($model->load(Yii::$app->request->post())) { |
131 | + $model->unlinkAll('options',true); | |
129 | 132 | $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); |
130 | 133 | if($model->save()) { |
131 | 134 | if(!empty( $model->imagesUpload ) && ( ( $images = $model->imagesUpload() ) !== false )) { | ... | ... |
common/modules/product/controllers/VariantController.php
common/modules/product/helpers/ProductHelper.php
... | ... | @@ -251,17 +251,21 @@ |
251 | 251 | Product::tableName() . '.product_id IN ( |
252 | 252 | SELECT DISTINCT products |
253 | 253 | FROM ( |
254 | - SELECT product_id AS products | |
254 | + SELECT product_id AS products FROM product | |
255 | + WHERE | |
256 | + product_id IN ( | |
257 | + SELECT product_id | |
255 | 258 | FROM product_option |
256 | 259 | INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id |
257 | 260 | INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id |
258 | - WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\') OR product_id IN ( | |
259 | - (SELECT product_id AS products | |
261 | + WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\')) | |
262 | + OR product_id IN ( | |
263 | + SELECT product_id | |
260 | 264 | FROM product_variant_option |
261 | 265 | INNER JOIN product_variant ON product_variant_option.product_variant_id = product_variant.product_variant_id |
262 | 266 | INNER JOIN tax_option ON tax_option.tax_option_id = product_variant_option.option_id |
263 | 267 | 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) . '\')) | |
268 | + WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\') | |
265 | 269 | ) |
266 | 270 | ) AS table_name |
267 | 271 | )' | ... | ... |
common/modules/product/models/Product.php
... | ... | @@ -13,7 +13,8 @@ |
13 | 13 | use yii\db\ActiveRecord; |
14 | 14 | use yii\helpers\ArrayHelper; |
15 | 15 | use common\behaviors\DefaultVariantBehavior; |
16 | - | |
16 | + use yii\helpers\VarDumper; | |
17 | + | |
17 | 18 | /** |
18 | 19 | * This is the model class for table "{{%product}}". |
19 | 20 | * @property string $name |
... | ... | @@ -388,51 +389,7 @@ |
388 | 389 | ->sum('quantity'); |
389 | 390 | } |
390 | 391 | |
391 | -// public function afterSave($insert, $changedAttributes) | |
392 | -// { | |
393 | -// parent::afterSave($insert, $changedAttributes); | |
394 | -// | |
395 | -// $this->unlinkAll('categories', true); | |
396 | -// $this->unlinkAll('options', true); | |
397 | -// | |
398 | -// if($this->_categories) { | |
399 | -// $categories = Category::findAll($this->_categories); | |
400 | -// foreach($categories as $category) { | |
401 | -// $this->link('categories', $category); | |
402 | -// } | |
403 | -// } | |
404 | -// $options = TaxOption::findAll($this->_options); | |
405 | -// | |
406 | -// foreach($options as $option) { | |
407 | -// $this->link('options', $option); | |
408 | -// } | |
409 | -// | |
410 | -// | |
411 | -// if(!empty( $this->_variants )) { | |
412 | -// $todel = []; | |
413 | -// foreach($this->variants ? : [] as $_variant) { | |
414 | -// $todel[ $_variant->product_variant_id ] = $_variant->product_variant_id; | |
415 | -// } | |
416 | -// foreach($this->_variants as $_variant) { | |
417 | -// if(!is_array($_variant)) { | |
418 | -// return; | |
419 | -// } | |
420 | -// if(!empty( $_variant[ 'product_variant_id' ] )) { | |
421 | -// unset( $todel[ $_variant[ 'product_variant_id' ] ] ); | |
422 | -// $model = ProductVariant::findOne($_variant[ 'product_variant_id' ]); | |
423 | -// } else { | |
424 | -// $model = new ProductVariant(); | |
425 | -// } | |
426 | -// $_variant[ 'product_id' ] = $this->product_id; | |
427 | -// $model->load([ 'ProductVariant' => $_variant ]); | |
428 | -// $model->product_id = $this->product_id; | |
429 | -// $model->save(); | |
430 | -// } | |
431 | -// if(!empty( $todel )) { | |
432 | -// ProductVariant::deleteAll([ 'product_variant_id' => $todel ]); | |
433 | -// } | |
434 | -// } | |
435 | -// } | |
392 | + | |
436 | 393 | public function afterSave($insert, $changedAttributes) |
437 | 394 | { |
438 | 395 | parent::afterSave($insert, $changedAttributes); |
... | ... | @@ -446,13 +403,18 @@ |
446 | 403 | } |
447 | 404 | } |
448 | 405 | |
449 | - if(!empty($this->options)){ | |
450 | - $options = TaxOption::findAll($this->options); | |
451 | - $this->unlinkAll('options',true); | |
406 | + | |
407 | + $options = TaxOption::findAll($this->options); | |
408 | +// VarDumper::dump($this->options, 10, true); | |
409 | +// die(); | |
410 | + $this->unlinkAll('options',true); | |
411 | + if(is_array($options)){ | |
452 | 412 | foreach($options as $option){ |
453 | 413 | $this->link('options', $option); |
454 | 414 | } |
455 | 415 | } |
416 | + | |
417 | + | |
456 | 418 | |
457 | 419 | |
458 | 420 | if (!empty($this->_variants)) { | ... | ... |
frontend/controllers/CatalogController.php
... | ... | @@ -111,7 +111,7 @@ class CatalogController extends \yii\web\Controller |
111 | 111 | $productModel = new ProductFrontendSearch(); |
112 | 112 | //$productQuery = $productModel->getSearchQuery($category, $params); |
113 | 113 | $productProvider = $productModel->search($category, $params); |
114 | - | |
114 | + | |
115 | 115 | $brandModel = new BrandSearch(); |
116 | 116 | $brands = $brandModel->getBrands($category, $params) |
117 | 117 | ->all(); | ... | ... |
frontend/models/ProductFrontendSearch.php