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.

Другие вопросы по тегам