CakePHP: Как маршрутизировать параметры сортировки Pagination? - PullRequest
3 голосов
/ 05 ноября 2010

Итак, я пытаюсь разместить элементы на моей странице индекса с помощью пагинатора и пользовательских маршрутов. Это все через действие индекса, но действие индекса может показать элементы, отсортированные по самым новым, голосам, активным или просмотрам. Прямо сейчас URL выглядит так:

items/index/sort:created/direction:desc

А если вы не на первой странице, это выглядит так:

items/index/sort:created/direction:desc/page:2

Я бы хотел использовать маршрутизатор, чтобы он выглядел так:

newest/

Я могу продвинуться так далеко по этому маршруту:

  Router::connect(
    '/newest/*',
    array('controller'=>'items', 'action'=>'index', 'sort'=>'created', 'direction'=>'desc')
);

Однако пейджинговые ссылки не следуют по маршруту. Как только вы нажмете следующую страницу, вы вернетесь к:

items/index/sort:created/direction:desc/page:2

Как я могу заставить это следовать за роутером и дать мне то, что я хочу? Имейте в виду, что все это из-за одного действия контроллера, я пытаюсь маршрутизировать параметры сортировки в основном.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

Для меня ваш код работает (я проверял ваш пример). Вы сделали что-то необычное с помощником-пагинатором?

Вот мои маршруты:

Router::connect('/newest/*',array('controller'=>'tests', 'action'=>'index', 'sort'=>'age', 'direction'=>'desc'));
Router::connect('/oldest/*',array('controller'=>'tests', 'action'=>'index', 'sort'=>'age', 'direction'=>'asc'));

А вот URL, которые я видел, когда сортировал по столбцу возраста:

http://localhost/cakephp/1.3.0/newest/page:1
http://localhost/cakephp/1.3.0/newest/page:2
http://localhost/cakephp/1.3.0/newest/page:3

И самое старое:

http://localhost/cakephp/1.3.0/oldest/page:1
http://localhost/cakephp/1.3.0/oldest/page:2
http://localhost/cakephp/1.3.0/oldest/page:3

И он работает со всеми ссылками в пейджере (первая, предыдущая, 1,2,3, следующая, последняя).

0 голосов
/ 05 ноября 2010

Вы хотите включить переданные аргументы, я думаю. Как то так,

$this->params = $this->passedArgs();

Здесь тоже есть чек, http://book.cakephp.org/view/46/Routes-Configuration

В противном случае я бы расширил HTML Helper, чтобы создать собственный метод ссылки, который считывал параметры из URL и создавал ссылку соответственно. Тогда вы можете управлять своими ссылками из вашего собственного помощника:)

Не забывайте, что вам нужно иметь проверки в действии index, чтобы справиться с этим. Лично я был бы гораздо более склонен создать действие в контроллере для каждого из них.

function newest(){

}
function votes(){

}
function active(){

}

//etc
...