Я использую paginator cakephp 1.3, он работает нормально, за исключением этого:
если у меня есть 5 страниц, доступ по этому виду URL
Я получу последнюю страницу, но если я получу доступ к
Я также получаю прошлой стр. Но я не хочу получать какие-либо значения, так как это недопустимая страница.
Моя конфигурация такая:
var $paginate = array(
'Post' => array(
'limit' => 10,
'order' => array('Post.id' => 'desc')
)
);
$posts = $this->paginate('Post');
Ну вот к сожалению как это работает до CakePHP 2.3, и он похоронен в середине Controller::paginate()
метод:
https://github.com/cakephp/cakephp/blob/1.3.20/cake/libs/controller/controller.php#L1214-L1215
// ...
if ($page === 'last' || $page >= $pageCount) {
$options['page'] = $page = $pageCount;
// ...
Так что у вас есть только один вариант, рассчитать количество страниц себя и использовать его для проверки текущей страницы.
Если кто-то заинтересуется этим вопросом для cakephp 1.3, я объясню свое решение на основе ответа @ndm.
Сценарий следующий
Поэтому я решил создать новый PageController, который расширит класс Controller и будет расширен за счет AppController.
В этом файле я поместил метод ВСЕГО paginate и сделал одно простое исправление, прямо перед упоминанием точки @ndm:
if ($page >= $pageCount)
{
return array(); //return empty array, so no rows found.
}
if ($page === 'last') {
$options['page'] = $page = $pageCount;
} elseif (intval($page) < 1) {
$options['page'] = $page = 1;
}
Наконец, я использовал include, чтобы AppController нашел PagerController:
<?php
include("pager_controller.php");
class AppController extends PagerController
{
.....
}
И это сработало отлично, я мог бы обновить версию cakephp 1.3 (опять же, если это когда-нибудь произойдет), не задумываясь, а также не увидев кодировку для уродливого метода paginate.
Надеюсь, что это поможет вам