CakePHP 2.x Paginaton: помните, на какой странице вы находитесь
Я работаю в интернет-магазине. В представлении категорий мы загружаем продукты с помощью jquery, потому что пользователь может фильтровать их. Это прекрасно работает.
Затем мы попытались сохранить страницу, на которой был пользователь (в разбивке по страницам), чтобы, если он просматривает продукт и возвращается к просмотру категорий, он начинает с той страницы, на которой он ранее находился. Например, я на 3-й странице пагинации, просматриваю продукт, нажимаю кнопку возврата в браузере и продолжаю на 3-й странице вместо 1 (это поведение по умолчанию cakephp). Мы сохраняем номер страницы в сеансе, который, насколько мы видим, прекрасно работает. Затем мы читаем этот pagenumber из сеанса и используем его в нашем $this->paginate как 'page' => $pagenumber. Это тоже работает.
Но есть одна странная проблема. Когда вы начинаете со страницы 2 или 3 (читай: любая страница больше 1, но на данный момент у нас только 3 страницы), вы не можете вернуться на страницу 1. Переключение на страницу 2 или 3 работает отлично, но вы можете не переходите на страницу 1. Если вы нажмете на нее, ничего не произойдет, она отправит сетевой запрос в инспекторе элементов хрома, так что что-то происходит в фоновом режиме. Если мы вручную установим для страницы значение "page" => 1. Это работает, вы можете переключиться на все 3 страницы.
Надеюсь, вы понимаете мою проблему, я постарался объяснить это как можно лучше. (Извините, если мой английский не слишком хорош, я старался изо всех сил).
Мой код (я сделал его максимально коротким, без полей en joins): в контроллере
$page_number = $this->Session->read('Pagination.currentpage');
$this->paginate = array(
'conditions' => array(
'Product.status' => 'active',
'Product.visibility' => 1,
'Product.hidden_on_site' => 0,
),
'order' => 'Product.name ASC',
'limit' => 20,
'recursive' => 2,
'page' => $page_number,
);
$ Page_number работает, он выводит нужную страницу. Но это создает проблему: вы не можете получить страницу 1, если находитесь на странице 2 или 3. Если мы вручную установим "page" => 1, это сработает.
Я надеюсь, что у вас есть подсказка или решение, которое работает по-другому...
1 ответ
Компонент CakePHP 2.x PaginationRecall работает очень хорошо для этой цели. Я использую его в нескольких своих проектах.
Автор - член СО thanassis.