PageController.php
3.52 KB
1
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
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
    namespace frontend\controllers;
    
    use artbox\core\components\SeoComponent;
    use artbox\core\models\Page;
    use artbox\core\models\PageCategory;
    use yii\db\ActiveQuery;
    use yii\web\Controller;
    use yii\web\NotFoundHttpException;
    use Yii;
    
    /**
     * Class PageController
     *
     * @package frontend\controllers
     */
    class PageController extends Controller
    {
        public function actionView($id)
        {
            $model = $this->findModel($id);
            
            /**
             * @var SeoComponent $seo
             */
            $seo = Yii::$app->get('seo');
            $seo->setModel($model->lang);
            
            if (strpos($model->lang->body, '[[gallery]]')) {
                $splited = explode('[[gallery]]', $model->lang->body);
                $body = array_shift($splited);
                $lefts = implode('', $splited);
            } else {
                $body = $model->lang->body;
                $lefts = null;
            }
            
            $categories = PageCategory::find()
                                      ->with('lang')
                                      ->with(
                                          [
                                              'pages' => function (ActiveQuery $query) use ($id) {
                                                  $query->with('lang.alias');
                                                  $query->where(
                                                      [
                                                          'not',
                                                          [
                                                              'id' => $id,
                                                          ],
                                                      ]
                                                  );
                                              },
                                          ]
                                      )
                                      ->all();
    
            $this->view->params['model'] = $model;
            
            if ($model->id == 6) {
                return $this->render(
                    '@frontend/views/site/about',
                    [
                        'page_about' => $model,
                    ]
                );
            }
            
            return $this->render(
                'view',
                [
                    'model'      => $model,
                    'categories' => $categories,
                    'body'       => $body,
                    'lefts'      => $lefts,
                    'images'     => $model->getImages(),
                ]
            );
        }
        
        protected function findModel($id)
        {
            /**
             * @var Page         $model
             * @var SeoComponent $seo
             */
            $seo = \Yii::$app->get('seo');
            $model = Page::find()
                         ->where(
                             [
                                 'id' => $id,
                             ]
                         )
                         ->with('lang')
                         ->one();
            
            if (!empty($model)) {
                if ($model->lang->alias_id !== $seo->aliasId) {
                    throw new NotFoundHttpException('Wrong language');
                }
                return $model;
            } else {
                throw new NotFoundHttpException('Model not found');
            }
        }
    }