Blame view

frontend/controllers/GoodsController.php 3.66 KB
62dba7d8   Mihail   add goods control...
1
2
3
4
5
6
7
8
9
10
  <?php
  /**
   * Created by PhpStorm.
   * User: vitaliy
   * Date: 08.11.15
   * Time: 22:06
   */
  
  namespace frontend\controllers;
  
f0a8acb5   Mihail   add sort function...
11
  use common\components\CustomVarDamp;
1412c23a   Mihail   add crocc search ...
12
  use common\models\DetailsCrosses;
b13c67c3   Mihail   output price in g...
13
  use common\models\GoodsView;
1412c23a   Mihail   add crocc search ...
14
  use common\models\GoodsViewSearch;
62dba7d8   Mihail   add goods control...
15
  use Yii;
62dba7d8   Mihail   add goods control...
16
  use yii\web\Controller;
5fc85d80   Administrator   VItaliy 21.12.2015
17
  use common\models\Details;
62dba7d8   Mihail   add goods control...
18
  
8f02e664   Mihail   add multisort fun...
19
20
  class GoodsController extends Controller
  {
62dba7d8   Mihail   add goods control...
21
22
      public $layout = '/internal';
  
8f02e664   Mihail   add multisort fun...
23
      public function actionIndex($name, $id)
62dba7d8   Mihail   add goods control...
24
      {
8f02e664   Mihail   add multisort fun...
25
          $arr_name = explode('_', $name);
df73f762   Mihail   add crocc search ...
26
27
          $brand = $arr_name[0];
          $article = $arr_name[1];
bd74917c   Administrator   VItaliy 21.12.2015
28
  
8f02e664   Mihail   add multisort fun...
29
30
31
32
33
          $params = Yii::$app->request->getQueryParams();
  
          // получим параметры сортировки из гет запроса
          $sort_params_or = $this->getSortParams($params, 'or');
          $sort_params_cross = $this->getSortParams($params, 'cross');
5b5bfa85   Administrator   VItaliy 22.12.2015
34
  
b13c67c3   Mihail   output price in g...
35
          $arr_values = ['name' => $article,
8f02e664   Mihail   add multisort fun...
36
              'brand' => $brand];
b13c67c3   Mihail   output price in g...
37
          $arr = ['GoodsViewSearch' => $arr_values];
5b5bfa85   Administrator   VItaliy 22.12.2015
38
  
89640009   Mihail   add sort function...
39
          if (empty(Yii::$app->user->identity)) {
1ab92388   Administrator   VItaliy 22.12.2015
40
              $margin_id = 1;
89640009   Mihail   add sort function...
41
          } else {
1ab92388   Administrator   VItaliy 22.12.2015
42
43
44
              $margin_id = Yii::$app->user->identity->margin_id;
          }
  
8f02e664   Mihail   add multisort fun...
45
          if (empty(Yii::$app->user->identity)) {
ec825628   Mihail   temp commit
46
              $margin_id = 1;
8f02e664   Mihail   add multisort fun...
47
          } else {
ec825628   Mihail   temp commit
48
49
              $margin_id = Yii::$app->user->identity->margin_id;
          }
1412c23a   Mihail   add crocc search ...
50
  
1412c23a   Mihail   add crocc search ...
51
          Yii::$app->session->setFlash('price_currency_id', 1);
ec825628   Mihail   temp commit
52
          Yii::$app->session->setFlash('price_margin_id', $margin_id);
1412c23a   Mihail   add crocc search ...
53
54
  
          $searchModel = new GoodsViewSearch();
8f02e664   Mihail   add multisort fun...
55
          $goods_provider = $searchModel->search($arr, $sort_params_or);
f0a8acb5   Mihail   add sort function...
56
  
8f02e664   Mihail   add multisort fun...
57
          $crosses_provider = $searchModel->searchCrosses($arr, $sort_params_cross);
f0a8acb5   Mihail   add sort function...
58
  
b13c67c3   Mihail   output price in g...
59
60
61
          // для заголовка таблицы (карточка товара)
          $detailsModel = GoodsView::findOne($arr_values);
  
8f02e664   Mihail   add multisort fun...
62
          return $this->render('index', [
1412c23a   Mihail   add crocc search ...
63
              'goods_data_provider' => $goods_provider,
df73f762   Mihail   add crocc search ...
64
              'crosses_data_provider' => $crosses_provider,
b13c67c3   Mihail   output price in g...
65
              'detailsModel' => $detailsModel,
89640009   Mihail   add sort function...
66
67
              'sort_params_or' => $sort_params_or,
              'sort_params_cross' => $sort_params_cross,
f0a8acb5   Mihail   add sort function...
68
          ]);
62dba7d8   Mihail   add goods control...
69
70
      }
  
8f02e664   Mihail   add multisort fun...
71
72
73
74
75
76
77
78
79
80
      /**
       * @param $params - массив параметров для сортировки
       * @param $prefix - строка, перфикс таблицы сортировки (_or / _cross )
       * @return массив - итоговый массив с параемтрами для сортировки который подставляется в запрос
       */
      protected function getSortParams($params, $prefix)
      {
          $default_sort_params = ['price' => SORT_DESC];
          $sort_params = [];
  
89640009   Mihail   add sort function...
81
          if (empty($params['sort'])) {
8f02e664   Mihail   add multisort fun...
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
              // нет параметров - сортируем по цене по убыванию
              $sort_params = $default_sort_params;
  
          } else {
              // разбираем парметры
              $sort_arr = explode('_', $params['sort']);
              if ($sort_arr[1] === $prefix) {
                  if ($sort_arr[0][0] === '-') {
                      // если первый символ "-", то по убыванию
                      $sort_arr[0] = str_replace('-', '', $sort_arr[0]);
                      $sort_params[$sort_arr[0]] = SORT_ASC;
                  } else {
                      $sort_params[$sort_arr[0]] = SORT_DESC;
                  }
              }
              if ( empty( $sort_params ) ) {
8f02e664   Mihail   add multisort fun...
98
                  // если так и ненашли подходящих параметров, значит сортируем другую таблицу
89640009   Mihail   add sort function...
99
100
                  // а для этой  дефолтная сортировка
                  $sort_params = $default_sort_params;
8f02e664   Mihail   add multisort fun...
101
102
              }
          }
8f02e664   Mihail   add multisort fun...
103
104
          return $sort_params;
      }
62dba7d8   Mihail   add goods control...
105
  
62dba7d8   Mihail   add goods control...
106
  }