Commit 00731fef3c07a8c765ce6cda1587277881622f1f

Authored by Yarik
1 parent 8940d2f7

Before vitex test

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  
... ...