CakePHP - есть ли способ использовать встроенную нумерацию страниц для текста статьи? - PullRequest
1 голос
/ 13 апреля 2011

Я хотел бы использовать встроенную нумерацию страниц в CakePHP (это круто!). Но есть ли способ разбить на отдельные поля?

Пример - если у меня есть статья / история длиной 10000 символов - могу ли я разбить ее на две страницы по 5000 символов без необходимости написания собственной нумерации страниц?

1 Ответ

2 голосов
/ 13 апреля 2011

Разбиение по умолчанию работает с предложениями 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().Вам нужно реализовать свою собственную версию, которая не возвращает несколько результатов, но один «разбитый на страницы» результат.Если параметры, которые он использует для этого, и параметры, которые он отправляет обратно в представление, идентичны реализации по умолчанию, остальная часть логики разбиения на страницы должна работать точно так же.

...