Blame view

frontend/controllers/GoodsController.php 3.72 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
  
8f02e664   Mihail   add multisort fun...
30
31
32
33
34
          $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
35
  
b13c67c3   Mihail   output price in g...
36
          $arr_values = ['name' => $article,
8f02e664   Mihail   add multisort fun...
37
              'brand' => $brand];
b13c67c3   Mihail   output price in g...
38
          $arr = ['GoodsViewSearch' => $arr_values];
5b5bfa85   Administrator   VItaliy 22.12.2015
39
  
8f02e664   Mihail   add multisort fun...
40
          if (empty(Yii::$app->user->identity)) {
ec825628   Mihail   temp commit
41
              $margin_id = 1;
8f02e664   Mihail   add multisort fun...
42
          } else {
ec825628   Mihail   temp commit
43
44
              $margin_id = Yii::$app->user->identity->margin_id;
          }
1412c23a   Mihail   add crocc search ...
45
  
1412c23a   Mihail   add crocc search ...
46
          Yii::$app->session->setFlash('price_currency_id', 1);
ec825628   Mihail   temp commit
47
          Yii::$app->session->setFlash('price_margin_id', $margin_id);
1412c23a   Mihail   add crocc search ...
48
49
  
          $searchModel = new GoodsViewSearch();
8f02e664   Mihail   add multisort fun...
50
          $goods_provider = $searchModel->search($arr, $sort_params_or);
f0a8acb5   Mihail   add sort function...
51
  
8f02e664   Mihail   add multisort fun...
52
          $crosses_provider = $searchModel->searchCrosses($arr, $sort_params_cross);
f0a8acb5   Mihail   add sort function...
53
  
b13c67c3   Mihail   output price in g...
54
55
56
          // для заголовка таблицы (карточка товара)
          $detailsModel = GoodsView::findOne($arr_values);
  
8f02e664   Mihail   add multisort fun...
57
          return $this->render('index', [
1412c23a   Mihail   add crocc search ...
58
              'goods_data_provider' => $goods_provider,
df73f762   Mihail   add crocc search ...
59
              'crosses_data_provider' => $crosses_provider,
b13c67c3   Mihail   output price in g...
60
              'detailsModel' => $detailsModel,
f0a8acb5   Mihail   add sort function...
61
          ]);
62dba7d8   Mihail   add goods control...
62
63
      }
  
8f02e664   Mihail   add multisort fun...
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
      /**
       * @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...
105
  
62dba7d8   Mihail   add goods control...
106
  }