Commit 00731fef3c07a8c765ce6cda1587277881622f1f
1 parent
8940d2f7
Before vitex test
Showing
4 changed files
with
159 additions
and
62 deletions
Show diff stats
common/modules/product/controllers/ManageController.php
... | ... | @@ -61,8 +61,17 @@ |
61 | 61 | */ |
62 | 62 | public function actionView($id) |
63 | 63 | { |
64 | + $model = $this->findModel($id); | |
65 | + $categories = $model->getCategories() | |
66 | + ->with('lang') | |
67 | + ->all(); | |
68 | + $variants = $model->getVariants() | |
69 | + ->with('lang') | |
70 | + ->all(); | |
64 | 71 | return $this->render('view', [ |
65 | - 'model' => $this->findModel($id), | |
72 | + 'model' => $this->findModel($id), | |
73 | + 'categories' => $categories, | |
74 | + 'variants' => $variants, | |
66 | 75 | ]); |
67 | 76 | } |
68 | 77 | |
... | ... | @@ -257,7 +266,6 @@ |
257 | 266 | 'method' => $model->type, |
258 | 267 | 'target' => $target, |
259 | 268 | ]); |
260 | - // $model->$method(); | |
261 | 269 | } else { |
262 | 270 | $model->errors[] = 'File can not be upload or other error'; |
263 | 271 | } |
... | ... | @@ -318,12 +326,6 @@ |
318 | 326 | return $this->render('export', [ |
319 | 327 | 'model' => $model, |
320 | 328 | ]); |
321 | - // $model = new Export(); | |
322 | - // if(( $file = $model->process(Yii::getAlias('@uploadDir')) )) { | |
323 | - // return Yii::$app->response->sendFile($file) | |
324 | - // ->send(); | |
325 | - // } | |
326 | - // throw new NotFoundHttpException('Error'); | |
327 | 329 | } |
328 | 330 | |
329 | 331 | /** |
... | ... | @@ -337,7 +339,11 @@ |
337 | 339 | */ |
338 | 340 | protected function findModel($id) |
339 | 341 | { |
340 | - if(( $model = Product::findOne($id) ) !== NULL) { | |
342 | + if(( $model = Product::find() | |
343 | + ->where([ 'product_id' => $id ]) | |
344 | + ->with('lang') | |
345 | + ->one() ) !== NULL | |
346 | + ) { | |
341 | 347 | return $model; |
342 | 348 | } else { |
343 | 349 | throw new NotFoundHttpException('The requested page does not exist.'); | ... | ... |
common/modules/product/models/ProductSearch.php
... | ... | @@ -17,7 +17,9 @@ |
17 | 17 | |
18 | 18 | public $category_id; |
19 | 19 | |
20 | - public $variant_sku; | |
20 | + public $product_name; | |
21 | + | |
22 | + public $variant_count; | |
21 | 23 | |
22 | 24 | public function behaviors() |
23 | 25 | { |
... | ... | @@ -35,7 +37,9 @@ |
35 | 37 | { |
36 | 38 | return [ |
37 | 39 | [ |
38 | - [ 'variant_sku' ], | |
40 | + [ | |
41 | + 'product_name', | |
42 | + ], | |
39 | 43 | 'safe', |
40 | 44 | ], |
41 | 45 | [ |
... | ... | @@ -43,7 +47,6 @@ |
43 | 47 | 'brand_id', |
44 | 48 | 'product_id', |
45 | 49 | 'category_id', |
46 | - 'brand_id', | |
47 | 50 | ], |
48 | 51 | 'integer', |
49 | 52 | ], |
... | ... | @@ -58,6 +61,18 @@ |
58 | 61 | ]; |
59 | 62 | } |
60 | 63 | |
64 | + public function attributeLabels() | |
65 | + { | |
66 | + $labels = parent::attributeLabels(); | |
67 | + $new_labels = [ | |
68 | + 'category_id' => 'Category ID', | |
69 | + 'brand_id' => 'Brand ID', | |
70 | + 'product_name' => 'Product name', | |
71 | + 'variant_count' => 'Variant count', | |
72 | + ]; | |
73 | + return array_merge($labels, $new_labels); | |
74 | + } | |
75 | + | |
61 | 76 | /** |
62 | 77 | * @inheritdoc |
63 | 78 | */ |
... | ... | @@ -79,9 +94,14 @@ |
79 | 94 | |
80 | 95 | $query = Product::find(); |
81 | 96 | |
97 | + $query->select([ | |
98 | + 'product.*', | |
99 | + 'COUNT(product_variant.product_variant_id) as count', | |
100 | + ]); | |
101 | + | |
82 | 102 | $query->joinWith([ |
83 | 103 | 'categories', |
84 | - /*'variant'*/ | |
104 | + 'lang', | |
85 | 105 | ]) |
86 | 106 | ->joinWith([ |
87 | 107 | 'brand' => function($query) { |
... | ... | @@ -90,9 +110,14 @@ |
90 | 110 | */ |
91 | 111 | $query->joinWith('lang'); |
92 | 112 | }, |
93 | - ]); | |
113 | + ]) | |
114 | + ->joinWith('variants'); | |
94 | 115 | |
95 | - $query->groupBy([ 'product.product_id', 'brand_lang.name' ]); | |
116 | + $query->groupBy([ | |
117 | + 'product.product_id', | |
118 | + 'brand_lang.name', | |
119 | + 'product_lang.name', | |
120 | + ]); | |
96 | 121 | |
97 | 122 | $dataProvider = new ActiveDataProvider([ |
98 | 123 | 'query' => $query, |
... | ... | @@ -104,11 +129,19 @@ |
104 | 129 | |
105 | 130 | $dataProvider->setSort([ |
106 | 131 | 'attributes' => [ |
107 | - 'brand_id' => [ | |
132 | + 'product_id', | |
133 | + 'product_name' => [ | |
134 | + 'asc' => [ 'product_lang.name' => SORT_ASC ], | |
135 | + 'desc' => [ 'product_lang.name' => SORT_DESC ], | |
136 | + ], | |
137 | + 'brand_id' => [ | |
108 | 138 | 'asc' => [ 'brand_lang.name' => SORT_ASC ], |
109 | 139 | 'desc' => [ 'brand_lang.name' => SORT_DESC ], |
110 | 140 | 'default' => SORT_DESC, |
111 | - 'label' => 'Brand name', | |
141 | + ], | |
142 | + 'variant_count' => [ | |
143 | + 'asc' => [ 'count' => SORT_ASC ], | |
144 | + 'desc' => [ 'count' => SORT_DESC ], | |
112 | 145 | ], |
113 | 146 | ], |
114 | 147 | ]); |
... | ... | @@ -133,9 +166,11 @@ |
133 | 166 | 'product.product_id' => $this->product_id, |
134 | 167 | 'product_category.category_id' => $this->category_id, |
135 | 168 | ]); |
136 | - | |
137 | - // $query->andFilterWhere(['ilike', 'brand.name', $this->brand_name]); | |
138 | - // $query->andFilterWhere(['ilike', 'product_variant.sku', $this->variant_sku]); | |
169 | + $query->andFilterWhere([ | |
170 | + 'like', | |
171 | + 'product_lang.name', | |
172 | + $this->product_name, | |
173 | + ]); | |
139 | 174 | |
140 | 175 | return $dataProvider; |
141 | 176 | } | ... | ... |
common/modules/product/views/manage/index.php
... | ... | @@ -3,16 +3,20 @@ |
3 | 3 | use common\modules\product\models\Brand; |
4 | 4 | use common\modules\product\models\Category; |
5 | 5 | use common\modules\product\models\Product; |
6 | + use common\modules\product\models\ProductSearch; | |
7 | + use yii\data\ActiveDataProvider; | |
6 | 8 | use yii\helpers\Html; |
7 | 9 | use yii\grid\GridView; |
8 | 10 | use kartik\select2\Select2; |
9 | 11 | use common\components\artboxtree\ArtboxTreeHelper; |
10 | 12 | use common\modules\product\helpers\ProductHelper; |
13 | + use yii\web\View; | |
11 | 14 | |
12 | - /* @var $this yii\web\View */ | |
13 | - /* @var $searchModel common\modules\product\models\ProductSearch */ | |
14 | - /* @var $dataProvider yii\data\ActiveDataProvider */ | |
15 | - | |
15 | + /** | |
16 | + * @var View $this | |
17 | + * @var ProductSearch $searchModel | |
18 | + * @var ActiveDataProvider $dataProvider | |
19 | + */ | |
16 | 20 | $this->title = Yii::t('product', 'Products'); |
17 | 21 | $this->params[ 'breadcrumbs' ][] = $this->title; |
18 | 22 | ?> |
... | ... | @@ -29,13 +33,25 @@ |
29 | 33 | 'columns' => [ |
30 | 34 | 'product_id', |
31 | 35 | [ |
32 | - 'label' => Yii::t('product', 'Brand'), | |
36 | + 'attribute' => 'product_name', | |
37 | + 'value' => 'lang.name', | |
38 | + ], | |
39 | + [ | |
40 | + 'label' => Yii::t('product', 'Brand'), | |
33 | 41 | 'attribute' => 'brand_id', |
34 | - 'value' => 'brand.lang.name', | |
35 | - 'filter' => Select2::widget([ | |
42 | + 'value' => 'brand.lang.name', | |
43 | + 'filter' => Select2::widget([ | |
36 | 44 | 'model' => $searchModel, |
37 | 45 | 'attribute' => 'brand_id', |
38 | - 'data' => Brand::find()->joinWith('lang')->select(['brand_lang.name', 'brand.brand_id'])->asArray()->indexBy('brand_id')->column(), | |
46 | + 'data' => Brand::find() | |
47 | + ->joinWith('lang') | |
48 | + ->select([ | |
49 | + 'brand_lang.name', | |
50 | + 'brand.brand_id', | |
51 | + ]) | |
52 | + ->asArray() | |
53 | + ->indexBy('brand_id') | |
54 | + ->column(), | |
39 | 55 | 'language' => 'ru', |
40 | 56 | 'options' => [ |
41 | 57 | 'placeholder' => Yii::t('product', 'Select brand'), |
... | ... | @@ -54,7 +70,9 @@ |
54 | 70 | * @var Product $model |
55 | 71 | */ |
56 | 72 | $categories = []; |
57 | - foreach($model->getCategories()->with('lang')->all() as $category) { | |
73 | + foreach($model->getCategories() | |
74 | + ->with('lang') | |
75 | + ->all() as $category) { | |
58 | 76 | /** |
59 | 77 | * @var Category $category |
60 | 78 | */ |
... | ... | @@ -76,18 +94,15 @@ |
76 | 94 | ], |
77 | 95 | ]), |
78 | 96 | ], |
79 | - // [ | |
80 | - // 'label' => Yii::t('product', 'SKU'), | |
81 | - // 'attribute' => 'variant_sku', | |
82 | - // 'value' => 'variant.sku', | |
83 | - // ], | |
84 | - // 'variant.price', | |
85 | - // 'variant.price_old', | |
86 | - // [ | |
87 | - // 'label' => Yii::t('product', 'Stock'), | |
88 | - // 'attribute' => 'variant_stock', | |
89 | - // 'value' => 'variant.stock_caption', | |
90 | - // ], | |
97 | + [ | |
98 | + 'attribute' => 'variant_count', | |
99 | + 'value' => function($model) { | |
100 | + /** | |
101 | + * @var Product $model | |
102 | + */ | |
103 | + return count($model->variants); | |
104 | + }, | |
105 | + ], | |
91 | 106 | [ |
92 | 107 | 'class' => 'yii\grid\ActionColumn', |
93 | 108 | 'template' => '{items} {view} |{is_top} {is_new} {akciya} | {update} {delete}', |
... | ... | @@ -158,6 +173,8 @@ |
158 | 173 | 'id' => $model->product_id, |
159 | 174 | ]); |
160 | 175 | break; |
176 | + default: | |
177 | + return ''; | |
161 | 178 | } |
162 | 179 | }, |
163 | 180 | ], | ... | ... |
common/modules/product/views/manage/view.php
1 | 1 | <?php |
2 | - | |
3 | -use yii\helpers\Html; | |
4 | -use yii\widgets\DetailView; | |
5 | - | |
6 | -/* @var $this yii\web\View */ | |
7 | -/* @var $model common\modules\product\models\Product */ | |
8 | - | |
9 | -$this->title = $model->product_id; | |
10 | -$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['index']]; | |
11 | -$this->params['breadcrumbs'][] = $this->title; | |
2 | + | |
3 | + use common\modules\product\models\Category; | |
4 | + use common\modules\product\models\Product; | |
5 | + use yii\helpers\ArrayHelper; | |
6 | + use yii\helpers\Html; | |
7 | + use yii\web\View; | |
8 | + use yii\widgets\DetailView; | |
9 | + | |
10 | + /** | |
11 | + * @var View $this | |
12 | + * @var Product $model | |
13 | + * @var Category[] $categories | |
14 | + */ | |
15 | + | |
16 | + $this->title = $model->lang->name; | |
17 | + $this->params[ 'breadcrumbs' ][] = [ | |
18 | + 'label' => Yii::t('product', 'Products'), | |
19 | + 'url' => [ 'index' ], | |
20 | + ]; | |
21 | + $this->params[ 'breadcrumbs' ][] = $this->title; | |
12 | 22 | ?> |
13 | 23 | <div class="product-view"> |
14 | - | |
24 | + | |
15 | 25 | <h1><?= Html::encode($this->title) ?></h1> |
16 | - | |
26 | + | |
17 | 27 | <p> |
18 | - <?= Html::a(Yii::t('product', 'Update'), ['update', 'id' => $model->product_id], ['class' => 'btn btn-primary']) ?> | |
19 | - <?= Html::a(Yii::t('product', 'Delete'), ['delete', 'id' => $model->product_id], [ | |
28 | + <?= Html::a(Yii::t('product', 'Update'), [ | |
29 | + 'update', | |
30 | + 'id' => $model->product_id, | |
31 | + ], [ 'class' => 'btn btn-primary' ]) ?> | |
32 | + <?= Html::a(Yii::t('product', 'Delete'), [ | |
33 | + 'delete', | |
34 | + 'id' => $model->product_id, | |
35 | + ], [ | |
20 | 36 | 'class' => 'btn btn-danger', |
21 | - 'data' => [ | |
37 | + 'data' => [ | |
22 | 38 | 'confirm' => Yii::t('product', 'Are you sure you want to delete this item?'), |
23 | - 'method' => 'post', | |
39 | + 'method' => 'post', | |
24 | 40 | ], |
25 | 41 | ]) ?> |
26 | 42 | </p> |
27 | - | |
43 | + | |
28 | 44 | <?= DetailView::widget([ |
29 | - 'model' => $model, | |
45 | + 'model' => $model, | |
30 | 46 | 'attributes' => [ |
31 | 47 | 'product_id', |
32 | -// 'brand.name', | |
33 | -// 'category.name', | |
34 | - 'image.imageUrl:image' | |
48 | + 'brand.lang.name', | |
49 | + [ | |
50 | + 'label' => \Yii::t('app', 'Categories'), | |
51 | + 'value' => implode('<br>', ArrayHelper::getColumn($categories, 'lang.name')), | |
52 | + 'format' => 'html', | |
53 | + ], | |
54 | + [ | |
55 | + 'attribute' => 'is_top', | |
56 | + 'value' => $model->is_top ? Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-ok' ]) : Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-remove' ]), | |
57 | + 'format' => 'html', | |
58 | + ], | |
59 | + [ | |
60 | + 'attribute' => 'is_new', | |
61 | + 'value' => $model->is_new ? Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-ok' ]) : Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-remove' ]), | |
62 | + 'format' => 'html', | |
63 | + ], | |
64 | + [ | |
65 | + 'attribute' => 'akciya', | |
66 | + 'value' => $model->akciya ? Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-ok' ]) : Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-remove' ]), | |
67 | + 'format' => 'html', | |
68 | + ], | |
69 | + [ | |
70 | + 'attribute' => 'video', | |
71 | + 'format' => 'html', | |
72 | + ], | |
73 | + 'image.imageUrl:image', | |
35 | 74 | ], |
36 | 75 | ]) ?> |
37 | 76 | ... | ... |