не хочу отвечать на мой собственный вопрос ... но это может сэкономить время другому разработчику =) (это все о получении хорошей кармы)
я обнаружил, что вы можете передать массив "options" в paginator, и внутри этого массива вы можете указать url (массив: controller, action и параметров), который paginator будет использовать для создания ссылок. поэтому вы должны написать все возможные маршруты в файле rout.php. В основном есть 3 варианта:
- когда "страница" не определена
Например:
http://localhost/author/John-Doe
paginator будет считать, что это первая страница. Соответствующий маршрут будет:
Router::connect('/author/:name', array( 'controller' => 'books','action' => 'filteredByAuthor'),array('pass'=>array('name'),'name'=>'[a-zA-Z\-]+'));
- когда "страница" определена
Например:
http://localhost/author/John-Doe/3 (page 3)
Маршрут будет:
Router::connect('/author/:name/:page', array( 'controller' => 'books','action' => 'filteredByAuthor'),array('pass'=>array('name','page'),'name'=>'[a-zA-Z\-]+','page'=>'[0-9]+'));
- наконец, когда страница и сортировка определены в URL (щелкнув по ссылкам sort , созданным paginator).
Например:
http://localhost/author/John-Doe/3/title/desc (John Doe's books ordered desc by title)
Маршрут:
Router::connect('/author/:name/:page/:sort/:direction', array( 'controller' => 'books','action' => 'filteredByAuthor'),
array('pass'=>array('name','page','sort','direction'),
'name'=>"[a-zA-Z\-]+",
'page'=>'[0-9]*',
'sort'=>'[a-zA-Z\.]+',
'direction'=>'[a-z]+',
));
в представлении вы должны сбросить URL, созданный paginator, потому что вы будете указывать свой собственный массив URL на контроллере:
Контроллер:
function filteredByAuthor($name = null,$page = null , $sort = null , $direction = null){
$option_url = array('controller'=>'books','action'=>'filteredByAuthor','name'=>$name);
if($sort){
$this->passedArgs['sort'] = $sort;
$options_url['sort'] = $sort;
}
if($direction){
$this->passedArgs['direction'] = $direction;
$options_url['direction'] = $direction;
}
Отправьте переменную $options_url
в представление с помощью set () ... так что в представлении вам нужно сделать это:
Вид:
unset($this->Paginator->options['url']);
echo $this->Paginator->prev(__('« Précédente', true), array('url'=>$options_url), null, array('class'=>'disabled'));
echo $this->Paginator->numbers(array('separator'=>'','url'=>$options_url));
echo $this->Paginator->next(__('Suivante »', true), array('url'=>$options_url), null, array('class' => 'disabled'));
Теперь в ссылках сортировки вам нужно сбросить переменные 'sort' и 'direction'. Мы уже использовали их для создания ссылок на paginator, но если мы не удалим их, то функция sort () будет использовать их ... и мы не сможем отсортировать =)
$options_sort = $options_url;
unset($options_sort['direction']);
unset($options_sort['sort']);
echo $this->Paginator->sort('Produit <span> </span>', 'title',array('escape'=>false,'url'=>$options_sort));
надеюсь, это поможет =)