Добрый вечер.
Есть сайт объявлений.
Надо организовать вывод объявлений с двумя разными представлениями(списком, плиткой). Выбор представления должен осуществляться по нажатию на соответствующую ссылку.
Сейчас есть такой код
// ССЫЛКИ ДЛЯ ВЫБОРА ФОРМАТА ВЫВОДА.
<?= Html::a('List', ['car/view-mode'], ['data' => ['view-mode' => 1]]) ?>
<?= Html::a('Gallery', ['car/view-mode'], ['data' => ['view-mode' => 2]]) ?>
// ДЕЙСТВИЕ В КОНТРОЛЛЕРЕ УСТАНАВЛИВАЕТ COOKIE
// кроме этого действия в контроллере есть ещё одно действие actionSearchCar(), которое осуществляет поиск и вывод объявлений.
//но его использовать очень не удобно,
// много кода, куча условий, легко поломать, тяжело исправить.
<?php
public function actionViewMode($id)
{
if(Yii::$app->request->isAjax){
$viewModeCookie = Yii::$app->response->cookies;
$viewModeCookie->add(new \yii\web\Cookie([
'name' => 'view-mode',
'value' => $id
])
);
$render_file = ($id == 1) ? '_gallery' : '_list';
return $this->renderAjax('_includes/' . $render_file);
}
}
?>
// ВЫВОД ДАННЫХ НА СТРАНИЦЕ
<?php Pjax::begin([
'id' => 'view-mode-pjax',
'timeout' => 10000,
'enablePushState' => false,
'enableReplaceState' => false,
'linkSelector' => '.vmpjax'
]) ?>
<div id="view-mode-pjax">
<!-- ВЫБОР ПОДКЛЮЧАЕМЫХ ФАЙЛОВ ДЛЯ ВЫВОДА ОБЪЯВЛЕНИЙ СПИСКОМ ИЛИ ГАЛЕРЕЕЙ -->
<?php if($viewModeCookieValue == 2){ ?>
<?= $this->render('_includes/_list', ['cars_res' => $cars_res, 'pages' => $pages]) ?>
<?php }elseif ($viewModeCookieValue == 1){ ?>
<?= $this->render('_includes/_gallery', ['cars_res' => $cars_res, 'pages' => $pages]) ?>
<?php } ?>
</div>
<?php Pjax::end(); ?>
В зависимости от значения cookie должен подключаться определённый вид.
Получается, что мне необходимо в renderAjax() передать массив get параметров. Но этот массив может быть внушительных размеров. В него попадают данные по региону, городу, марке, модели, цене, пробегу, цвету, году выпуска и так далее и тому подобное.
Поэтому возник вопрос, правильно ли будет передать через ссылки этот get массив, в действии контроллера вытянуть нужные данные из базы и передать в view?
Изначально, при первом посещении страницы, данные уже есть. Выводятся с учётом того, что пользователь ввёл в форму поиска. И ради того, чтобы изменить вид необходимо опять тягать весь набор необходимых данных? Или есть какой-то более компактный способ?
p.s. Так же надо организовать вывод по выбранному количеству объявлений на странице. Задачи похожие, так что думаю можно будет использовать решения для двух задач? Или я ошибаюсь?
p.s.s.
Ссылка на весь контроллер. Нужные действия actionViewMode() и actionSearchCar(). Код не мой, достался в наследство, так что сильно не ругайте)))