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,6 +152,13 @@ return [ | ||
152 | 'rules' => [ | 152 | 'rules' => [ |
153 | 'slider-image/<action>/<slider_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'slider-image/<action>', | 153 | 'slider-image/<action>/<slider_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'slider-image/<action>', |
154 | 'slider-image/<action>/<slider_id:[A-Za-z0-9_-]+>' => 'slider-image/<action>', | 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 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', | 162 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>/<id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', |
156 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', | 163 | 'seo-dynamic/<action>/<seo_category_id:[A-Za-z0-9_-]+>' => 'seo-dynamic/<action>', |
157 | 164 |
backend/views/layouts/main-sidebar.php
1 | <?php | 1 | <?php |
2 | +use yii\helpers\Url; | ||
2 | use yii\widgets\Menu; | 3 | use yii\widgets\Menu; |
3 | ?> | 4 | ?> |
4 | <aside class="main-sidebar"> | 5 | <aside class="main-sidebar"> |
@@ -33,11 +34,11 @@ use yii\widgets\Menu; | @@ -33,11 +34,11 @@ use yii\widgets\Menu; | ||
33 | 'url' => ['/product/manage'], | 34 | 'url' => ['/product/manage'], |
34 | 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'] | 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 | 'label' => 'Категории', | 43 | 'label' => 'Категории', |
43 | 'url' => ['/category'], | 44 | 'url' => ['/category'], |
@@ -65,8 +66,13 @@ use yii\widgets\Menu; | @@ -65,8 +66,13 @@ use yii\widgets\Menu; | ||
65 | 'options' => ['class'=>\Yii::$app->user->can('product') ? '' :'hide'], | 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 | 'options' => ['class'=>\Yii::$app->user->can('rubrication') ? '' :'hide'], | 76 | 'options' => ['class'=>\Yii::$app->user->can('rubrication') ? '' :'hide'], |
71 | ], | 77 | ], |
72 | [ | 78 | [ |
common/config/main.php
@@ -43,8 +43,8 @@ return [ | @@ -43,8 +43,8 @@ return [ | ||
43 | 'artboximage' => [ | 43 | 'artboximage' => [ |
44 | 'class' => 'common\components\artboximage\ArtboxImage', | 44 | 'class' => 'common\components\artboximage\ArtboxImage', |
45 | 'driver' => 'GD', //GD or Imagick | 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 | 'presets' => [ | 48 | 'presets' => [ |
49 | 'product' => [ | 49 | 'product' => [ |
50 | 'resize' => [ | 50 | 'resize' => [ |
common/modules/product/controllers/VariantController.php
@@ -3,8 +3,9 @@ | @@ -3,8 +3,9 @@ | ||
3 | namespace common\modules\product\controllers; | 3 | namespace common\modules\product\controllers; |
4 | 4 | ||
5 | use common\modules\product\models\Product; | 5 | use common\modules\product\models\Product; |
6 | +use common\modules\product\models\ProductImage; | ||
6 | use common\modules\product\models\ProductVariant; | 7 | use common\modules\product\models\ProductVariant; |
7 | -use common\modules\product\models\ProductVariantSearch; | 8 | +use common\modules\product\models\ProductVariantListSearch; |
8 | use Yii; | 9 | use Yii; |
9 | use yii\web\Controller; | 10 | use yii\web\Controller; |
10 | use yii\web\NotFoundHttpException; | 11 | use yii\web\NotFoundHttpException; |
@@ -35,10 +36,10 @@ class VariantController extends Controller | @@ -35,10 +36,10 @@ class VariantController extends Controller | ||
35 | * Lists all ProductVariant models. | 36 | * Lists all ProductVariant models. |
36 | * @return mixed | 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 | if ( ($product = Yii::$app->request->get('product_id')) !== null) { | 44 | if ( ($product = Yii::$app->request->get('product_id')) !== null) { |
44 | $product = Product::findOne($product); | 45 | $product = Product::findOne($product); |
@@ -48,6 +49,7 @@ class VariantController extends Controller | @@ -48,6 +49,7 @@ class VariantController extends Controller | ||
48 | 'searchModel' => $searchModel, | 49 | 'searchModel' => $searchModel, |
49 | 'dataProvider' => $dataProvider, | 50 | 'dataProvider' => $dataProvider, |
50 | 'product' => $product, | 51 | 'product' => $product, |
52 | + 'product_id' => $product_id, | ||
51 | ]); | 53 | ]); |
52 | } | 54 | } |
53 | 55 | ||
@@ -68,14 +70,17 @@ class VariantController extends Controller | @@ -68,14 +70,17 @@ class VariantController extends Controller | ||
68 | * If creation is successful, the browser will be redirected to the 'view' page. | 70 | * If creation is successful, the browser will be redirected to the 'view' page. |
69 | * @return mixed | 71 | * @return mixed |
70 | */ | 72 | */ |
71 | - public function actionCreate() | 73 | + public function actionCreate($product_id) |
72 | { | 74 | { |
73 | $model = new ProductVariant(); | 75 | $model = new ProductVariant(); |
74 | - | 76 | + $model->product_id = $product_id; |
75 | if ($model->load(Yii::$app->request->post())) { | 77 | if ($model->load(Yii::$app->request->post())) { |
78 | + | ||
76 | $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); | 79 | $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); |
80 | + $model->validate(); | ||
81 | + | ||
82 | + if ($model->save()) { | ||
77 | 83 | ||
78 | - if ($model->save() && $model->imagesUpload) { | ||
79 | if ( ($images = $model->imagesUpload()) !== FALSE) { | 84 | if ( ($images = $model->imagesUpload()) !== FALSE) { |
80 | foreach ($images as $image) { | 85 | foreach ($images as $image) { |
81 | $imageModel = new ProductImage(); | 86 | $imageModel = new ProductImage(); |
@@ -86,7 +91,7 @@ class VariantController extends Controller | @@ -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 | } else { | 96 | } else { |
92 | return $this->render('create', [ | 97 | return $this->render('create', [ |
@@ -98,29 +103,71 @@ class VariantController extends Controller | @@ -98,29 +103,71 @@ class VariantController extends Controller | ||
98 | /** | 103 | /** |
99 | * Updates an existing ProductVariant model. | 104 | * Updates an existing ProductVariant model. |
100 | * If update is successful, the browser will be redirected to the 'view' page. | 105 | * If update is successful, the browser will be redirected to the 'view' page. |
106 | + * @param integer $product_id | ||
101 | * @param integer $id | 107 | * @param integer $id |
102 | * @return mixed | 108 | * @return mixed |
103 | */ | 109 | */ |
104 | - public function actionUpdate($id) | 110 | + public function actionUpdate($product_id, $id) |
105 | { | 111 | { |
106 | $model = $this->findModel($id); | 112 | $model = $this->findModel($id); |
107 | if ($model->load(Yii::$app->request->post())) { | 113 | if ($model->load(Yii::$app->request->post())) { |
108 | - $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); | 114 | + |
115 | + | ||
116 | + | ||
117 | + | ||
118 | + | ||
119 | + | ||
120 | + | ||
109 | if ($model->save()) { | 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 | $imageModel = new ProductImage(); | 132 | $imageModel = new ProductImage(); |
113 | $imageModel->product_id = $model->product_id; | 133 | $imageModel->product_id = $model->product_id; |
114 | $imageModel->product_variant_id = $model->product_variant_id; | 134 | $imageModel->product_variant_id = $model->product_variant_id; |
115 | - $imageModel->image = $image; | 135 | + $imageModel->image = $image->name; |
116 | $imageModel->save(); | 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 | } else { | 169 | } else { |
123 | - $groups = $model->category->getTaxGroups(); | 170 | + $groups = $model->category-> getTaxGroupsByLevel(1); |
124 | 171 | ||
125 | return $this->render('update', [ | 172 | return $this->render('update', [ |
126 | 'model' => $model, | 173 | 'model' => $model, |
common/modules/product/models/Category.php
@@ -7,6 +7,7 @@ use common\components\artboxtree\ArtboxTreeBehavior; | @@ -7,6 +7,7 @@ use common\components\artboxtree\ArtboxTreeBehavior; | ||
7 | use common\components\artboxtree\ArtboxTreeHelper; | 7 | use common\components\artboxtree\ArtboxTreeHelper; |
8 | use common\modules\relation\relationBehavior; | 8 | use common\modules\relation\relationBehavior; |
9 | use common\modules\rubrication\behaviors\ArtboxSynonymBehavior; | 9 | use common\modules\rubrication\behaviors\ArtboxSynonymBehavior; |
10 | +use common\modules\rubrication\models\TaxGroup; | ||
10 | use Yii; | 11 | use Yii; |
11 | use yii\base\ErrorException; | 12 | use yii\base\ErrorException; |
12 | 13 | ||
@@ -164,6 +165,14 @@ class Category extends \yii\db\ActiveRecord | @@ -164,6 +165,14 @@ class Category extends \yii\db\ActiveRecord | ||
164 | return $this->getRelations('tax_group_to_category'); | 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 | public function getRemote_category() | 176 | public function getRemote_category() |
168 | { | 177 | { |
169 | return ArtboxTreeHelper::getArrayField($this->remote_id); | 178 | return ArtboxTreeHelper::getArrayField($this->remote_id); |
common/modules/product/models/ProductImage.php
@@ -97,7 +97,7 @@ class ProductImage extends \yii\db\ActiveRecord | @@ -97,7 +97,7 @@ class ProductImage extends \yii\db\ActiveRecord | ||
97 | */ | 97 | */ |
98 | public function getImageFile() | 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,7 +107,7 @@ class ProductImage extends \yii\db\ActiveRecord | ||
107 | public function getImageUrl() | 107 | public function getImageUrl() |
108 | { | 108 | { |
109 | // return a default image placeholder if your source image is not found | 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,82 +23,33 @@ use kartik\select2\Select2; | ||
23 | 23 | ||
24 | <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?> | 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 | <?= $form->field($model, 'sku')->textarea(); ?> | 28 | <?= $form->field($model, 'sku')->textarea(); ?> |
29 | <?= $form->field($model, 'price')->textarea(); ?> | 29 | <?= $form->field($model, 'price')->textarea(); ?> |
30 | <?= $form->field($model, 'price_old')->textarea(); ?> | 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 | 'options' => [ | 35 | 'options' => [ |
35 | 'accept' => 'image/*', | 36 | 'accept' => 'image/*', |
36 | - 'multiple' => true, | 37 | + 'multiple' => true |
37 | ], | 38 | ], |
38 | 'pluginOptions' => [ | 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 | 'showUpload' => false, | 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 | <?php if(isset($groups)) :?> | 54 | <?php if(isset($groups)) :?> |
104 | <?php foreach($groups->all() as $group) :?> | 55 | <?php foreach($groups->all() as $group) :?> |
common/modules/product/views/variant/index.php
@@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
2 | 2 | ||
3 | use yii\helpers\Html; | 3 | use yii\helpers\Html; |
4 | use yii\grid\GridView; | 4 | use yii\grid\GridView; |
5 | +use yii\helpers\Url; | ||
5 | 6 | ||
6 | /* @var $this yii\web\View */ | 7 | /* @var $this yii\web\View */ |
7 | /* @var $searchModel common\modules\product\models\ProductVariantSearch */ | 8 | /* @var $searchModel common\modules\product\models\ProductVariantSearch */ |
@@ -24,7 +25,7 @@ if (!empty($product)) { | @@ -24,7 +25,7 @@ if (!empty($product)) { | ||
24 | <?php // echo $this->render('_search', ['model' => $searchModel]); ?> | 25 | <?php // echo $this->render('_search', ['model' => $searchModel]); ?> |
25 | 26 | ||
26 | <p> | 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 | </p> | 29 | </p> |
29 | <?= GridView::widget([ | 30 | <?= GridView::widget([ |
30 | 'dataProvider' => $dataProvider, | 31 | 'dataProvider' => $dataProvider, |
@@ -55,7 +56,41 @@ if (!empty($product)) { | @@ -55,7 +56,41 @@ if (!empty($product)) { | ||
55 | 'price_old', | 56 | 'price_old', |
56 | 'stock', | 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 | </div> | 96 | </div> |
common/modules/product/views/variant/update.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | use yii\helpers\Html; | 3 | use yii\helpers\Html; |
4 | +use yii\helpers\Url; | ||
4 | 5 | ||
5 | /* @var $this yii\web\View */ | 6 | /* @var $this yii\web\View */ |
6 | /* @var $model common\modules\product\models\Product */ | 7 | /* @var $model common\modules\product\models\Product */ |
@@ -10,8 +11,7 @@ $this->title = Yii::t('product', 'Update {modelClass}: ', [ | @@ -10,8 +11,7 @@ $this->title = Yii::t('product', 'Update {modelClass}: ', [ | ||
10 | ]) . ' ' . $model->name; | 11 | ]) . ' ' . $model->name; |
11 | $this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['index']]; | 12 | $this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['index']]; |
12 | $this->params['breadcrumbs'][] = ['label' => $model->product->name, 'url' => ['view', 'id' => $model->product->product_id]]; | 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 | $this->params['breadcrumbs'][] = Yii::t('product', 'Update'); | 15 | $this->params['breadcrumbs'][] = Yii::t('product', 'Update'); |
16 | ?> | 16 | ?> |
17 | <div class="product-update"> | 17 | <div class="product-update"> |
common/modules/rubrication/controllers/TaxGroupController.php
@@ -32,16 +32,18 @@ class TaxGroupController extends Controller | @@ -32,16 +32,18 @@ class TaxGroupController extends Controller | ||
32 | 32 | ||
33 | /** | 33 | /** |
34 | * Lists all TaxGroup models. | 34 | * Lists all TaxGroup models. |
35 | + * @param $level integer | ||
35 | * @return mixed | 36 | * @return mixed |
36 | */ | 37 | */ |
37 | - public function actionIndex() | 38 | + public function actionIndex($level) |
38 | { | 39 | { |
39 | $dataProvider = new ActiveDataProvider([ | 40 | $dataProvider = new ActiveDataProvider([ |
40 | - 'query' => TaxGroup::find(), | 41 | + 'query' => TaxGroup::find()->where(['level' => $level]), |
41 | ]); | 42 | ]); |
42 | 43 | ||
43 | return $this->render('index', [ | 44 | return $this->render('index', [ |
44 | 'dataProvider' => $dataProvider, | 45 | 'dataProvider' => $dataProvider, |
46 | + 'level' => $level | ||
45 | ]); | 47 | ]); |
46 | } | 48 | } |
47 | 49 | ||
@@ -50,7 +52,7 @@ class TaxGroupController extends Controller | @@ -50,7 +52,7 @@ class TaxGroupController extends Controller | ||
50 | * @param integer $id | 52 | * @param integer $id |
51 | * @return mixed | 53 | * @return mixed |
52 | */ | 54 | */ |
53 | - public function actionView($id) | 55 | + public function actionView($level,$id) |
54 | { | 56 | { |
55 | return $this->render('view', [ | 57 | return $this->render('view', [ |
56 | 'model' => $this->findModel($id), | 58 | 'model' => $this->findModel($id), |
@@ -60,14 +62,17 @@ class TaxGroupController extends Controller | @@ -60,14 +62,17 @@ class TaxGroupController extends Controller | ||
60 | /** | 62 | /** |
61 | * Creates a new TaxGroup model. | 63 | * Creates a new TaxGroup model. |
62 | * If creation is successful, the browser will be redirected to the 'view' page. | 64 | * If creation is successful, the browser will be redirected to the 'view' page. |
65 | + * @param $level integer | ||
63 | * @return mixed | 66 | * @return mixed |
64 | */ | 67 | */ |
65 | - public function actionCreate() | 68 | + public function actionCreate($level) |
66 | { | 69 | { |
67 | $model = new TaxGroup(); | 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 | } else { | 76 | } else { |
72 | return $this->render('create', [ | 77 | return $this->render('create', [ |
73 | 'model' => $model, | 78 | 'model' => $model, |
@@ -78,15 +83,16 @@ class TaxGroupController extends Controller | @@ -78,15 +83,16 @@ class TaxGroupController extends Controller | ||
78 | /** | 83 | /** |
79 | * Updates an existing TaxGroup model. | 84 | * Updates an existing TaxGroup model. |
80 | * If update is successful, the browser will be redirected to the 'view' page. | 85 | * If update is successful, the browser will be redirected to the 'view' page. |
86 | + * @param $level integer | ||
81 | * @param integer $id | 87 | * @param integer $id |
82 | * @return mixed | 88 | * @return mixed |
83 | */ | 89 | */ |
84 | - public function actionUpdate($id) | 90 | + public function actionUpdate($level,$id) |
85 | { | 91 | { |
86 | $model = $this->findModel($id); | 92 | $model = $this->findModel($id); |
87 | 93 | ||
88 | if ($model->load(Yii::$app->request->post()) && $model->save()) { | 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 | } else { | 96 | } else { |
91 | return $this->render('update', [ | 97 | return $this->render('update', [ |
92 | 'model' => $model, | 98 | 'model' => $model, |
@@ -97,14 +103,14 @@ class TaxGroupController extends Controller | @@ -97,14 +103,14 @@ class TaxGroupController extends Controller | ||
97 | /** | 103 | /** |
98 | * Deletes an existing TaxGroup model. | 104 | * Deletes an existing TaxGroup model. |
99 | * If deletion is successful, the browser will be redirected to the 'index' page. | 105 | * If deletion is successful, the browser will be redirected to the 'index' page. |
106 | + * @param $level integer | ||
100 | * @param integer $id | 107 | * @param integer $id |
101 | * @return mixed | 108 | * @return mixed |
102 | */ | 109 | */ |
103 | - public function actionDelete($id) | 110 | + public function actionDelete($level,$id) |
104 | { | 111 | { |
105 | $this->findModel($id)->delete(); | 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,7 +16,7 @@ use Yii; | ||
16 | * @property boolean $hierarchical | 16 | * @property boolean $hierarchical |
17 | * @property string $settings | 17 | * @property string $settings |
18 | * @property boolean $is_filter | 18 | * @property boolean $is_filter |
19 | - * | 19 | + * @property integer $level |
20 | * @property TaxGroupToGroup[] $taxGroupToGroups | 20 | * @property TaxGroupToGroup[] $taxGroupToGroups |
21 | * @property TaxGroupToGroup[] $taxGroupToGroups0 | 21 | * @property TaxGroupToGroup[] $taxGroupToGroups0 |
22 | * @property TaxOption[] $taxOptions | 22 | * @property TaxOption[] $taxOptions |
@@ -63,6 +63,7 @@ class TaxGroup extends \yii\db\ActiveRecord | @@ -63,6 +63,7 @@ class TaxGroup extends \yii\db\ActiveRecord | ||
63 | [['name', 'module'], 'required'], | 63 | [['name', 'module'], 'required'], |
64 | [['description', 'settings'], 'string'], | 64 | [['description', 'settings'], 'string'], |
65 | [['hierarchical', 'is_filter'], 'boolean'], | 65 | [['hierarchical', 'is_filter'], 'boolean'], |
66 | + [['level'], 'integer'], | ||
66 | [['alias', 'module'], 'string', 'max' => 50], | 67 | [['alias', 'module'], 'string', 'max' => 50], |
67 | [['name'], 'string', 'max' => 255], | 68 | [['name'], 'string', 'max' => 255], |
68 | [['group_to_category'], 'safe'] | 69 | [['group_to_category'], 'safe'] |
common/modules/rubrication/models/TaxOption.php
@@ -69,7 +69,7 @@ class TaxOption extends \yii\db\ActiveRecord | @@ -69,7 +69,7 @@ class TaxOption extends \yii\db\ActiveRecord | ||
69 | { | 69 | { |
70 | return [ | 70 | return [ |
71 | [['tax_group_id'], 'required'], | 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 | [['alias'], 'string', 'max' => 50], | 73 | [['alias'], 'string', 'max' => 50], |
74 | [['tax_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxGroup::className(), 'targetAttribute' => ['tax_group_id' => 'tax_group_id']], | 74 | [['tax_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxGroup::className(), 'targetAttribute' => ['tax_group_id' => 'tax_group_id']], |
75 | // [['parent_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxOption::className(), 'targetAttribute' => ['parent_id' => 'tax_option_id']], | 75 | // [['parent_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxOption::className(), 'targetAttribute' => ['parent_id' => 'tax_option_id']], |
common/modules/rubrication/views/tax-group/index.php
1 | <?php | 1 | <?php |
2 | use yii\helpers\Html; | 2 | use yii\helpers\Html; |
3 | use yii\grid\GridView; | 3 | use yii\grid\GridView; |
4 | +use yii\helpers\Url; | ||
5 | + | ||
4 | /* @var $this yii\web\View */ | 6 | /* @var $this yii\web\View */ |
7 | +/* @var $level integer | ||
5 | /* @var $dataProvider yii\data\ActiveDataProvider */ | 8 | /* @var $dataProvider yii\data\ActiveDataProvider */ |
6 | 9 | ||
7 | $this->title = Yii::t('rubrication', 'Groups'); | 10 | $this->title = Yii::t('rubrication', 'Groups'); |
@@ -12,7 +15,7 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -12,7 +15,7 @@ $this->params['breadcrumbs'][] = $this->title; | ||
12 | 15 | ||
13 | <h1><?= Html::encode($this->title) ?></h1> | 16 | <h1><?= Html::encode($this->title) ?></h1> |
14 | <p> | 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 | </p> | 19 | </p> |
17 | 20 | ||
18 | <?= GridView::widget([ | 21 | <?= GridView::widget([ |
@@ -48,7 +51,7 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -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 | if ($action === 'options') { | 55 | if ($action === 'options') { |
53 | $url ='/admin/rubrication/tax-option?group='.$model->tax_group_id; | 56 | $url ='/admin/rubrication/tax-option?group='.$model->tax_group_id; |
54 | return $url; | 57 | return $url; |
@@ -56,10 +59,10 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -56,10 +59,10 @@ $this->params['breadcrumbs'][] = $this->title; | ||
56 | $url ='/admin/rubrication/tax-group/relation&id='.$model->tax_group_id; | 59 | $url ='/admin/rubrication/tax-group/relation&id='.$model->tax_group_id; |
57 | return $url; | 60 | return $url; |
58 | } elseif ($action === 'update') { | 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 | return $url; | 63 | return $url; |
61 | } elseif ($action === 'delete') { | 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 | return $url; | 66 | return $url; |
64 | } elseif ($action === 'rebuild') { | 67 | } elseif ($action === 'rebuild') { |
65 | $url ='/admin/rubrication/tax-group/rebuild?id='.$model->tax_group_id; | 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 | +} |