@etterej

Как сохранить выбор пагинации в сессию после первого посещения страницы?

Использую пагинацию для отображения списка товаров на своей странице
$myPagination = new Pagination([
            'totalCount' => $countQuery->count(),
            'defaultPageSize' => 12,
        ]);

Добавил виджет для возможности выбирать по сколько товаров выводить на странице - по 12, 24 и 36 соответственно. В самом виджете формирую ссылки таким образом
$urlForTwelveItems = $this->myPagination->createUrl(0, 12);

В представлении вывожу эти ссылки
<a href="<?= $urlForTwelveItems ?>">12</a>
<a href="<?= $urlForTwentyFourItems ?>">24</a>
<a href="<?= $urlForThirtySixItems ?>">36</a>

Меня всё устраивает, но хотелось бы, чтобы если было выбрано по 24 товара, то при повторном посещении этой страницы сразу выводилось по 24, а не 12 по умолчанию. Как в данном случае правильно расставить Yii::$app->session->set() и Yii::$app->session->get() для получения желаемого результата?
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 1
proudmore
@proudmore
По факту выбора количества записей на странице отправляйте ajax запрос на action, который сохранит количество записей на странице для юзера. Можете это запихнуть в сессию, можете в БД.

Если в сессию, то параметр получите таким образом, и нет проблем:
$pageSize = \Yii::$app->session->get('paginationSize', 12);

        $myPagination = new Pagination([
            'totalCount' => $countQuery->count(),
            'defaultPageSize' => $pageSize,
        ]);


И еще..
$urlForTwelveItems = $this->myPagination->createUrl(0, 12); //Не надо так
       //Сделайте хотя бы так
        $sizes = [
            12,
            24,
            36
        ];
        
        $links = [];

        foreach ($sizes as $size){
            $links[] = $myPagination->createUrl(0, $size);
        }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы