Blame view

frontend/controllers/GoodsController.php 3.98 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
      {
bd74917c   Administrator   VItaliy 21.12.2015
25
  
8f02e664   Mihail   add multisort fun...
26
          $arr_name = explode('_', $name);
df73f762   Mihail   add crocc search ...
27
28
          $brand = $arr_name[0];
          $article = $arr_name[1];
bd74917c   Administrator   VItaliy 21.12.2015
29
  
5b5bfa85   Administrator   VItaliy 22.12.2015
30
  
8f02e664   Mihail   add multisort fun...
31
32
33
34
35
          $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
36
  
b13c67c3   Mihail   output price in g...
37
          $arr_values = ['name' => $article,
8f02e664   Mihail   add multisort fun...
38
              'brand' => $brand];
b13c67c3   Mihail   output price in g...
39
          $arr = ['GoodsViewSearch' => $arr_values];
5b5bfa85   Administrator   VItaliy 22.12.2015
40
  
1ab92388   Administrator   VItaliy 22.12.2015
41
42
43
44
45
46
47
48
          if(empty( Yii::$app->user->identity )){
              $margin_id = 1;
          }else{
              $margin_id = Yii::$app->user->identity->margin_id;
          }
  
  //        $arr = ['GoodsViewSearch' => ['name' => '0092S40090',
  //            'brand' => 'BOSCH']];
bd74917c   Administrator   VItaliy 21.12.2015
49
  
8f02e664   Mihail   add multisort fun...
50
          if (empty(Yii::$app->user->identity)) {
ec825628   Mihail   temp commit
51
              $margin_id = 1;
8f02e664   Mihail   add multisort fun...
52
          } else {
ec825628   Mihail   temp commit
53
54
              $margin_id = Yii::$app->user->identity->margin_id;
          }
1412c23a   Mihail   add crocc search ...
55
  
1412c23a   Mihail   add crocc search ...
56
          Yii::$app->session->setFlash('price_currency_id', 1);
ec825628   Mihail   temp commit
57
          Yii::$app->session->setFlash('price_margin_id', $margin_id);
1412c23a   Mihail   add crocc search ...
58
59
  
          $searchModel = new GoodsViewSearch();
8f02e664   Mihail   add multisort fun...
60
          $goods_provider = $searchModel->search($arr, $sort_params_or);
f0a8acb5   Mihail   add sort function...
61
  
8f02e664   Mihail   add multisort fun...
62
          $crosses_provider = $searchModel->searchCrosses($arr, $sort_params_cross);
f0a8acb5   Mihail   add sort function...
63
  
b13c67c3   Mihail   output price in g...
64
65
66
          // для заголовка таблицы (карточка товара)
          $detailsModel = GoodsView::findOne($arr_values);
  
8f02e664   Mihail   add multisort fun...
67
          return $this->render('index', [
1412c23a   Mihail   add crocc search ...
68
              'goods_data_provider' => $goods_provider,
df73f762   Mihail   add crocc search ...
69
              'crosses_data_provider' => $crosses_provider,
b13c67c3   Mihail   output price in g...
70
              'detailsModel' => $detailsModel,
f0a8acb5   Mihail   add sort function...
71
          ]);
62dba7d8   Mihail   add goods control...
72
73
      }
  
8f02e664   Mihail   add multisort fun...
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
106
107
108
109
110
111
112
113
114
      /**
       * @param $params - массив параметров для сортировки
       * @param $prefix - строка, перфикс таблицы сортировки (_or / _cross )
       * @return массив - итоговый массив с параемтрами для сортировки который подставляется в запрос
       */
      protected function getSortParams($params, $prefix)
      {
          $default_sort_params = ['price' => SORT_DESC];
          $sort_params = [];
  
          if ( empty( $params['sort'] ) ) {
              // нет параметров - сортируем по цене по убыванию
              $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 ) ) {
                  // если так и ненашли подходящих параметров, значит сортируем другую таблицу
                  // а для этой вытащим из кеша или дефолтная сортировка
                  if ( Yii::$app->cache->exists( "sort_{$prefix}" ) ) {
                      $sort_params = Yii::$app->cache->get( "sort_{$prefix}" );
                  } else {
                      $sort_params = $default_sort_params;
                  }
              } else {
                  Yii::$app->cache->set( "sort_{$prefix}", $sort_params, 300 );
              }
          }
  
          return $sort_params;
      }
62dba7d8   Mihail   add goods control...
115
  
62dba7d8   Mihail   add goods control...
116
  }