Разбиение по умолчанию работает с предложениями SQL LIMIT
, которые работают на уровне записи.Вы должны были бы по крайней мере переопределить метод Controller::paginate
своей пользовательской логикой, чтобы сделать то, что вам нужно (просто создайте function paginate()
в вашем контроллере).Вы должны быть в состоянии повторно использовать PaginatorHelper по крайней мере, устанавливая все правильные параметры, которые он выберет.Попробуйте debug($this->params)
в представлении или посмотрите на стандартную paginate
реализацию , чтобы увидеть, что это за переменные.
Разбивка:
- Для обычного разбиения на страницы вы должны выполнить команду
$result = $this->paginate()
, которая возвращает ваши разбитые на страницы результаты. - Внутренне функция
paginate()
просматривает аргументы URL (/page:42/sort:foobar
и т. Д.), Чтобы выяснить, какие записи следует вернуть. paginate()
вычисляет, какие записи возвращать с небольшим количеством математики, на основе общего количества записей в базе данных, записей на страницу и запрошенного номера страницы. - Также даеткуча информации для представления о том, какие записи были возвращены, текущая страница, на которой мы находимся, сколько страниц и т. д.
- PaginationHelper в представлении считывает эту информацию, чтобы создать правильные ссылки для следующая / предыдущая и номера страниц, каждая из которых ссылается на URL с
/page:xx/sort:yy
параметрами. - Повторите цикл.
То, что вы пытаетесь сделать, этоподключиться к процессу тчто делает функция Controller::paginate()
.Вам нужно реализовать свою собственную версию, которая не возвращает несколько результатов, но один «разбитый на страницы» результат.Если параметры, которые он использует для этого, и параметры, которые он отправляет обратно в представление, идентичны реализации по умолчанию, остальная часть логики разбиения на страницы должна работать точно так же.