e9f8a5ec
Yarik
Detail page
|
1
|
<?php
|
fc66ded4
Yarik
Artbox great prep...
|
2
|
|
e9f8a5ec
Yarik
Detail page
|
3
4
5
6
|
namespace frontend\controllers;
use artbox\catalog\models\Product;
use artbox\core\components\SeoComponent;
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
7
|
use artbox\order\models\Wishlist;
|
e9f8a5ec
Yarik
Detail page
|
8
|
use yii\db\ActiveQuery;
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
9
10
|
use yii\helpers\Html;
use yii\helpers\Url;
|
e9f8a5ec
Yarik
Detail page
|
11
12
|
use yii\web\Controller;
use yii\web\NotFoundHttpException;
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
13
|
use yii\web\Response;
|
e9f8a5ec
Yarik
Detail page
|
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/**
* Class ProductController
*
* @package frontend\controllers
*/
class ProductController extends Controller
{
/**
* Show product by ID
*
* @param int $id
*
* @return string
|
fc66ded4
Yarik
Artbox great prep...
|
28
|
* @throws \yii\web\NotFoundHttpException
|
e9f8a5ec
Yarik
Detail page
|
29
30
31
|
*/
public function actionView($id)
{
|
fc66ded4
Yarik
Artbox great prep...
|
32
33
34
35
36
37
38
39
|
$model = Product::find()
->with('variant')
->where([ 'id' => $id ])
->one();
if (!$model || empty($model->variant)) {
throw new NotFoundHttpException('Product not found');
}
return $this->redirect(
|
e9f8a5ec
Yarik
Detail page
|
40
|
[
|
fc66ded4
Yarik
Artbox great prep...
|
41
42
|
'variant/view',
'id' => $model->variant->id,
|
e9f8a5ec
Yarik
Detail page
|
43
44
|
]
);
|
fc66ded4
Yarik
Artbox great prep...
|
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
//Uncomment to have product page
// $model = $this->findModel($id);
// /**
// * @var SeoComponent $seo
// */
// $seo = Yii::$app->get('seo');
// $seo->setModel($model->lang);
// $variant = $model->variants[ 0 ];
// $groups = $variant->getSortedGroups();
// $similar = $model->getSimilarProducts(8);
//
// return $this->render(
// 'view',
// [
// 'model' => $model,
// 'variant' => $variant,
// 'groups' => $groups,
// 'similar' => $similar,
// ]
// );
|
e9f8a5ec
Yarik
Detail page
|
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
}
/**
* Find product by ID
*
* @param $id
*
* @return Product
* @throws \yii\web\NotFoundHttpException
*/
protected function findModel($id)
{
/**
* @var SeoComponent $seo
*/
$seo = \Yii::$app->get('seo');
/**
* @var Product $model
*/
$model = Product::findWithFilters()
|
4b0990fd
Yarik
Image fixes
|
85
|
->with('lang', 'images', 'image')
|
e9f8a5ec
Yarik
Detail page
|
86
87
88
89
90
91
92
93
94
95
96
97
98
|
->with(
[
'category' => function ($query) {
/**
* @var ActiveQuery $query
*/
$query->with('lang')
->with('parent.lang');
},
]
)
->where([ 'id' => $id ])
->one();
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
99
|
if (!empty($model)) {
|
e9f8a5ec
Yarik
Detail page
|
100
|
if ($model->lang->alias_id !== $seo->aliasId) {
|
aee73024
Yarik
Artbox great prep...
|
101
|
throw new NotFoundHttpException(\Yii::t('app', 'Wrong language'));
|
e9f8a5ec
Yarik
Detail page
|
102
103
104
|
}
return $model;
} else {
|
aee73024
Yarik
Artbox great prep...
|
105
|
throw new NotFoundHttpException(\Yii::t('app', 'Model not found'));
|
e9f8a5ec
Yarik
Detail page
|
106
107
|
}
}
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
108
|
|
aee73024
Yarik
Artbox great prep...
|
109
110
111
112
113
|
/**
* Remove product from wishlist
*
* @return array
*/
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
114
115
116
117
118
119
120
121
122
123
124
125
126
|
public function actionWishlistRm()
{
\Yii::$app->response->format = Response::FORMAT_JSON;
if (\Yii::$app->request->isPost) {
$model = Wishlist::find()
->where(
[
'user_id' => \Yii::$app->request->post('user'),
]
)
->andWhere(
[
'variant_id' => \Yii::$app->request->post('variant'),
|
fc66ded4
Yarik
Artbox great prep...
|
127
|
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
128
129
130
131
132
133
134
135
|
]
)
->one();
if (!empty($model) && $model->delete()) {
return [
'button' => Html::button(
Html::tag('i', '', [ 'class' => 'fa fa-heart-o' ]),
[
|
aee73024
Yarik
Artbox great prep...
|
136
|
'title' => \Yii::t('app', 'Добавить в избранное'),
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
137
138
139
140
141
142
143
144
145
146
147
|
'data' => [
'toggle' => 'tooltip',
'placement' => 'top',
'product' => \Yii::$app->request->post('product'),
'variant' => \Yii::$app->request->post('variant'),
'user' => \Yii::$app->request->post('user'),
'url' => Url::to([ 'product/wishlist-add' ]),
],
'class' => 'wishlist-add btn btn-success pull-right',
]
),
|
aee73024
Yarik
Artbox great prep...
|
148
|
'message' => \Yii::t('app', 'Товар убран из избранного'),
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
149
150
|
];
}
|
fc66ded4
Yarik
Artbox great prep...
|
151
|
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
152
153
154
155
|
return [
'button' => Html::button(
Html::tag('i', '', [ 'class' => 'fa fa-heart' ]),
[
|
aee73024
Yarik
Artbox great prep...
|
156
|
'title' => \Yii::t('app', 'Убрать из избранного'),
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
157
158
159
160
161
162
163
164
165
166
167
|
'data' => [
'toggle' => 'tooltip',
'placement' => 'top',
'product' => \Yii::$app->request->post('product'),
'variant' => \Yii::$app->request->post('variant'),
'user' => \Yii::$app->request->post('user'),
'url' => Url::to([ 'product/wishlist-rm' ]),
],
'class' => 'wishlist-rm btn btn-success pull-right',
]
),
|
aee73024
Yarik
Artbox great prep...
|
168
|
'message' => \Yii::t('app', 'Товар не найден'),
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
169
170
|
];
}
|
aee73024
Yarik
Artbox great prep...
|
171
|
return [];
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
172
173
|
}
|
aee73024
Yarik
Artbox great prep...
|
174
175
176
177
178
|
/**
* Add product to wishlist
*
* @return array
*/
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
179
180
181
182
183
184
185
186
|
public function actionWishlistAdd()
{
\Yii::$app->response->format = Response::FORMAT_JSON;
if (\Yii::$app->request->isPost) {
$model = new Wishlist();
$model->user_id = \Yii::$app->request->post('user');
$model->variant_id = \Yii::$app->request->post('variant');
$model->product_id = \Yii::$app->request->post('product');
|
fc66ded4
Yarik
Artbox great prep...
|
187
|
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
188
189
190
191
192
|
if ($model->save()) {
return [
'button' => Html::button(
Html::tag('i', '', [ 'class' => 'fa fa-heart' ]),
[
|
aee73024
Yarik
Artbox great prep...
|
193
|
'title' => \Yii::t('app', 'Убрать из избранного'),
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
194
195
196
197
198
199
200
201
202
203
204
205
206
207
|
'data' => [
'toggle' => 'tooltip',
'placement' => 'top',
'product' => \Yii::$app->request->post('product'),
'variant' => \Yii::$app->request->post('variant'),
'user' => \Yii::$app->request->post('user'),
'url' => Url::to([ 'product/wishlist-rm' ]),
],
'class' => 'wishlist-rm btn btn-success pull-right',
]
),
'message' => 'Товар добавлен в избранное',
];
}
|
fc66ded4
Yarik
Artbox great prep...
|
208
|
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
209
210
211
212
|
return [
'button' => Html::button(
Html::tag('i', '', [ 'class' => 'fa fa-heart-o' ]),
[
|
aee73024
Yarik
Artbox great prep...
|
213
|
'title' => \Yii::t('app', 'Добавить в избранное'),
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
214
215
216
217
218
219
220
221
222
223
224
|
'data' => [
'toggle' => 'tooltip',
'placement' => 'top',
'product' => \Yii::$app->request->post('product'),
'variant' => \Yii::$app->request->post('variant'),
'user' => \Yii::$app->request->post('user'),
'url' => Url::to([ 'product/wishlist-add' ]),
],
'class' => 'wishlist-add btn btn-success pull-right',
]
),
|
aee73024
Yarik
Artbox great prep...
|
225
|
'message' => \Yii::t('app', 'Товар добавить не вышло'),
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
226
227
|
];
}
|
aee73024
Yarik
Artbox great prep...
|
228
|
return [];
|
ac6e2c67
Alexey Boroda
-Cabinet ready
|
229
|
}
|
e9f8a5ec
Yarik
Detail page
|
230
|
}
|