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; } }