4253cbec
root
first commit
|
1
|
<?php
|
e337d04a
Administrator
liniya first commit
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
namespace frontend\controllers;
use common\modules\product\Filter;
use common\modules\product\helpers\ProductHelper;
use common\modules\rubrication\models\TaxOptionSearch;
use frontend\models\ProductFrontendSearch;
use Yii;
use common\modules\product\models\Brand;
use common\modules\product\models\BrandSearch;
use common\modules\product\models\Category;
use common\modules\product\models\CategorySearch;
use common\modules\product\models\Product;
use common\modules\product\models\ProductCategory;
use common\modules\product\models\ProductOption;
use common\modules\product\models\ProductSearch;
use common\modules\product\models\ProductVariant;
use common\modules\rubrication\models\TaxGroup;
use common\modules\rubrication\models\TaxOption;
use common\modules\rubrication\models\TaxValueString;
use yii\data\ActiveDataProvider;
use yii\data\Pagination;
use yii\data\Sort;
use yii\db\ActiveQuery;
use yii\helpers\ArrayHelper;
use yii\web\HttpException;
class CatalogController extends \yii\web\Controller
{
public function actionSearch() {
// @todo
}
public function actionCategory()
|
4253cbec
root
first commit
|
36
|
{
|
e337d04a
Administrator
liniya first commit
|
37
38
39
40
41
42
43
44
|
/** @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
|
45
|
}
|
e337d04a
Administrator
liniya first commit
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
ProductHelper::addLastCategory($category->category_id);
$params = [ ];
$optionsList = ArrayHelper::getColumn(TaxGroup::find()
->where([ 'is_filter' => 'TRUE' ])
->all(), 'alias');
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;
|
4253cbec
root
first commit
|
68
|
}
|
e337d04a
Administrator
liniya first commit
|
69
70
71
72
73
74
|
}
if(!empty( $filter[ 'special' ] )) {
unset( $filter_check[ 'special' ] );
if(!is_array($filter[ 'special' ])) {
$filter[ 'special' ] = [ $filter[ 'special' ] ];
|
4253cbec
root
first commit
|
75
|
}
|
e337d04a
Administrator
liniya first commit
|
76
77
|
if(in_array('new', $filter[ 'special' ])) {
$params[ 'special' ][ 'is_new' ] = true;
|
4253cbec
root
first commit
|
78
|
}
|
e337d04a
Administrator
liniya first commit
|
79
80
|
if(in_array('top', $filter[ 'special' ])) {
$params[ 'special' ][ 'is_top' ] = true;
|
4253cbec
root
first commit
|
81
|
}
|
e337d04a
Administrator
liniya first commit
|
82
83
|
if(in_array('promo', $filter[ 'special' ])) {
$params[ 'special' ][ 'akciya' ] = true;
|
4253cbec
root
first commit
|
84
|
}
|
4253cbec
root
first commit
|
85
|
}
|
e337d04a
Administrator
liniya first commit
|
86
87
88
89
90
91
92
93
94
95
96
|
if(!empty( $filter[ 'prices' ] )) {
unset( $filter_check[ 'prices' ] );
$params[ 'prices' ] = $filter[ 'prices' ];
}
foreach($optionsList as $optionList) {
if(isset( $filter[ $optionList ] )) {
unset( $filter_check[ $optionList ] );
$params[ $optionList ] = $filter[ $optionList ];
|
4253cbec
root
first commit
|
97
|
}
|
e337d04a
Administrator
liniya first commit
|
98
|
|
4253cbec
root
first commit
|
99
|
}
|
e337d04a
Administrator
liniya first commit
|
100
101
102
103
104
105
106
107
|
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
|
108
|
}
|
e337d04a
Administrator
liniya first commit
|
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
$productModel = new ProductFrontendSearch();
//$productQuery = $productModel->getSearchQuery($category, $params);
$productProvider = $productModel->search($category, $params);
$brandModel = new BrandSearch();
$brands = $brandModel->getBrands($category, $params)
->all();
$groups = $category->getActiveFilters()->all();
$groups = ArrayHelper::index($groups, null, 'name');
$priceLimits = $productModel->priceLimits($category, $params);
/*
* Greedy search for comments and rating
*/
$query = $productProvider->query;
$query->with([
|
fe7b6960
Yarik
Basket
|
128
|
'variant',
|
e337d04a
Administrator
liniya first commit
|
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
'comments',
'averageRating',
]);
/*
* End of greedy search for rating and comments
*/
return $this->render('products', [
'category' => $category,
'brandModel' => $brandModel,
'brands' => $brands,
'filter' => $filter,
'params' => $params,
'productModel' => $productModel,
'productProvider' => $productProvider,
'groups' => $groups,
'priceLimits' => $priceLimits,
]);
}
public function actionProduct()
{
/** @var Product $product */
$product = Yii::$app->request->get('product');
if(!$product->enabledVariant) {
throw new HttpException(404, 'Товар не найден');
|
4253cbec
root
first commit
|
157
|
}
|
e337d04a
Administrator
liniya first commit
|
158
159
160
161
162
163
164
165
166
|
ProductHelper::addLastProsucts($product->product_id);
return $this->render('product', [
'product' => $product,
'category' => $product->category,
]);
}
|
2cbb3bdc
Виталий
test commit
|
167
168
169
170
171
172
173
174
175
176
177
178
179
|
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
|
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
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
|
200
|
}
|
e337d04a
Administrator
liniya first commit
|
201
202
|
}
|