Blame view

frontend/controllers/CategoryController.php 3.05 KB
d45d5682   Yarik   Catalog
1
2
  <?php
      namespace frontend\controllers;
dece113d   Yarik   FilterHelper upgrade
3
4
  
      use artbox\catalog\helpers\FilterHelper;
d45d5682   Yarik   Catalog
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
      use artbox\catalog\models\Category;
      use artbox\core\components\SeoComponent;
      use artbox\core\models\Page;
      use yii\data\ActiveDataProvider;
      use yii\db\ActiveQuery;
      use yii\web\Controller;
      use yii\web\NotFoundHttpException;
      use Yii;
      
      /**
       * Class CategoryController
       *
       * @package frontend\controllers
       */
      class CategoryController extends Controller
      {
          /**
           * Show category by ID
           *
           * @param int    $id
           *
           * @param string $filter
           *
           * @return string
           */
          public function actionView($id, $filter = '')
          {
              $model = $this->findModel($id);
              /**
               * @var SeoComponent $seo
dece113d   Yarik   FilterHelper upgrade
35
               * @var FilterHelper $filterHelper
d45d5682   Yarik   Catalog
36
37
38
39
40
41
42
43
               */
              $seo = Yii::$app->get('seo');
              $seo->setModel($model->lang);
              $filterHelper = \Yii::$app->get('filter');
              $filterHelper->setFilter($filter);
              $query = $filterHelper->buildQuery();
              $dataProvider = new ActiveDataProvider(
                  [
dece113d   Yarik   FilterHelper upgrade
44
45
46
47
                      'query'      => $query,
                      'pagination' => [
                          'pageSize' => 18,
                      ],
d45d5682   Yarik   Catalog
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
76
77
                  ]
              );
              
              return $this->render(
                  'view',
                  [
                      'model'        => $model,
                      'dataProvider' => $dataProvider,
                  ]
              );
          }
          
          /**
           * Find category by ID
           *
           * @param $id
           *
           * @return \artbox\core\models\Page
           * @throws \yii\web\NotFoundHttpException
           */
          protected function findModel($id)
          {
              /**
               * @var SeoComponent $seo
               */
              $seo = Yii::$app->get('seo');
              /**
               * @var Page $model
               */
              $model = Category::findWithFilters($id)
dece113d   Yarik   FilterHelper upgrade
78
                               ->with('lang.alias')
d45d5682   Yarik   Catalog
79
80
81
82
83
84
85
86
87
88
89
90
                               ->with('categories.lang')
                               ->with(
                                   [
                                       'parent' => function ($query) {
                                           /**
                                            * @var ActiveQuery $query
                                            */
                                           $query->with('lang', 'categories.lang');
                                       },
                                   ]
                               )
                               ->one();
dece113d   Yarik   FilterHelper upgrade
91
              $seo->setAlias($model->lang->alias);
d45d5682   Yarik   Catalog
92
93
94
95
96
97
98
99
100
101
              if (!empty( $model )) {
                  if ($model->lang->alias_id !== $seo->aliasId) {
                      throw new NotFoundHttpException('Wrong language');
                  }
                  return $model;
              } else {
                  throw new NotFoundHttpException('Model not found');
              }
          }
      }