CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 22-08-2014 23:12:06

trist06
Pitivier
Date d'inscription: 27-02-2013
Messages: 15

Pagination sur recherche cakephp

Bonjour,

La pagination en général ne me pose pas de problème lorsque la vue récupère automatiquement les données cependant j'ai une page de recherche d’utilisateur, une page avec un champs ou l'on tape le nom de l'utilisateur, un bouton recherche et une section résultat. Je souhaitais rajouter une pagination sur les résultats de la recherche. Cela fonctionne uniquement sur la première pages, si je clique sur la page 2 plus aucun résultat n'est affiché.

Code: php

  1.   public function search(){
  2.     if(!empty($this->request->data)){
  3.       $this->Paginator->settings = array(
  4.         'fields' => array('User.id', 'User.username', 'User.mail'),
  5.             'conditions' => array('User.username LIKE' => '%'.$this->request->data['User']['search'].'%'),
  6.             'limit' => 20
  7.         );
  8.         $users = $this->Paginator->paginate('User');     
  9.       $this->set(compact('users'));
  10.     }
  11.   }

Comment puis-je faire pour que les résultats ne disparaissent pas lors du passage sur la deuxième page ?

Merci.

Hors ligne

 

#2 22-08-2014 23:58:37

systeo
Pièce Montée
Date d'inscription: 22-02-2013
Messages: 186

Re: Pagination sur recherche cakephp

il faut stocker les variable de recherche ou le résultat de recherche dans une variable de session. et se baser sur  cette variable pour votre requete.

Hors ligne

 

#3 23-08-2014 00:27:21

trist06
Pitivier
Date d'inscription: 27-02-2013
Messages: 15

Re: Pagination sur recherche cakephp

Est-ce vraiment la seule solution pour transmettre les conditions ? Car en faisant ça si l'on change de page et que l'on revient sur la page de recherche on conserve les résultats de l'ancienne recherche.

Hors ligne

 

#4 24-08-2014 14:53:31

real34
Cooker
Lieu: Toulouse
Date d'inscription: 28-06-2008
Messages: 1810
Site web

Re: Pagination sur recherche cakephp

Bonjour,

En règle générale le pattern est d'utiliser un formulaire de recherche en GET, de manière à ce que les paramètres soient dans l'url.
Lorsque POST est utilisé, il faut d'abord rediriger l'utilisateur vers l'url correspondante : ce pattern se nomme "PRG" (POST - Redirect - GET).

La pagination va alors utiliser ces valeurs pour générer les urls corrects et tu n'auras plus de problème. C'est à mon sens bien plus propre que la session car cela permet de facilement partager les urls et d'avoir plusieurs recherches en parallèle


Expert CakePHP - Co-gérant du studio web Occitech

Hors ligne

 

#5 25-08-2014 00:15:24

systeo
Pièce Montée
Date d'inscription: 22-02-2013
Messages: 186

Re: Pagination sur recherche cakephp

Bonjour @real34;

Le GET ne pose t il pas de problèmes liés à la sécurité?

Merci

Hors ligne

 

#6 25-08-2014 10:23:01

spout
Cooker
Date d'inscription: 18-12-2010
Messages: 1899

Re: Pagination sur recherche cakephp

Le plugin search de CakeDC implémente le PRG: https://github.com/CakeDC/search

Hors ligne

 

#7 25-08-2014 22:03:19

trist06
Pitivier
Date d'inscription: 27-02-2013
Messages: 15

Re: Pagination sur recherche cakephp

Bonsoir, je viens d’implémenter le plugin dans ma solution de recherche, cela fonctionne plutôt bien. J'ai cependant 2 questions sur celui-ci.

Dans mon model j'ai ceci :

Code: php

  1.    public $filterArgs = array(
  2.         'filter' => array('type' => 'like', 'field' => array('User.username'))
  3.     );

J'aimerais rajouter une condition pour que mon User.username != champs_filter, de manière a ce que quand je cherche un utilisateur je ne récupère par l'utilisateur qui fait la recherche.

Ensuite lorsque je vais sur la page qui déclenche l'action ou le plugin est exécuté, je récupère la liste de tout les membres vu qu'aucune donnée n'a été posté/getté. Comment puis-je faire pour que sans qu'il y ai eu de recherche aucune recherche soit effectué ?

Merciii !! big_smile

Hors ligne

 

#8 26-08-2014 15:07:54

real34
Cooker
Lieu: Toulouse
Date d'inscription: 28-06-2008
Messages: 1810
Site web

Re: Pagination sur recherche cakephp

Bonjour,

Il suffit d'ajouter la condition 'User.id !=' => $this->Auth->user('id') aux conditions générées par le search plugin (parseCriteria)


Expert CakePHP - Co-gérant du studio web Occitech

Hors ligne

 

Pied de page des forums

Propuls� par FluxBB
Traduction par FluxBB.fr