GoodsController.php
3.72 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
106
<?php
/**
* Created by PhpStorm.
* User: vitaliy
* Date: 08.11.15
* Time: 22:06
*/
namespace frontend\controllers;
use common\components\CustomVarDamp;
use common\models\DetailsCrosses;
use common\models\GoodsView;
use common\models\GoodsViewSearch;
use Yii;
use yii\web\Controller;
use common\models\Details;
class GoodsController extends Controller
{
public $layout = '/internal';
public function actionIndex($name, $id)
{
$arr_name = explode('_', $name);
$brand = $arr_name[0];
$article = $arr_name[1];
$params = Yii::$app->request->getQueryParams();
// получим параметры сортировки из гет запроса
$sort_params_or = $this->getSortParams($params, 'or');
$sort_params_cross = $this->getSortParams($params, 'cross');
$arr_values = ['name' => $article,
'brand' => $brand];
$arr = ['GoodsViewSearch' => $arr_values];
if (empty(Yii::$app->user->identity)) {
$margin_id = 1;
} else {
$margin_id = Yii::$app->user->identity->margin_id;
}
Yii::$app->session->setFlash('price_currency_id', 1);
Yii::$app->session->setFlash('price_margin_id', $margin_id);
$searchModel = new GoodsViewSearch();
$goods_provider = $searchModel->search($arr, $sort_params_or);
$crosses_provider = $searchModel->searchCrosses($arr, $sort_params_cross);
// для заголовка таблицы (карточка товара)
$detailsModel = GoodsView::findOne($arr_values);
return $this->render('index', [
'goods_data_provider' => $goods_provider,
'crosses_data_provider' => $crosses_provider,
'detailsModel' => $detailsModel,
]);
}
/**
* @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;
}
}