2010-02-03 8 views
0

Disons que j'ai cette page avec Pagination:problème de pagination CakePHP avec suivant/précédent

localhost/fr/utilisateurs/index/page: 1

Je vois les résultats corrects pour la page 1 basée sur la façon dont je J'ai défini le var paginate dans mon contrôleur. Mais quand je clique sur le bouton suivant, l'url change en page: 2 mais les résultats ne changent pas et sont les mêmes que page: 1, même chose pour la page: 3, page: 4 et ainsi de suite ...

Si je trier d'abord une colonne, disons nom d'utilisateur, alors je peux utiliser le lien précédent/suivant sans aucun problème, les données changent sur chaque page.

La seule chose que je peux penser à qui pourrait me causer problème est que j'utiliser une langue dans param mes urls, mais je ne sais pas comment résoudre ce problème ...

J'utilise actuellement gâteau 1.2. 5 J'ai aussi essayé avec la version 1.3 beta avec les mêmes résultats.

Ok, donc voici mon utilisateur code du contrôleur:

var $paginate = array('limit'=>'5'); 
function index() { 
$this->User->recursive = 0; 
$this->set('users', $this->paginate()); 
} 

J'utilise tutoriel teknoid pour la commutation de la langue:

URL-based language switching...

langue param ajoutée par app_helper.php

function url($url = null, $full = false) { 
    if(!isset($url['language']) && isset($this->params['language'])) { 
     $url['language'] = $this->params['language']; 
    }  

    return parent::url($url, $full); 
} 

et le changement de langue effectué en utilisant une méthode dans le app_controller.php:

function _setLanguage() { 

    if ($this->Cookie->read('lang') && !$this->Session->check('Config.language')) { 
     $this->Session->write('Config.language', $this->Cookie->read('lang')); 
    } 
    else if (isset($this->params['language']) && ($this->params['language'] 
     != $this->Session->read('Config.language'))) {  

     $this->Session->write('Config.language', $this->params['language']); 
     $this->Cookie->write('lang', $this->params['language'], null, '20 days'); 
    } 
} 

SOLUTION:

Après avoir configuré le site patron de Yahoo et de remarquer que la pagination fonctionnait parfaitement, je regardais plus attentivement mon code et a trouvé le problème était dans ma routes.php .

J'ai eu ceci:

Router::connect('/news', array('controller'=>'news', 'action'=>'index')); 

Router::connect('/:language/news', array('controller'=>'news', 'action'=>'index'), array('language'=>'[a-z]{2}')); 

je l'ai modifié comme celui-ci de prendre toutes les params:

Router::connect('/news/*', etc... 

Router::connect('/:language/news/*', etc... 
+0

Un peu de code aiderait, en particulier l'action 'UsersController :: index()', et peut-être quelques détails sur la façon dont vous faites le paramètre de langue. – deceze

Répondre

0

Montrez-nous le code du contrôleur, le code d'affichage et quelques exemples urls. J'ai eu des problèmes similaires dans le passé, mais personne ne peut vous aider si vous ne nous donnez pas plus d'informations.

0
Even i faced the similar problem 

**Solution** 

I closely checked all my code and after trial and errors i was able to find the solution 

First the cause: I was doing a order by 
$this->paginate = array(
      'limit' => 20, 
      'order' => array('Test.aws_id' => 'asc'), 
      'conditions' => $condition_options 
     ); 

The above code was returning first page result across all pages. 

After a while i closely checked everything and the result set. 
The resultset was returning me **capital AWS_ID** and i was doing my ordering on aws_id after changing it to caps my code was working 

Hope this helps someone