4253cbec
root
first commit
|
1
|
<?php
|
e337d04a
Administrator
liniya first commit
|
2
3
4
|
namespace frontend\controllers;
|
a95ce595
Administrator
big commti
|
5
|
|
e337d04a
Administrator
liniya first commit
|
6
|
use common\modules\product\helpers\ProductHelper;
|
e337d04a
Administrator
liniya first commit
|
7
8
9
10
11
|
use frontend\models\ProductFrontendSearch;
use Yii;
use common\modules\product\models\Brand;
use common\modules\product\models\BrandSearch;
use common\modules\product\models\Category;
|
e337d04a
Administrator
liniya first commit
|
12
|
use common\modules\product\models\Product;
|
e337d04a
Administrator
liniya first commit
|
13
|
use common\modules\rubrication\models\TaxGroup;
|
e337d04a
Administrator
liniya first commit
|
14
|
use yii\data\ActiveDataProvider;
|
e337d04a
Administrator
liniya first commit
|
15
|
use yii\helpers\ArrayHelper;
|
e337d04a
Administrator
liniya first commit
|
16
17
18
|
class CatalogController extends \yii\web\Controller
{
|
a95ce595
Administrator
big commti
|
19
20
|
|
e337d04a
Administrator
liniya first commit
|
21
22
23
24
25
|
public function actionSearch() {
// @todo
}
public function actionCategory()
|
4253cbec
root
first commit
|
26
|
{
|
e337d04a
Administrator
liniya first commit
|
27
|
|
a95ce595
Administrator
big commti
|
28
|
|
e337d04a
Administrator
liniya first commit
|
29
30
31
32
33
34
35
|
/** @var Category $category */
$category = Yii::$app->request->get('category');
$filter = Yii::$app->request->get('filters', [ ]);
$filter_check = $filter;
if(empty( $category->category_id ) && empty( $word )) {
return $this->render('catalog');
|
4253cbec
root
first commit
|
36
|
}
|
e337d04a
Administrator
liniya first commit
|
37
38
39
40
41
42
43
44
45
|
ProductHelper::addLastCategory($category->category_id);
$params = [ ];
$optionsList = ArrayHelper::getColumn(TaxGroup::find()
->where([ 'is_filter' => 'TRUE' ])
->all(), 'alias');
|
a95ce595
Administrator
big commti
|
46
|
|
e337d04a
Administrator
liniya first commit
|
47
48
49
50
51
|
if(!empty( $filter[ 'special' ] )) {
unset( $filter_check[ 'special' ] );
if(!is_array($filter[ 'special' ])) {
$filter[ 'special' ] = [ $filter[ 'special' ] ];
|
4253cbec
root
first commit
|
52
|
}
|
e337d04a
Administrator
liniya first commit
|
53
54
|
if(in_array('new', $filter[ 'special' ])) {
$params[ 'special' ][ 'is_new' ] = true;
|
4253cbec
root
first commit
|
55
|
}
|
e337d04a
Administrator
liniya first commit
|
56
57
|
if(in_array('top', $filter[ 'special' ])) {
$params[ 'special' ][ 'is_top' ] = true;
|
4253cbec
root
first commit
|
58
|
}
|
e337d04a
Administrator
liniya first commit
|
59
60
|
if(in_array('promo', $filter[ 'special' ])) {
$params[ 'special' ][ 'akciya' ] = true;
|
4253cbec
root
first commit
|
61
|
}
|
4253cbec
root
first commit
|
62
|
}
|
e337d04a
Administrator
liniya first commit
|
63
64
65
66
67
68
|
if(!empty( $filter[ 'prices' ] )) {
unset( $filter_check[ 'prices' ] );
$params[ 'prices' ] = $filter[ 'prices' ];
}
|
a95ce595
Administrator
big commti
|
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
$activeFiltersParams = $filter_check;
if(!empty( $filter[ 'brands' ] )) {
unset( $filter_check[ 'brands' ] );
$brands = Brand::find()
->select('brand_id')
->where([
'in',
'alias',
$filter[ 'brands' ],
])
->all();
$params[ 'brands' ] = [ ];
foreach($brands as $brand) {
$params[ 'brands' ][] = $brand->brand_id;
}
}
|
e337d04a
Administrator
liniya first commit
|
87
88
89
90
91
|
foreach($optionsList as $optionList) {
if(isset( $filter[ $optionList ] )) {
unset( $filter_check[ $optionList ] );
$params[ $optionList ] = $filter[ $optionList ];
|
4253cbec
root
first commit
|
92
|
}
|
e337d04a
Administrator
liniya first commit
|
93
|
|
4253cbec
root
first commit
|
94
|
}
|
e337d04a
Administrator
liniya first commit
|
95
96
97
98
99
100
101
102
|
if(!empty( $filter_check )) {
$filter = array_diff_key($filter, $filter_check);
Yii::$app->response->redirect([
'catalog/category',
'category' => $category,
'filters' => $filter,
], 301);
|
4253cbec
root
first commit
|
103
|
}
|
e337d04a
Administrator
liniya first commit
|
104
105
|
$productModel = new ProductFrontendSearch();
|
a95ce595
Administrator
big commti
|
106
|
|
e337d04a
Administrator
liniya first commit
|
107
108
|
$productProvider = $productModel->search($category, $params);
|
a95ce595
Administrator
big commti
|
109
|
|
e337d04a
Administrator
liniya first commit
|
110
111
112
113
|
$brandModel = new BrandSearch();
$brands = $brandModel->getBrands($category, $params)
->all();
|
a95ce595
Administrator
big commti
|
114
|
|
0bfe5701
Administrator
big commti
|
115
|
$groups = $category->getActiveFilters();
|
a95ce595
Administrator
big commti
|
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
144
145
146
147
|
foreach($brands as $brand){
array_unshift($groups , [
'group_alias' => 'brands',
'option_alias' => $brand->alias,
'tax_option_id' => $brand->brand_id,
'value' => $brand->name,
'alias' => 'brands',
'name' => 'Бренды'
]);
}
foreach ($groups as $key=> $group) {
$param = $activeFiltersParams;
if(isset($param[$group['alias']])){
if(!in_array($group['option_alias'],$param[$group['alias']])){
$param[$group['alias']][] = $group['option_alias'];
} else {
continue;
}
}else {
$param = array_merge($param, [$group['alias']=>[$group['option_alias']]]);
}
$groups[$key] = array_merge($groups[$key],['cacheKey' => json_encode($param)] );
}
|
e337d04a
Administrator
liniya first commit
|
148
|
$groups = ArrayHelper::index($groups, null, 'name');
|
a95ce595
Administrator
big commti
|
149
150
151
152
|
|
635f3761
Administrator
Ntr
|
153
|
$priceLimits = $productModel->priceLimits($category, $params);
|
e337d04a
Administrator
liniya first commit
|
154
|
|
e337d04a
Administrator
liniya first commit
|
155
156
157
|
return $this->render('products', [
'category' => $category,
|
e337d04a
Administrator
liniya first commit
|
158
159
160
161
|
'filter' => $filter,
'params' => $params,
'productModel' => $productModel,
'productProvider' => $productProvider,
|
a95ce595
Administrator
big commti
|
162
|
'groups' => $groups,
|
e688b471
Administrator
big commti
|
163
|
'priceLimits' => $priceLimits,
|
e337d04a
Administrator
liniya first commit
|
164
165
166
167
168
169
170
171
172
|
]);
}
public function actionProduct()
{
/** @var Product $product */
$product = Yii::$app->request->get('product');
|
e337d04a
Administrator
liniya first commit
|
173
174
175
|
ProductHelper::addLastProsucts($product->product_id);
|
9dcd66fc
Administrator
big commti
|
176
177
178
179
180
181
182
183
184
|
$category = null;
$last_category_id = ProductHelper::getLastCategory();
if(!empty($last_category_id)) {
$category = $product->getCategory()->andWhere(['category_id' => $last_category_id])->one();
}
if(empty($category)) {
$category = $product->category;
}
|
e337d04a
Administrator
liniya first commit
|
185
186
|
return $this->render('product', [
'product' => $product,
|
9dcd66fc
Administrator
big commti
|
187
|
'category' => $category,
|
e337d04a
Administrator
liniya first commit
|
188
189
190
|
]);
}
|
2cbb3bdc
Виталий
test commit
|
191
192
193
194
195
196
197
198
199
200
201
202
203
|
public function actionBrands()
{
$dataProvider = new ActiveDataProvider([
'query' => Brand::find()->orderBy('name'),
'pagination' => [
'pageSize' => -1,
]
]);
return $this->render('brands', [
'dataProvider' => $dataProvider,
]);
}
|
e337d04a
Administrator
liniya first commit
|
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
public function actionBrand($brand)
{
$brand = BrandSearch::findByAlias($brand);
$params = [
'brands' => $brand->brand_id,
];
$productModel = new ProductFrontendSearch();
$productProvider = $productModel->search(null, $params);
$priceLimits = $productModel->priceLimits(null, $params);
return $this->render('brand', [
'productModel' => $productModel,
'productProvider' => $productProvider,
'brand' => $brand,
'priceLimits' => $priceLimits,
]);
|
4253cbec
root
first commit
|
224
|
}
|
e337d04a
Administrator
liniya first commit
|
225
226
|
}
|