d8c1a2e0
Yarik
Big commit artbox
|
1
2
3
4
|
<?php
namespace frontend\controllers;
|
cc658b4c
Yarik
Big commit
|
5
6
7
8
|
use common\modules\product\models\Brand;
use common\modules\product\models\Category;
use common\modules\product\models\ProductSearch;
use common\modules\rubrication\models\TaxOption;
|
c67585d7
Yarik
Category path fixes
|
9
|
use yii\db\ActiveQuery;
|
d8c1a2e0
Yarik
Big commit artbox
|
10
|
use yii\web\Controller;
|
cc658b4c
Yarik
Big commit
|
11
|
use yii\web\NotFoundHttpException;
|
d8c1a2e0
Yarik
Big commit artbox
|
12
13
14
15
16
17
18
|
/**
* Filter controller
*/
class FilterController extends Controller
{
|
cc658b4c
Yarik
Big commit
|
19
20
21
22
23
|
public function actionIndex($category_id, $purpose_id)
{
$category = $this->findCategory($category_id);
$purpose = $this->findPurpose($purpose_id);
$brands = Brand::find()
|
d55d2fe0
Yarik
Multilanguage
|
24
25
26
27
|
->joinWith('lang', true, 'INNER JOIN')
->joinWith('products.lang')
->joinWith('products.categories.lang')
->joinWith('products.options.lang')
|
cc658b4c
Yarik
Big commit
|
28
29
30
31
32
33
34
35
36
37
38
39
|
->where([
'category.category_id' => $category->category_id,
'tax_option.tax_option_id' => $purpose->tax_option_id,
])
->all();
return $this->render('index', [
'category' => $category,
'purpose' => $purpose,
'brands' => $brands,
]);
}
|
d8c1a2e0
Yarik
Big commit artbox
|
40
41
|
/**
* Filter by type.
|
c67585d7
Yarik
Category path fixes
|
42
|
*
|
d8c1a2e0
Yarik
Big commit artbox
|
43
44
|
* @return string
*/
|
cc658b4c
Yarik
Big commit
|
45
|
public function actionCategory($id)
|
d8c1a2e0
Yarik
Big commit artbox
|
46
|
{
|
cc658b4c
Yarik
Big commit
|
47
|
$category = $this->findCategory($id);
|
c67585d7
Yarik
Category path fixes
|
48
|
$brandsAll = $category->activeBrands;
|
cc658b4c
Yarik
Big commit
|
49
|
$purposes = TaxOption::find()
|
d55d2fe0
Yarik
Multilanguage
|
50
|
->joinWith('lang', true, 'INNER JOIN')
|
887985c7
Yarik
Filter fix
|
51
52
53
54
55
56
57
58
59
|
->joinWith([
'products' => function($query) use ($category) {
$query->joinWith([
'categories' => function($query) use ($category) {
$query->andWhere([ 'category.category_id' => $category->category_id ]);
},
]);
},
])
|
d55d2fe0
Yarik
Multilanguage
|
60
|
->joinWith('products.categories.lang')
|
887985c7
Yarik
Filter fix
|
61
|
->joinWith('products.lang')
|
d55d2fe0
Yarik
Multilanguage
|
62
|
->joinWith('products.brand.lang')
|
cc658b4c
Yarik
Big commit
|
63
64
|
->joinWith('taxGroup')
->where([
|
27ad59d9
Yarik
Purpose public fix.
|
65
66
|
'category.category_id' => $category->category_id,
'tax_group.tax_group_id' => 5,
|
cc658b4c
Yarik
Big commit
|
67
68
|
])
->all();
|
cc658b4c
Yarik
Big commit
|
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
$brands = [];
foreach($purposes as $purpose) {
/**
* @var TaxOption $purpose
*/
$brands[ $purpose->tax_option_id ] = [];
foreach($purpose->products as $product) {
/**
* @var Brand $brand
*/
$brand = $product->brand;
if(!empty( $brand )) {
$brands[ $purpose->tax_option_id ][ $brand->brand_id ] = $brand;
}
}
}
return $this->render('category', [
|
c67585d7
Yarik
Category path fixes
|
86
87
88
89
|
'category' => $category,
'purposes' => $purposes,
'brands' => $brands,
'brandsAll' => $brandsAll,
|
cc658b4c
Yarik
Big commit
|
90
|
]);
|
d8c1a2e0
Yarik
Big commit artbox
|
91
92
93
94
|
}
/**
* Filter by purpose.
|
c67585d7
Yarik
Category path fixes
|
95
|
*
|
d8c1a2e0
Yarik
Big commit artbox
|
96
97
|
* @return string
*/
|
cc658b4c
Yarik
Big commit
|
98
99
100
101
|
public function actionPurpose($id)
{
$purpose = $this->findPurpose($id);
$categories = Category::find()
|
d55d2fe0
Yarik
Multilanguage
|
102
103
|
->joinWith('products.lang')
->joinWith('products.brand.lang')
|
887985c7
Yarik
Filter fix
|
104
105
106
107
108
109
110
111
112
|
->joinWith([
'products' => function($query) use ($purpose) {
$query->joinWith([
'options' => function($query) use ($purpose) {
$query->andWhere([ 'tax_option.tax_option_id' => $purpose->tax_option_id ]);
},
]);
},
])
|
d55d2fe0
Yarik
Multilanguage
|
113
114
|
->joinWith('products.options.lang')
->where([ 'tax_option.tax_option_id' => $purpose->tax_option_id ])
|
cc658b4c
Yarik
Big commit
|
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
->all();
$brands = [];
foreach($categories as $category) {
$brands[ $category->category_id ] = [];
foreach($category->products as $product) {
/**
* @var Brand $brand
*/
$brand = $product->brand;
if(!empty( $brand )) {
$brands[ $category->category_id ][ $brand->brand_id ] = $brand;
}
}
}
return $this->render('purpose', [
'purpose' => $purpose,
'categories' => $categories,
'brands' => $brands,
]);
}
public function actionBrand($category_id, $purpose_id, $brand_id)
{
$category = $this->findCategory($category_id);
$purpose = $this->findPurpose($purpose_id);
$brand = $this->findBrand($brand_id);
$searchModel = new ProductSearch();
$dataProvider = $searchModel->search(\Yii::$app->request->queryParams);
$dataProvider->pagination = false;
|
c67585d7
Yarik
Category path fixes
|
144
145
146
|
/**
* @var ActiveQuery $query
*/
|
cc658b4c
Yarik
Big commit
|
147
|
$query = $dataProvider->query;
|
d55d2fe0
Yarik
Multilanguage
|
148
|
$query->with('variants.lang')
|
d55d2fe0
Yarik
Multilanguage
|
149
150
151
|
->joinWith('brand.lang')
->joinWith('options.lang')
->joinWith('categories.lang')
|
cc658b4c
Yarik
Big commit
|
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
->andWhere([
'category.category_id' => $category->category_id,
'tax_option.tax_option_id' => $purpose->tax_option_id,
'brand.brand_id' => $brand->brand_id,
]);
return $this->render('brand', [
'category' => $category,
'purpose' => $purpose,
'brand' => $brand,
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
|
c67585d7
Yarik
Category path fixes
|
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
|
public function actionCategoryBrand($category_id, $brand_id)
{
$category = $this->findCategory($category_id);
$brand = $this->findBrand($brand_id);
$searchModel = new ProductSearch();
$dataProvider = $searchModel->search(\Yii::$app->request->queryParams);
$dataProvider->pagination = false;
/**
* @var ActiveQuery $query
*/
$query = $dataProvider->query;
$query->with('variants.lang')
->joinWith('brand.lang')
->joinWith('categories.lang')
->andWhere([
'category.category_id' => $category->category_id,
'brand.brand_id' => $brand->brand_id,
]);
return $this->render('category-brand', [
'category' => $category,
'brand' => $brand,
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
public function actionCategoryBrands($category_id)
{
$category = $this->findCategory($category_id);
$brands = $category->activeBrands;
return $this->render('category-brands', [
'category' => $category,
'brands' => $brands,
]);
}
|
cc658b4c
Yarik
Big commit
|
202
203
204
205
206
207
208
209
210
211
212
|
/**
* @param $id
*
* @return TaxOption
* @throws NotFoundHttpException
*/
private function findPurpose($id)
{
$model = TaxOption::find()
->joinWith('taxGroup')
->where([
|
d55d2fe0
Yarik
Multilanguage
|
213
|
'tax_option.tax_option_id' => $id,
|
27ad59d9
Yarik
Purpose public fix.
|
214
|
'tax_group.tax_group_id' => 5,
|
cc658b4c
Yarik
Big commit
|
215
|
])
|
cc658b4c
Yarik
Big commit
|
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
->one();
if(empty( $model )) {
throw new NotFoundHttpException();
}
return $model;
}
/**
* @param $id
*
* @return Category
* @throws NotFoundHttpException
*/
private function findCategory($id)
{
$model = Category::find()
->where([
|
d55d2fe0
Yarik
Multilanguage
|
233
|
'category.category_id' => $id,
|
cc658b4c
Yarik
Big commit
|
234
|
])
|
cc658b4c
Yarik
Big commit
|
235
236
237
238
239
240
241
242
243
244
245
246
247
248
|
->one();
if(empty( $model )) {
throw new NotFoundHttpException();
}
return $model;
}
/**
* @param $id
*
* @return Brand
* @throws NotFoundHttpException
*/
private function findBrand($id)
|
d8c1a2e0
Yarik
Big commit artbox
|
249
|
{
|
cc658b4c
Yarik
Big commit
|
250
251
252
253
254
|
/**
* @var Brand $model
*/
$model = Brand::find()
->where([
|
d55d2fe0
Yarik
Multilanguage
|
255
|
'brand.brand_id' => $id,
|
cc658b4c
Yarik
Big commit
|
256
|
])
|
cc658b4c
Yarik
Big commit
|
257
258
259
260
261
|
->one();
if(empty( $model )) {
throw new NotFoundHttpException();
}
return $model;
|
d8c1a2e0
Yarik
Big commit artbox
|
262
263
|
}
}
|