#php #cakephp #pagination #cakephp-1.3
#php #cakephp #разбивка на страницы #cakephp-1.3
Вопрос:
Я хотел бы использовать встроенную разбивку на страницы в CakePHP (это потрясающе!). Но — есть ли способ разбить на страницы одно поле?
Пример — если у меня есть статья / рассказ длиной в 10 000 символов — могу ли я разбить ее на две страницы по 5000 символов без необходимости писать свою собственную разбивку на страницы?
Ответ №1:
Разбивка на страницы по умолчанию работает с предложениями 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()
функция. Вам нужно реализовать свою собственную версию, которая возвращает не несколько результатов, а один результат с разбивкой на страницы. Если параметры, которые он использует для этого, и параметры, которые он отправляет обратно в представление, идентичны реализации по умолчанию, остальная логика разбивки на страницы должна работать точно так же.
Комментарии:
1. Я предполагаю, что вы правы, поскольку вы занимались всем остальным… есть ли шанс, что вы могли бы разбить это немного подробнее? Я довольно разбираюсь в PHP, но это мой первый проект Cake, и я чувствую себя перегруженным. Даже если у вас есть какие-либо ссылки, которые помогли бы мне понять, о чем вы говорите — потому что прямо сейчас для меня это звучит как тарабарщина. 🙂 (спасибо за вашу постоянную поддержку / помощь!)
2. @Dave попытался немного разобраться в этом. Надеюсь, вы сможете разобраться с этой информацией и, посмотрев на код обычного
paginate
метода.3. также посмотрите здесь, что переопределить в модели: book.cakephp.org/view/1237/Custom-Query-Pagination