Blame view

frontend/controllers/CatalogController.php 3.83 KB
85261b14   Karnovsky A   not fixed commite
1
2
3
4
  <?php
  
  namespace frontend\controllers;
  
b519af22   Karnovsky A   Base-product func...
5
  use common\modules\product\models\Brand;
85261b14   Karnovsky A   not fixed commite
6
7
8
  use common\modules\product\models\Category;
  use common\modules\product\models\CategorySearch;
  use common\modules\product\models\Product;
b519af22   Karnovsky A   Base-product func...
9
10
11
12
13
14
15
  use common\modules\product\models\ProductCategory;
  use common\modules\product\models\ProductSearch;
  use common\modules\product\models\ProductVariant;
  use yii\data\ActiveDataProvider;
  use yii\data\Pagination;
  use yii\data\Sort;
  use yii\db\ActiveQuery;
85261b14   Karnovsky A   not fixed commite
16
17
18
19
20
21
22
  use yii\web\HttpException;
  
  class CatalogController extends \yii\web\Controller
  {
      public function actionCategory($alias)
      {
          $category = CategorySearch::findByAlias($alias);
b519af22   Karnovsky A   Base-product func...
23
24
25
          if (empty($category->category_id)) {
              throw new HttpException(404 ,'Page not found');
          }
85261b14   Karnovsky A   not fixed commite
26
27
28
29
30
31
32
33
          if ($category->depth < 2) {
              return $this->render(
                  'categories',
                  [
                      'category' => $category
                  ]
              );
          } else {
b519af22   Karnovsky A   Base-product func...
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  //            $products = $category->getRelations('product_categories')->all();
  
              $per_page = 24;
  
              $sort = new Sort([
                  'attributes' => [
                      'name' => [
                          'asc' => ['name' => SORT_ASC],
                          'desc' => ['name' => SORT_DESC],
                          'default' => SORT_DESC,
                          'label' => 'имени',
                      ],
                      'price' => [
                          'asc' => [ProductVariant::tableName() .'.price' => SORT_ASC],
                          'desc' => [ProductVariant::tableName() .'.price' => SORT_DESC],
                          'default' => SORT_DESC,
                          'label' => 'цене',
                      ],
                  ],
              ]);
              /** @var ActiveQuery $query */
              $query = $category->getRelations('product_categories')
                  ->joinWith([
                      'variants'
                  ]);
              $pages = new Pagination(['totalCount' => $query->count(), 'pageSize' => $per_page]);
              $count = $query->count();
  
  //            $priceQuery = clone $query;
              $priceMin = $query->min(ProductVariant::tableName() .'.price');
              $priceMax = $query->max(ProductVariant::tableName() .'.price');
  
              $query->offset($pages->offset)
                  ->orderBy($sort->orders)
                  ->limit($pages->limit);
              $products = $query->all();
  
              $brandsQuery = Brand::find()->innerJoinWith('products')->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. Product::tableName() .'.product_id')->where([
                  ProductCategory::tableName() .'.category_id' => $category->category_id
              ])->groupBy(Brand::tableName() .'.brand_id');
              $brands = $brandsQuery->all();
              $brands_count = $brandsQuery->count();
85261b14   Karnovsky A   not fixed commite
76
77
78
79
80
  
              return $this->render(
                  'products',
                  [
                      'category' => $category,
b519af22   Karnovsky A   Base-product func...
81
82
83
84
85
86
87
88
89
                      'products' => $products,
                      'product_count' => $count,
                      'sort' => $sort,
                      'pages' => $pages,
                      'per_page' => $per_page,
                      'priceMin' => $priceMin,
                      'priceMax' => $priceMax,
                      'brands' => $brands,
                      'brands_count' => $brands_count,
85261b14   Karnovsky A   not fixed commite
90
91
92
93
94
95
96
                  ]
              );
          }
      }
  
      public function actionProduct($alias)
      {
b519af22   Karnovsky A   Base-product func...
97
          $product = ProductSearch::findByAlias($alias);
85261b14   Karnovsky A   not fixed commite
98
          if (empty($product->product_id)) {
b519af22   Karnovsky A   Base-product func...
99
              throw new HttpException(404 ,'Page not found');
85261b14   Karnovsky A   not fixed commite
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
          }
          return $this->render('product');
      }
  
      public function actionBrands()
      {
          return 'actionBrands';
      }
  
      public function actionBrand($alias)
      {
          return 'actionBrand:'. $alias;
      }
  
  }