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