3 votes

CakePHP : Comment acheminer les paramètres de tri de la pagination ?

J'essaie donc de mettre en page des éléments sur ma page d'index en utilisant le paginateur et les routes personnalisées. Tout passe par l'action index, mais celle-ci peut afficher les éléments triés par les plus récents, les votes, les actifs ou les vues. Pour l'instant, l'URL ressemble à ceci :

items/index/sort:created/direction:desc

Et si vous n'êtes pas sur la page 1, ça ressemble à ça :

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

J'aimerais utiliser le routeur pour que ça ressemble à ça :

newest/

Je peux aller aussi loin avec cette route :

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

Cependant, les liens du pager ne suivent pas l'itinéraire. Dès que vous cliquez sur page suivante, vous revenez à.. :

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

Comment puis-je faire en sorte que cela suive le routeur et me donne ce que je veux ? Gardez à l'esprit que tout cela provient de la même action de contrôleur, j'essaie d'acheminer les paramètres de tri de la pagination essentiellement.

3voto

Nik Chankov Points 5169

Pour moi, votre code fonctionne (j'ai testé votre exemple). Avez-vous fait quelque chose d'inhabituel avec l'aide du paginateur ?

Voici mes itinéraires :

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

Et voici les urls que j'ai vues lorsque j'ai trié par colonne d'âge :

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

Et le plus vieux :

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

Et cela fonctionne avec tous les liens du pager (first, prev, 1,2,3 next, last).

0voto

DavidYell Points 6500

Vous voulez inclure les args passés je pense. Quelque chose comme ça,

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

Vérifiez ici aussi, http://book.cakephp.org/view/46/Routes-Configuration

Sinon, j'étendrais l'aide HTML pour créer ma propre méthode de lien qui lirait les paramètres de l'url et créerait un lien en conséquence. Vous pourriez alors gérer vos propres liens à partir de votre propre helper :)

N'oubliez pas que vous devez avoir des contrôles dans l'action d'indexation pour faire face à ce problème. Personnellement, je serais beaucoup plus enclin à créer une action dans le contrôleur pour chacun de ces éléments.

function newest(){

}
function votes(){

}
function active(){

}

//etc

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X