Commit 30ea8a3591d8b8666869c49a414e873aa23d640d

Authored by Administrator
1 parent 9173c97b

29.06.16

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-&gt;title = Yii::t(&#39;product&#39;, &#39;Update {modelClass}: &#39;, [ @@ -10,8 +11,7 @@ $this-&gt;title = Yii::t(&#39;product&#39;, &#39;Update {modelClass}: &#39;, [
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-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -12,7 +15,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;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-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -48,7 +51,7 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;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-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -56,10 +59,10 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;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 +}