Blame view

frontend/controllers/VariantController.php 3.46 KB
fc66ded4   Yarik   Artbox great prep...
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
  <?php
      
      namespace frontend\controllers;
      
      use artbox\catalog\models\Variant;
      use artbox\core\components\SeoComponent;
      use yii\db\ActiveQuery;
      use yii\web\Controller;
      use yii\web\NotFoundHttpException;
      use Yii;
      
      /**
       * Class VariantController
       *
       * @package frontend\controllers
       */
      class VariantController extends Controller
      {
          /**
           * Show product by ID
           *
           * @param int $id
           *
           * @return string
           */
          public function actionView($id)
          {
              $model = $this->findModel($id);
              /**
a00f1f42   Yarik   Social auth + vie...
30
31
32
33
34
35
               * @var \artbox\catalog\components\History $history
               */
              if ($history = \Yii::$app->get('history', false)) {
                  $history->add($model->id);
              }
              /**
fc66ded4   Yarik   Artbox great prep...
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
               * @var SeoComponent $seo
               */
              $seo = Yii::$app->get('seo');
              $seo->setModel($model->lang);
              $groups = $model->getSortedGroups();
              $similar = $model->product->getSimilarProducts(8);
              
              return $this->render(
                  'view',
                  [
                      'model'   => $model,
                      'groups'  => $groups,
                      'similar' => $similar,
                  ]
              );
          }
          
          /**
           * Find variant by ID
           *
           * @param $id
           *
           * @return \artbox\catalog\models\Variant
           * @throws \yii\web\NotFoundHttpException
           */
          protected function findModel($id)
          {
              /**
               * @var SeoComponent $seo
               */
              $seo = \Yii::$app->get('seo');
              /**
               * @var Variant $model
               */
              $model = Variant::findWithFilters()
                              ->with('lang', 'image')
                              ->with(
                                  [
                                      'product' => function ($query) {
                                          /**
                                           * @var ActiveQuery $query
                                           */
                                          $query->with('images')
                                                ->with(
                                                    [
                                                        'category' => function ($query) {
                                                            /**
                                                             * @var ActiveQuery $query
                                                             */
                                                            $query->with('lang')
                                                                  ->with('parent.lang');
                                                        },
                                                    ]
                                                );
                                      },
                                  ]
                              )
                              ->where([ 'id' => $id ])
                              ->one();
              if (!empty($model)) {
                  if ($model->lang->alias_id !== $seo->aliasId) {
                      throw new NotFoundHttpException(\Yii::t('app', 'Wrong language'));
                  }
                  return $model;
              } else {
                  throw new NotFoundHttpException(\Yii::t('app', 'Model not found'));
              }
          }
      }