2010-10-07 18 views
1


J'ai une page de liste d'utilisateurs où le résultat peut être modifié en utilisant des sélections de genre, ville et pays (dropdowns), et cela fonctionne parfaitement bien. Comme nous avons beaucoup d'utilisateurs, j'ai besoin de mettre une pagination, et voici la "bizarre" partie (Je suis sûr que ce n'est pas bizarre mais je ne peux pas comprendre d'où vient le problème): quand je choisis un genre, la pagination fonctionne bien et je peux naviguer entre toutes les pages, mais si je choisis une ville par exemple (en plus ou non du genre), les numéros de pagination sont corrects mais j'ai perdu la restriction de la ville page.Weird CakePHP (1.3) Comportement de composant de pagination


J'ai donc essayé de comprendre ce qui arrivait à mes filtres en affichant le $this->data. Et il dit exactement la même chose qu'avant: travailler parfaitement bien avec le genre ($this->data['users']['gender'] passer en revue toutes les pages de pagination), mais les autres paramètres ont juste été perdus une fois que j'ai essayé de m'en aller. Le fait est qu'il n'y a aucune différence entre le filtre gender et les autres, soit du côté du contrôleur ou dans la vue (les deux sont des entrées de sélection).

Sur un plan plus technique, voici un peu de mon code:

//In the controller function 
    if (!empty($this->data['users']['gender'])) { 
     $conditions['gender'] = $this->data['users']['gender']; 
    } 
    if (!empty($this->data['users']['country_id'])) { 
     $conditions['city_id'] = 
      $this->User->City->find(
       'list', 
       array(
        'conditions' => array(
         'country_id' => $this->data['users']['country_id']), 
        'fields' => 'City.id')); 
    } 
    if (!empty($this->data['users']['city_id'])) { 
     if($this->data['users']['city_id'] == 'NULL') { 
      $conditions['city_id IS ?'] = NULL; 
     } else { 
      $conditions['city_id'] = $this->data['users']['city_id']; 
     } 
    } 
    //debug($this->data); 

    $options = array(
     'limit' => 20, 
     'order' => 'User.lastname ASC', 
     'conditions' => $conditions); 
    $this->paginate = $options; 
    $users = $this->paginate('User'); 


Comme vous pouvez le voir, j'utiliser la fonction paginate() dans le contrôleur. Je ne comprends toujours pas pourquoi il travaille pour le filtre de genre et non le reste


Cheers,
Nicolas.

Répondre

1

Votre problème ne réside pas dans le contrôleur, mais dans l'assistant. Lorsque vous passez la variable pour la première fois, cela fonctionne, car il y a une variable affichée, mais la pagination ne gère pas ces variables à moins que vous ne les transmettiez à l'assistant de pagination.

Lire this article et à mon avis, il est préférable de passer le genre, et la ville via _GET.

+0

Salut, j'ai lu l'article en entier et après quelques fois passé à faire tout fonctionner, ça fonctionne comme un charme avec votre suggestion _GET aussi bien. Merci. – Nicolas