Blame view

frontend/controllers/CatalogController.php 5.87 KB
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
  
  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;
37415bee   Administrator   big commti
27
  use yii\helpers\VarDumper;
e337d04a   Administrator   liniya first commit
28
29
30
31
32
33
34
35
36
  use yii\web\HttpException;
  
  class CatalogController extends \yii\web\Controller
  {
      public function actionSearch() {
          // @todo
      }
  
      public function actionCategory()
4253cbec   root   first commit
37
      {
e337d04a   Administrator   liniya first commit
38
39
40
41
42
43
44
45
  
          /** @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
46
          }
e337d04a   Administrator   liniya first commit
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  
          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
69
              }
e337d04a   Administrator   liniya first commit
70
71
72
73
74
75
          }
  
          if(!empty( $filter[ 'special' ] )) {
              unset( $filter_check[ 'special' ] );
              if(!is_array($filter[ 'special' ])) {
                  $filter[ 'special' ] = [ $filter[ 'special' ] ];
4253cbec   root   first commit
76
              }
e337d04a   Administrator   liniya first commit
77
78
              if(in_array('new', $filter[ 'special' ])) {
                  $params[ 'special' ][ 'is_new' ] = true;
4253cbec   root   first commit
79
              }
e337d04a   Administrator   liniya first commit
80
81
              if(in_array('top', $filter[ 'special' ])) {
                  $params[ 'special' ][ 'is_top' ] = true;
4253cbec   root   first commit
82
              }
e337d04a   Administrator   liniya first commit
83
84
              if(in_array('promo', $filter[ 'special' ])) {
                  $params[ 'special' ][ 'akciya' ] = true;
4253cbec   root   first commit
85
              }
4253cbec   root   first commit
86
          }
e337d04a   Administrator   liniya first commit
87
88
89
90
91
92
93
94
95
96
97
  
          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
98
              }
e337d04a   Administrator   liniya first commit
99
  
4253cbec   root   first commit
100
          }
e337d04a   Administrator   liniya first commit
101
102
103
104
105
106
107
108
  
          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
109
          }
e337d04a   Administrator   liniya first commit
110
111
  
          $productModel = new ProductFrontendSearch();
e337d04a   Administrator   liniya first commit
112
113
114
115
116
117
          $productProvider = $productModel->search($category, $params);
  
          $brandModel = new BrandSearch();
          $brands = $brandModel->getBrands($category, $params)
              ->all();
  
0bfe5701   Administrator   big commti
118
          $groups = $category->getActiveFilters();
e337d04a   Administrator   liniya first commit
119
          $groups = ArrayHelper::index($groups, null, 'name');
e688b471   Administrator   big commti
120
          $priceLimits = $productModel->priceLimits($category, $params);
e337d04a   Administrator   liniya first commit
121
  
e337d04a   Administrator   liniya first commit
122
123
124
125
126
127
128
129
130
131
  
          return $this->render('products', [
              'category'        => $category,
              'brandModel'      => $brandModel,
              'brands'          => $brands,
              'filter'          => $filter,
              'params'          => $params,
              'productModel'    => $productModel,
              'productProvider' => $productProvider,
              'groups'            => $groups,
e688b471   Administrator   big commti
132
              'priceLimits'     => $priceLimits,
e337d04a   Administrator   liniya first commit
133
134
135
136
137
138
139
140
141
          ]);
  
      }
  
      public function actionProduct()
      {
          /** @var Product $product */
          $product = Yii::$app->request->get('product');
  
e337d04a   Administrator   liniya first commit
142
143
144
  
          ProductHelper::addLastProsucts($product->product_id);
  
9dcd66fc   Administrator   big commti
145
146
147
148
149
150
151
152
153
          $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
154
155
          return $this->render('product', [
              'product' => $product,
9dcd66fc   Administrator   big commti
156
              'category' => $category,
e337d04a   Administrator   liniya first commit
157
158
159
          ]);
      }
  
2cbb3bdc   Виталий   test commit
160
161
162
163
164
165
166
167
168
169
170
171
172
      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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
  
      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
193
      }
e337d04a   Administrator   liniya first commit
194
195
  
  }