Commit 30ea8a3591d8b8666869c49a414e873aa23d640d
1 parent
9173c97b
29.06.16
Showing
15 changed files
with
284 additions
and
111 deletions
Show diff stats
backend/config/main.php
| ... | ... | @@ -152,6 +152,13 @@ return [ |
| 152 | 152 | 'rules' => [ |
| 153 | 153 | 'slider-image/<action>/<slider_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'slider-image/<action>', |
| 154 | 154 | 'slider-image/<action>/<slider_id:[A-Za-z0-9_-]+>' => 'slider-image/<action>', |
| 155 | + 'rubrication/tax-group/<level:[0-9]+>' => 'rubrication/tax-group', | |
| 156 | + 'rubrication/tax-group/<action>/<level:[0-9]+>/<id:[A-Za-z0-9_-]+>' => 'rubrication/tax-group/<action>', | |
| 157 | + 'rubrication/tax-group/<action>/<level:[0-9]+>' => 'rubrication/tax-group/<action>', | |
| 158 | + 'product/manage/<action>' => 'product/manage/<action>', | |
| 159 | + 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/' => 'product/<controller>/<action>', | |
| 160 | + 'product/<controller>/<action>/<product_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'product/<controller>/<action>', | |
| 161 | + 'product/<action>/<product_id:[A-Za-z0-9_-]+>' => 'product/<action>', | |
| 155 | 162 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', |
| 156 | 163 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', |
| 157 | 164 | ... | ... |
backend/views/layouts/main-sidebar.php
| 1 | 1 | <?php |
| 2 | +use yii\helpers\Url; | |
| 2 | 3 | use yii\widgets\Menu; |
| 3 | 4 | ?> |
| 4 | 5 | <aside class="main-sidebar"> |
| ... | ... | @@ -33,11 +34,11 @@ use yii\widgets\Menu; |
| 33 | 34 | 'url' => ['/product/manage'], |
| 34 | 35 | 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'] |
| 35 | 36 | ], |
| 36 | - [ | |
| 37 | - 'label' => 'Модификации', | |
| 38 | - 'url' => ['/product/variant'], | |
| 39 | - 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'] | |
| 40 | - ], | |
| 37 | +// [ | |
| 38 | +// 'label' => 'Модификации', | |
| 39 | +// 'url' => ['/product/variant'], | |
| 40 | +// 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'] | |
| 41 | +// ], | |
| 41 | 42 | [ |
| 42 | 43 | 'label' => 'Категории', |
| 43 | 44 | 'url' => ['/category'], |
| ... | ... | @@ -65,8 +66,13 @@ use yii\widgets\Menu; |
| 65 | 66 | 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'], |
| 66 | 67 | ], |
| 67 | 68 | [ |
| 68 | - 'label' => 'Характеристики', | |
| 69 | - 'url' => ['/rubrication/tax-group'], | |
| 69 | + 'label' => 'Характеристики Товаров', | |
| 70 | + 'url' => Url::toRoute(['/rubrication/tax-group', 'level'=> '0']), | |
| 71 | + 'options' => ['class'=>\Yii::$app->user->can('rubrication') ? '' :'hide'], | |
| 72 | + ], | |
| 73 | + [ | |
| 74 | + 'label' => 'Характеристики Модификаций', | |
| 75 | + 'url' => Url::toRoute(['/rubrication/tax-group', 'level'=> '1']), | |
| 70 | 76 | 'options' => ['class'=>\Yii::$app->user->can('rubrication') ? '' :'hide'], |
| 71 | 77 | ], |
| 72 | 78 | [ | ... | ... |
common/config/main.php
| ... | ... | @@ -43,8 +43,8 @@ return [ |
| 43 | 43 | 'artboximage' => [ |
| 44 | 44 | 'class' => 'common\components\artboximage\ArtboxImage', |
| 45 | 45 | 'driver' => 'GD', //GD or Imagick |
| 46 | - 'rootPath' => Yii::getAlias('@frontend/web/images'), | |
| 47 | - 'rootUrl' => Yii::getAlias('/images'), | |
| 46 | + 'rootPath' => Yii::getAlias('@storage'), | |
| 47 | + 'rootUrl' => Yii::getAlias('/storage'), | |
| 48 | 48 | 'presets' => [ |
| 49 | 49 | 'product' => [ |
| 50 | 50 | 'resize' => [ | ... | ... |
common/modules/product/controllers/VariantController.php
| ... | ... | @@ -3,8 +3,9 @@ |
| 3 | 3 | namespace common\modules\product\controllers; |
| 4 | 4 | |
| 5 | 5 | use common\modules\product\models\Product; |
| 6 | +use common\modules\product\models\ProductImage; | |
| 6 | 7 | use common\modules\product\models\ProductVariant; |
| 7 | -use common\modules\product\models\ProductVariantSearch; | |
| 8 | +use common\modules\product\models\ProductVariantListSearch; | |
| 8 | 9 | use Yii; |
| 9 | 10 | use yii\web\Controller; |
| 10 | 11 | use yii\web\NotFoundHttpException; |
| ... | ... | @@ -35,10 +36,10 @@ class VariantController extends Controller |
| 35 | 36 | * Lists all ProductVariant models. |
| 36 | 37 | * @return mixed |
| 37 | 38 | */ |
| 38 | - public function actionIndex() | |
| 39 | + public function actionIndex($product_id) | |
| 39 | 40 | { |
| 40 | - $searchModel = new ProductVariantSearch(); | |
| 41 | - $dataProvider = $searchModel->search(Yii::$app->request->queryParams); | |
| 41 | + $searchModel = new ProductVariantListSearch(); | |
| 42 | + $dataProvider = $searchModel->search(Yii::$app->request->queryParams,$product_id); | |
| 42 | 43 | |
| 43 | 44 | if ( ($product = Yii::$app->request->get('product_id')) !== null) { |
| 44 | 45 | $product = Product::findOne($product); |
| ... | ... | @@ -48,6 +49,7 @@ class VariantController extends Controller |
| 48 | 49 | 'searchModel' => $searchModel, |
| 49 | 50 | 'dataProvider' => $dataProvider, |
| 50 | 51 | 'product' => $product, |
| 52 | + 'product_id' => $product_id, | |
| 51 | 53 | ]); |
| 52 | 54 | } |
| 53 | 55 | |
| ... | ... | @@ -68,14 +70,17 @@ class VariantController extends Controller |
| 68 | 70 | * If creation is successful, the browser will be redirected to the 'view' page. |
| 69 | 71 | * @return mixed |
| 70 | 72 | */ |
| 71 | - public function actionCreate() | |
| 73 | + public function actionCreate($product_id) | |
| 72 | 74 | { |
| 73 | 75 | $model = new ProductVariant(); |
| 74 | - | |
| 76 | + $model->product_id = $product_id; | |
| 75 | 77 | if ($model->load(Yii::$app->request->post())) { |
| 78 | + | |
| 76 | 79 | $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); |
| 80 | + $model->validate(); | |
| 81 | + | |
| 82 | + if ($model->save()) { | |
| 77 | 83 | |
| 78 | - if ($model->save() && $model->imagesUpload) { | |
| 79 | 84 | if ( ($images = $model->imagesUpload()) !== FALSE) { |
| 80 | 85 | foreach ($images as $image) { |
| 81 | 86 | $imageModel = new ProductImage(); |
| ... | ... | @@ -86,7 +91,7 @@ class VariantController extends Controller |
| 86 | 91 | } |
| 87 | 92 | } |
| 88 | 93 | |
| 89 | - return $this->redirect(['view', 'id' => $model->product_variant_id]); | |
| 94 | + return $this->redirect(['index', 'product_id' => $product_id]); | |
| 90 | 95 | } |
| 91 | 96 | } else { |
| 92 | 97 | return $this->render('create', [ |
| ... | ... | @@ -98,29 +103,71 @@ class VariantController extends Controller |
| 98 | 103 | /** |
| 99 | 104 | * Updates an existing ProductVariant model. |
| 100 | 105 | * If update is successful, the browser will be redirected to the 'view' page. |
| 106 | + * @param integer $product_id | |
| 101 | 107 | * @param integer $id |
| 102 | 108 | * @return mixed |
| 103 | 109 | */ |
| 104 | - public function actionUpdate($id) | |
| 110 | + public function actionUpdate($product_id, $id) | |
| 105 | 111 | { |
| 106 | 112 | $model = $this->findModel($id); |
| 107 | 113 | if ($model->load(Yii::$app->request->post())) { |
| 108 | - $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 109 | 121 | if ($model->save()) { |
| 110 | - if ( ($images = $model->imagesUpload()) !== FALSE) { | |
| 111 | - foreach ($images as $image) { | |
| 122 | + | |
| 123 | + if ( ($image = UploadedFile::getInstance($model, 'image')) ) { | |
| 124 | + $imageModel = ProductImage::find()->where(['product_variant_id' => $model->product_variant_id])->one(); | |
| 125 | + | |
| 126 | + if($imageModel instanceof ProductImage) { | |
| 127 | + $imageModel->product_id = $model->product_id; | |
| 128 | + $imageModel->product_variant_id = $model->product_variant_id; | |
| 129 | + $imageModel->image = $image->name; | |
| 130 | + $imageModel->save(); | |
| 131 | + } else { | |
| 112 | 132 | $imageModel = new ProductImage(); |
| 113 | 133 | $imageModel->product_id = $model->product_id; |
| 114 | 134 | $imageModel->product_variant_id = $model->product_variant_id; |
| 115 | - $imageModel->image = $image; | |
| 135 | + $imageModel->image = $image->name; | |
| 116 | 136 | $imageModel->save(); |
| 117 | 137 | } |
| 138 | + | |
| 139 | + | |
| 140 | + $imgDir = Yii::getAlias('@storage/products/'); | |
| 141 | + | |
| 142 | + if(!is_dir($imgDir)) { | |
| 143 | + mkdir($imgDir, 0755, true); | |
| 144 | + } | |
| 145 | + | |
| 146 | + $image->saveAs(Yii::getAlias('@storage/products/' . $image->name)); | |
| 118 | 147 | } |
| 119 | 148 | |
| 120 | - return $this->redirect(['view', 'id' => $model->product_variant_id]); | |
| 121 | 149 | } |
| 150 | + return $this->redirect(['index', 'product_id'=>$product_id]); | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | +// $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); | |
| 156 | +// if ($model->save()) { | |
| 157 | +// if ( ($images = $model->imagesUpload()) !== FALSE) { | |
| 158 | +// foreach ($images as $image) { | |
| 159 | +// $imageModel = new ProductImage(); | |
| 160 | +// $imageModel->product_id = $model->product_id; | |
| 161 | +// $imageModel->product_variant_id = $model->product_variant_id; | |
| 162 | +// $imageModel->image = $image; | |
| 163 | +// $imageModel->save(); | |
| 164 | +// } | |
| 165 | +// } | |
| 166 | +// | |
| 167 | +// return $this->redirect(['index', 'product_id' => $product_id]); | |
| 168 | +// } | |
| 122 | 169 | } else { |
| 123 | - $groups = $model->category->getTaxGroups(); | |
| 170 | + $groups = $model->category-> getTaxGroupsByLevel(1); | |
| 124 | 171 | |
| 125 | 172 | return $this->render('update', [ |
| 126 | 173 | 'model' => $model, | ... | ... |
common/modules/product/models/Category.php
| ... | ... | @@ -7,6 +7,7 @@ use common\components\artboxtree\ArtboxTreeBehavior; |
| 7 | 7 | use common\components\artboxtree\ArtboxTreeHelper; |
| 8 | 8 | use common\modules\relation\relationBehavior; |
| 9 | 9 | use common\modules\rubrication\behaviors\ArtboxSynonymBehavior; |
| 10 | +use common\modules\rubrication\models\TaxGroup; | |
| 10 | 11 | use Yii; |
| 11 | 12 | use yii\base\ErrorException; |
| 12 | 13 | |
| ... | ... | @@ -164,6 +165,14 @@ class Category extends \yii\db\ActiveRecord |
| 164 | 165 | return $this->getRelations('tax_group_to_category'); |
| 165 | 166 | } |
| 166 | 167 | |
| 168 | +// public function getTaxGroupsByLevel($level) | |
| 169 | +// { | |
| 170 | +// return $this->hasMany(Specialization::className(), [ 'specialization_id' => 'specialization_id' ]) | |
| 171 | +// ->viaTable('portfolio_specialization', [ 'portfolio_id' => 'portfolio_id' ]); | |
| 172 | +// | |
| 173 | +// return $this->hasMany(ProductCategory::className(), ['category_id' => 'category_id'])->with(TaxGroup::tableName())->where(['level' => $level]); | |
| 174 | +// } | |
| 175 | + | |
| 167 | 176 | public function getRemote_category() |
| 168 | 177 | { |
| 169 | 178 | return ArtboxTreeHelper::getArrayField($this->remote_id); | ... | ... |
common/modules/product/models/ProductImage.php
| ... | ... | @@ -97,7 +97,7 @@ class ProductImage extends \yii\db\ActiveRecord |
| 97 | 97 | */ |
| 98 | 98 | public function getImageFile() |
| 99 | 99 | { |
| 100 | - return isset($this->image) ? '/images/products/' . $this->image : null; | |
| 100 | + return isset($this->image) ? '/storage/products/' . $this->image : null; | |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | /** |
| ... | ... | @@ -107,7 +107,7 @@ class ProductImage extends \yii\db\ActiveRecord |
| 107 | 107 | public function getImageUrl() |
| 108 | 108 | { |
| 109 | 109 | // return a default image placeholder if your source image is not found |
| 110 | - return isset($this->image) ? '/images/products/'. $this->image : '/images/no_photo.png'; | |
| 110 | + return isset($this->image) ? '/storage/products/'. $this->image : '/storage/no_photo.png'; | |
| 111 | 111 | } |
| 112 | 112 | |
| 113 | 113 | /** | ... | ... |
common/modules/product/models/ProductVariantListSearch.php
0 → 100644
| 1 | +<?php | |
| 2 | + | |
| 3 | +namespace common\modules\product\models; | |
| 4 | + | |
| 5 | +use Yii; | |
| 6 | +use yii\base\Model; | |
| 7 | +use yii\data\ActiveDataProvider; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * ProductVariantSearch represents the model behind the search form about `backend\models\ProductVariant`. | |
| 11 | + */ | |
| 12 | +class ProductVariantListSearch extends ProductVariant | |
| 13 | +{ | |
| 14 | + /** | |
| 15 | + * @inheritdoc | |
| 16 | + */ | |
| 17 | + public function rules() | |
| 18 | + { | |
| 19 | + return [ | |
| 20 | + [['product_variant_id', 'product_id', 'product_unit_id', 'product_variant_type_id'], 'integer'], | |
| 21 | + [['name', 'sku', 'remote_id'], 'safe'], | |
| 22 | + [['price', 'price_old', 'stock'], 'number'], | |
| 23 | + ]; | |
| 24 | + } | |
| 25 | + | |
| 26 | + /** | |
| 27 | + * @inheritdoc | |
| 28 | + */ | |
| 29 | + public function scenarios() | |
| 30 | + { | |
| 31 | + // bypass scenarios() implementation in the parent class | |
| 32 | + return Model::scenarios(); | |
| 33 | + } | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * Creates data provider instance with search query applied | |
| 37 | + * | |
| 38 | + * @param array $params | |
| 39 | + * | |
| 40 | + * @return ActiveDataProvider | |
| 41 | + */ | |
| 42 | + public function search($params, $product_id = false) | |
| 43 | + { | |
| 44 | + $query = ProductVariant::find(); | |
| 45 | + | |
| 46 | + // add conditions that should always apply here | |
| 47 | + | |
| 48 | + $dataProvider = new ActiveDataProvider([ | |
| 49 | + 'query' => $query, | |
| 50 | + ]); | |
| 51 | + | |
| 52 | + $this->load($params); | |
| 53 | + | |
| 54 | + if (!$this->validate()) { | |
| 55 | + // uncomment the following line if you do not want to return any records when validation fails | |
| 56 | + // $query->where('0=1'); | |
| 57 | + return $dataProvider; | |
| 58 | + } | |
| 59 | + | |
| 60 | + if($product_id){ | |
| 61 | + $query->andFilterWhere([ | |
| 62 | + 'product_id' => $product_id, | |
| 63 | + ]); | |
| 64 | + } | |
| 65 | + | |
| 66 | + // grid filtering conditions | |
| 67 | + $query->andFilterWhere([ | |
| 68 | + 'product_variant_id' => $this->product_variant_id, | |
| 69 | + 'price' => $this->price, | |
| 70 | + 'price_old' => $this->price_old, | |
| 71 | + 'stock' => $this->stock, | |
| 72 | + 'product_unit_id' => $this->product_unit_id, | |
| 73 | + 'product_variant_type_id' => $this->product_variant_type_id, | |
| 74 | + ]); | |
| 75 | + | |
| 76 | + $query->andFilterWhere(['like', 'name', $this->name]) | |
| 77 | + ->andFilterWhere(['like', 'sku', $this->sku]) | |
| 78 | + ->andFilterWhere(['like', 'remote_id', $this->remote_id]); | |
| 79 | + | |
| 80 | + return $dataProvider; | |
| 81 | + } | |
| 82 | +} | ... | ... |
common/modules/product/views/variant/_form.php
| ... | ... | @@ -23,82 +23,33 @@ use kartik\select2\Select2; |
| 23 | 23 | |
| 24 | 24 | <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?> |
| 25 | 25 | |
| 26 | - <?= $form->field($model, 'product_id')->hiddenInput()->label(''); ?> | |
| 26 | + <?= $form->field($model, 'product_id')->hiddenInput()->label(false); ?> | |
| 27 | 27 | |
| 28 | 28 | <?= $form->field($model, 'sku')->textarea(); ?> |
| 29 | 29 | <?= $form->field($model, 'price')->textarea(); ?> |
| 30 | 30 | <?= $form->field($model, 'price_old')->textarea(); ?> |
| 31 | - | |
| 32 | - <?= $form->field($model, 'imagesUpload[]')->widget(\kartik\file\FileInput::classname(), [ | |
| 33 | - 'language' => 'ru', | |
| 31 | + <?php var_dump($model->imageUrl)?> | |
| 32 | + <?= $form->field($model, 'image')->widget(\kartik\file\FileInput::classname(), [ | |
| 33 | + 'model' => $model, | |
| 34 | + 'attribute' => 'image', | |
| 34 | 35 | 'options' => [ |
| 35 | 36 | 'accept' => 'image/*', |
| 36 | - 'multiple' => true, | |
| 37 | + 'multiple' => true | |
| 37 | 38 | ], |
| 38 | 39 | 'pluginOptions' => [ |
| 39 | - 'allowedFileExtensions' => ['jpg', 'gif', 'png'], | |
| 40 | - 'initialPreview' => !empty($model->imagesHTML) ? $model->imagesHTML : [], | |
| 41 | - 'initialPreviewConfig' => $model->imagesConfig, | |
| 42 | - 'overwriteInitial' => false, | |
| 43 | - 'showRemove' => false, | |
| 40 | + 'allowedFileExtensions' => ['jpg','gif','png'], | |
| 41 | + 'initialPreview' => $model->imageUrl ? \common\components\artboximage\ArtboxImageHelper::getImage($model->imageUrl, 'products') : '', | |
| 42 | + 'overwriteInitial' => true, | |
| 43 | + 'showRemove' => true, | |
| 44 | 44 | 'showUpload' => false, |
| 45 | -// 'uploadUrl' => empty($model->product_id) ? null : \yii\helpers\Url::to(['/product/manage/uploadImage']), | |
| 46 | - 'uploadAsync' => !empty($model->product_id), | |
| 47 | - 'previewFileType' => 'image', | |
| 48 | 45 | ], |
| 49 | 46 | ]); ?> |
| 50 | 47 | |
| 51 | - <?php /*= $form->field($model, 'variants')->widget(MultipleInput::className(), [ | |
| 52 | - 'columns' => [ | |
| 53 | - [ | |
| 54 | - 'name' => 'product_variant_id', | |
| 55 | - 'type' => MultipleInputColumn::TYPE_HIDDEN_INPUT, | |
| 56 | - ], | |
| 57 | - [ | |
| 58 | - 'name' => 'name', | |
| 59 | - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT, | |
| 60 | - 'title' => Yii::t('product', 'Name'), | |
| 61 | - ], | |
| 62 | - [ | |
| 63 | - 'name' => 'sku', | |
| 64 | - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT, | |
| 65 | - 'title' => Yii::t('product', 'SKU'), | |
| 66 | - ], | |
| 67 | - [ | |
| 68 | - 'name' => 'price', | |
| 69 | - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT, | |
| 70 | - 'title' => Yii::t('product', 'Price'), | |
| 71 | - ], | |
| 72 | - [ | |
| 73 | - 'name' => 'price_old', | |
| 74 | - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT, | |
| 75 | - 'title' => Yii::t('product', 'Old Price'), | |
| 76 | - ], | |
| 77 | - [ | |
| 78 | - 'name' => 'product_unit_id', | |
| 79 | - 'type' => MultipleInputColumn::TYPE_DROPDOWN, | |
| 80 | - 'title' => Yii::t('product', 'Unit'), | |
| 81 | - 'items' => ArrayHelper::map(\common\modules\product\models\ProductUnit::find()->all(), 'product_unit_id', 'name'), | |
| 82 | - ], | |
| 83 | - [ | |
| 84 | - 'name' => 'stock', | |
| 85 | - 'type' => MultipleInputColumn::TYPE_TEXT_INPUT, | |
| 86 | - 'title' => Yii::t('product', 'Stock'), | |
| 87 | - 'options' => [ | |
| 88 | - 'placeholder' => '∞' | |
| 89 | - ], | |
| 90 | - ], | |
| 91 | - [ | |
| 92 | - 'name' => 'image', | |
| 93 | - 'type' => 'fileInput', | |
| 94 | - 'title' => Yii::t('product', 'Image'), | |
| 95 | - 'options' => [ | |
| 96 | - 'multiple' => false | |
| 97 | - ], | |
| 98 | - ], | |
| 99 | - ], | |
| 100 | - ]); | |
| 101 | - */ ?> | |
| 48 | + <?= $form->field($model, 'product_unit_id')->dropDownList( | |
| 49 | + ArrayHelper::map(\common\modules\product\models\ProductUnit::find()->all(), 'product_unit_id', 'name'), | |
| 50 | + [ | |
| 51 | + 'prompt' => Yii::t('product', 'Unit'), | |
| 52 | + ])->label(Yii::t('product', 'Unit')) ?> | |
| 102 | 53 | |
| 103 | 54 | <?php if(isset($groups)) :?> |
| 104 | 55 | <?php foreach($groups->all() as $group) :?> | ... | ... |
common/modules/product/views/variant/index.php
| ... | ... | @@ -2,6 +2,7 @@ |
| 2 | 2 | |
| 3 | 3 | use yii\helpers\Html; |
| 4 | 4 | use yii\grid\GridView; |
| 5 | +use yii\helpers\Url; | |
| 5 | 6 | |
| 6 | 7 | /* @var $this yii\web\View */ |
| 7 | 8 | /* @var $searchModel common\modules\product\models\ProductVariantSearch */ |
| ... | ... | @@ -24,7 +25,7 @@ if (!empty($product)) { |
| 24 | 25 | <?php // echo $this->render('_search', ['model' => $searchModel]); ?> |
| 25 | 26 | |
| 26 | 27 | <p> |
| 27 | - <?= Html::a(Yii::t('product', 'Create Variant'), ['create'], ['class' => 'btn btn-success']) ?> | |
| 28 | + <?= Html::a(Yii::t('product', 'Create Variant'), Url::toRoute(['create','product_id'=> $product_id]), ['class' => 'btn btn-success']) ?> | |
| 28 | 29 | </p> |
| 29 | 30 | <?= GridView::widget([ |
| 30 | 31 | 'dataProvider' => $dataProvider, |
| ... | ... | @@ -55,7 +56,41 @@ if (!empty($product)) { |
| 55 | 56 | 'price_old', |
| 56 | 57 | 'stock', |
| 57 | 58 | |
| 58 | - ['class' => 'yii\grid\ActionColumn'], | |
| 59 | + [ | |
| 60 | + 'class' => 'yii\grid\ActionColumn', | |
| 61 | + 'buttons' => [ | |
| 62 | + 'view' => function ($url, $model) | |
| 63 | + { | |
| 64 | + return Html::a ( | |
| 65 | + '<span class="glyphicon glyphicon-eye-open"></span>', | |
| 66 | + Url::to(['view','product_id'=> $model->product_id, 'id' => $model->product_variant_id]), | |
| 67 | + [ | |
| 68 | + 'title' => "Просмотр", | |
| 69 | + ] | |
| 70 | + ); | |
| 71 | + }, | |
| 72 | + 'update' => function ($url, $model) | |
| 73 | + { | |
| 74 | + return Html::a ( | |
| 75 | + '<span class="glyphicon glyphicon-pencil"></span>', | |
| 76 | + Url::to(['update','product_id'=> $model->product_id, 'id' => $model->product_variant_id]), | |
| 77 | + [ | |
| 78 | + 'title' => "Редактировать", | |
| 79 | + ] | |
| 80 | + ); | |
| 81 | + }, | |
| 82 | + 'delete' => function ($url, $model) | |
| 83 | + { | |
| 84 | + | |
| 85 | + return Html::a('<span class="glyphicon glyphicon-trash"></span>', Url::to(['delete','product_id'=> $model->product_id, 'id' => $model->product_variant_id]), [ | |
| 86 | + 'title' => Yii::t('yii', 'Delete'), | |
| 87 | + 'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'), | |
| 88 | + 'data-method' => 'post', | |
| 89 | + ]); | |
| 90 | + | |
| 91 | + }, | |
| 92 | + ], | |
| 93 | + ], | |
| 59 | 94 | ], |
| 60 | 95 | ]); ?> |
| 61 | 96 | </div> | ... | ... |
common/modules/product/views/variant/update.php
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | use yii\helpers\Html; |
| 4 | +use yii\helpers\Url; | |
| 4 | 5 | |
| 5 | 6 | /* @var $this yii\web\View */ |
| 6 | 7 | /* @var $model common\modules\product\models\Product */ |
| ... | ... | @@ -10,8 +11,7 @@ $this->title = Yii::t('product', 'Update {modelClass}: ', [ |
| 10 | 11 | ]) . ' ' . $model->name; |
| 11 | 12 | $this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['index']]; |
| 12 | 13 | $this->params['breadcrumbs'][] = ['label' => $model->product->name, 'url' => ['view', 'id' => $model->product->product_id]]; |
| 13 | -$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Variants'), 'url' => ['/product/variant?product_id='. $model->product->product_id]]; | |
| 14 | -$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->product_variant_id]]; | |
| 14 | +$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Variants'), 'url' => Url::to(['/product/variant', 'product_id' => $model->product->product_id])]; | |
| 15 | 15 | $this->params['breadcrumbs'][] = Yii::t('product', 'Update'); |
| 16 | 16 | ?> |
| 17 | 17 | <div class="product-update"> | ... | ... |
common/modules/rubrication/controllers/TaxGroupController.php
| ... | ... | @@ -32,16 +32,18 @@ class TaxGroupController extends Controller |
| 32 | 32 | |
| 33 | 33 | /** |
| 34 | 34 | * Lists all TaxGroup models. |
| 35 | + * @param $level integer | |
| 35 | 36 | * @return mixed |
| 36 | 37 | */ |
| 37 | - public function actionIndex() | |
| 38 | + public function actionIndex($level) | |
| 38 | 39 | { |
| 39 | 40 | $dataProvider = new ActiveDataProvider([ |
| 40 | - 'query' => TaxGroup::find(), | |
| 41 | + 'query' => TaxGroup::find()->where(['level' => $level]), | |
| 41 | 42 | ]); |
| 42 | 43 | |
| 43 | 44 | return $this->render('index', [ |
| 44 | 45 | 'dataProvider' => $dataProvider, |
| 46 | + 'level' => $level | |
| 45 | 47 | ]); |
| 46 | 48 | } |
| 47 | 49 | |
| ... | ... | @@ -50,7 +52,7 @@ class TaxGroupController extends Controller |
| 50 | 52 | * @param integer $id |
| 51 | 53 | * @return mixed |
| 52 | 54 | */ |
| 53 | - public function actionView($id) | |
| 55 | + public function actionView($level,$id) | |
| 54 | 56 | { |
| 55 | 57 | return $this->render('view', [ |
| 56 | 58 | 'model' => $this->findModel($id), |
| ... | ... | @@ -60,14 +62,17 @@ class TaxGroupController extends Controller |
| 60 | 62 | /** |
| 61 | 63 | * Creates a new TaxGroup model. |
| 62 | 64 | * If creation is successful, the browser will be redirected to the 'view' page. |
| 65 | + * @param $level integer | |
| 63 | 66 | * @return mixed |
| 64 | 67 | */ |
| 65 | - public function actionCreate() | |
| 68 | + public function actionCreate($level) | |
| 66 | 69 | { |
| 67 | 70 | $model = new TaxGroup(); |
| 68 | 71 | |
| 69 | - if ($model->load(Yii::$app->request->post()) && $model->save()) { | |
| 70 | - return $this->redirect(['view', 'id' => $model->tax_group_id]); | |
| 72 | + if ($model->load(Yii::$app->request->post()) && $model->validate()) { | |
| 73 | + $model->level = $level; | |
| 74 | + $model->save(); | |
| 75 | + return $this->redirect(['index', 'level' => $level]); | |
| 71 | 76 | } else { |
| 72 | 77 | return $this->render('create', [ |
| 73 | 78 | 'model' => $model, |
| ... | ... | @@ -78,15 +83,16 @@ class TaxGroupController extends Controller |
| 78 | 83 | /** |
| 79 | 84 | * Updates an existing TaxGroup model. |
| 80 | 85 | * If update is successful, the browser will be redirected to the 'view' page. |
| 86 | + * @param $level integer | |
| 81 | 87 | * @param integer $id |
| 82 | 88 | * @return mixed |
| 83 | 89 | */ |
| 84 | - public function actionUpdate($id) | |
| 90 | + public function actionUpdate($level,$id) | |
| 85 | 91 | { |
| 86 | 92 | $model = $this->findModel($id); |
| 87 | 93 | |
| 88 | 94 | if ($model->load(Yii::$app->request->post()) && $model->save()) { |
| 89 | - return $this->redirect(['view', 'id' => $model->tax_group_id]); | |
| 95 | + return $this->redirect(['index', 'level' => $level]); | |
| 90 | 96 | } else { |
| 91 | 97 | return $this->render('update', [ |
| 92 | 98 | 'model' => $model, |
| ... | ... | @@ -97,14 +103,14 @@ class TaxGroupController extends Controller |
| 97 | 103 | /** |
| 98 | 104 | * Deletes an existing TaxGroup model. |
| 99 | 105 | * If deletion is successful, the browser will be redirected to the 'index' page. |
| 106 | + * @param $level integer | |
| 100 | 107 | * @param integer $id |
| 101 | 108 | * @return mixed |
| 102 | 109 | */ |
| 103 | - public function actionDelete($id) | |
| 110 | + public function actionDelete($level,$id) | |
| 104 | 111 | { |
| 105 | 112 | $this->findModel($id)->delete(); |
| 106 | - | |
| 107 | - return $this->redirect(['index']); | |
| 113 | + return $this->redirect(['index', 'level' => $level]); | |
| 108 | 114 | } |
| 109 | 115 | |
| 110 | 116 | /* | ... | ... |
common/modules/rubrication/models/TaxGroup.php
| ... | ... | @@ -16,7 +16,7 @@ use Yii; |
| 16 | 16 | * @property boolean $hierarchical |
| 17 | 17 | * @property string $settings |
| 18 | 18 | * @property boolean $is_filter |
| 19 | - * | |
| 19 | + * @property integer $level | |
| 20 | 20 | * @property TaxGroupToGroup[] $taxGroupToGroups |
| 21 | 21 | * @property TaxGroupToGroup[] $taxGroupToGroups0 |
| 22 | 22 | * @property TaxOption[] $taxOptions |
| ... | ... | @@ -63,6 +63,7 @@ class TaxGroup extends \yii\db\ActiveRecord |
| 63 | 63 | [['name', 'module'], 'required'], |
| 64 | 64 | [['description', 'settings'], 'string'], |
| 65 | 65 | [['hierarchical', 'is_filter'], 'boolean'], |
| 66 | + [['level'], 'integer'], | |
| 66 | 67 | [['alias', 'module'], 'string', 'max' => 50], |
| 67 | 68 | [['name'], 'string', 'max' => 255], |
| 68 | 69 | [['group_to_category'], 'safe'] | ... | ... |
common/modules/rubrication/models/TaxOption.php
| ... | ... | @@ -69,7 +69,7 @@ class TaxOption extends \yii\db\ActiveRecord |
| 69 | 69 | { |
| 70 | 70 | return [ |
| 71 | 71 | [['tax_group_id'], 'required'], |
| 72 | - [['tax_group_id', 'parent_id', 'sort', 'default_value'], 'integer'], | |
| 72 | + [['tax_group_id', 'level', 'parent_id', 'sort', 'default_value'], 'integer'], | |
| 73 | 73 | [['alias'], 'string', 'max' => 50], |
| 74 | 74 | [['tax_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxGroup::className(), 'targetAttribute' => ['tax_group_id' => 'tax_group_id']], |
| 75 | 75 | // [['parent_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxOption::className(), 'targetAttribute' => ['parent_id' => 'tax_option_id']], | ... | ... |
common/modules/rubrication/views/tax-group/index.php
| 1 | 1 | <?php |
| 2 | 2 | use yii\helpers\Html; |
| 3 | 3 | use yii\grid\GridView; |
| 4 | +use yii\helpers\Url; | |
| 5 | + | |
| 4 | 6 | /* @var $this yii\web\View */ |
| 7 | +/* @var $level integer | |
| 5 | 8 | /* @var $dataProvider yii\data\ActiveDataProvider */ |
| 6 | 9 | |
| 7 | 10 | $this->title = Yii::t('rubrication', 'Groups'); |
| ... | ... | @@ -12,7 +15,7 @@ $this->params['breadcrumbs'][] = $this->title; |
| 12 | 15 | |
| 13 | 16 | <h1><?= Html::encode($this->title) ?></h1> |
| 14 | 17 | <p> |
| 15 | - <?= Html::a(Yii::t('rubrication', 'Create Group'), ['create'], ['class' => 'btn btn-success']) ?> | |
| 18 | + <?= Html::a(Yii::t('rubrication', 'Create Group'), Url::to(['/rubrication/tax-group/create', 'level'=> $level]), ['class' => 'btn btn-success']) ?> | |
| 16 | 19 | </p> |
| 17 | 20 | |
| 18 | 21 | <?= GridView::widget([ |
| ... | ... | @@ -48,7 +51,7 @@ $this->params['breadcrumbs'][] = $this->title; |
| 48 | 51 | ]); |
| 49 | 52 | } |
| 50 | 53 | ], |
| 51 | - 'urlCreator' => function ($action, $model, $key, $index) { | |
| 54 | + 'urlCreator' => function ($action, $model, $key, $index) use ($level) { | |
| 52 | 55 | if ($action === 'options') { |
| 53 | 56 | $url ='/admin/rubrication/tax-option?group='.$model->tax_group_id; |
| 54 | 57 | return $url; |
| ... | ... | @@ -56,10 +59,10 @@ $this->params['breadcrumbs'][] = $this->title; |
| 56 | 59 | $url ='/admin/rubrication/tax-group/relation&id='.$model->tax_group_id; |
| 57 | 60 | return $url; |
| 58 | 61 | } elseif ($action === 'update') { |
| 59 | - $url ='/admin/rubrication/tax-group/update?id='.$model->tax_group_id; | |
| 62 | + $url =Url::to(['/rubrication/tax-group/update', 'level'=> $level,'id' =>$model->tax_group_id]); | |
| 60 | 63 | return $url; |
| 61 | 64 | } elseif ($action === 'delete') { |
| 62 | - $url ='/admin/rubrication/tax-group/delete?id='.$model->tax_group_id; | |
| 65 | + $url =Url::to(['/rubrication/tax-group/delete', 'level'=> $level,'id' =>$model->tax_group_id]); | |
| 63 | 66 | return $url; |
| 64 | 67 | } elseif ($action === 'rebuild') { |
| 65 | 68 | $url ='/admin/rubrication/tax-group/rebuild?id='.$model->tax_group_id; | ... | ... |
console/migrations/m160414_214746_add_level_to_tax_group.php
0 → 100755
| 1 | +<?php | |
| 2 | + | |
| 3 | +use yii\db\Migration; | |
| 4 | + | |
| 5 | +/** | |
| 6 | + * Handles adding the columns `key` | |
| 7 | + * for table `seo_dynamic`. | |
| 8 | + */ | |
| 9 | +class m160414_214746_add_level_to_tax_group extends Migration | |
| 10 | +{ | |
| 11 | + /** | |
| 12 | + * @inheritdoc | |
| 13 | + */ | |
| 14 | + public function up() | |
| 15 | + { | |
| 16 | + $this->addColumn('tax_group', 'level', $this->integer()); | |
| 17 | + } | |
| 18 | + | |
| 19 | + /** | |
| 20 | + * @inheritdoc | |
| 21 | + */ | |
| 22 | + public function down() | |
| 23 | + { | |
| 24 | + $this->dropColumn('tax_group', 'level'); | |
| 25 | + } | |
| 26 | +} | ... | ... |