Bonjour,
Actuellement j essaye de paginer les données , sans succes.
Je perds mes filtres sur la pages 2, 3 ect .

J utilise cakephp 2

Merci d'avance.
voici mon controlleur :

GenproduitsController
<?php
class GenproduitsController extends AppController {
public $helpers = array('Html', 'Form','Js' => array('Jquery'));
public $components = array('Session');

    public function index() {

    if(isset($this->data'Genproduit'])){ 

    $nom= $this->data'Genproduit']'Nom_Produit'];
    $code=$this->data'Genproduit']'Ref_Constructeur'];
    $emplacement=h($this->data'Genproduit']'emplacementrgenpdsuivi']);

 $this->paginate = array(
                                                  'conditions' => array(
                                                                        'Genproduit.Ref_Constructeur LIKE'=>'%'.$code.'%',
                                                                        'Genproduit.Nom_Produit LIKE'=>'%'.$nom.'%',
                                        'Genpdsuivi.Libre2 LIKE'=>'%'.$emplacement.'%'),
                           'limit'=>50

                          );

    $genproduits=$this->paginate('Genproduit');
    $this->set('genproduits',$genproduits);
                                        }

    else {

    $genproduits=$this->paginate('Genproduit');
         }

    $this->set('genproduits',$genproduits);

    }
    }
    ?>

____________________________________________________________________

Voici ma vue index

<body>
<?php

echo $this->Form->create('Genproduit');

echo $this->Form->input('Ref_Constructeur', array ('label'=>'CODE ARTICLE')); 
echo $this->Form->input('Nom_Produit', array ('label'=>'DESIGNATION'));
echo $this->Form->input('emplacementrgenpdsuivi', array ('label'=>'EMPLACEMENT : '));
echo $this->Form->end('RECHERCHER');
?>
<?php

echo $this->Paginator->first('Debut');
echo $this->Paginator->prev('<<' . __(''), array(), null, array('class' => 'prev disabled'));
echo $this->Paginator->numbers();
echo $this->Paginator->next('>>' . __(''), array(), null, array('class' => 'next disabled'));
echo $this->Paginator->last('Fin');
echo '</br>';
echo $this->Paginator->counter();
?>
<table>
    <tr>
        <th><?php echo $this->Paginator->sort('Ref_Constructeur', 'Code article'); ?></th>
        <th><?php echo $this->Paginator->sort('Nom_Produit', 'Désignation'); ?></th>

    <th><?php echo $this->Paginator->sort('Libre2', 'Emplacement'); ?></th>
    <th><?php echo $this->Paginator->sort('Action', 'Action'); ?></th>
    </tr>
       <?php foreach ($genproduits as $genproduit): ?>
    <tr>
        <td><?php echo $genproduit'Genproduit']'Ref_Constructeur']; ?> </td>
        <td><?php echo h($genproduit'Genproduit']'Nom_Produit']); ?> </td>
         <td><?php echo h($genproduit'Genpdsuivi']'Libre2']); ?> </td>
        <td>

<?php 
echo $this->Js->submit('IMPRIMER',array('url' => array(
    'action' => 'fiche1',$genproduit'Genproduit']'Ref_Constructeur'])));
?>

                            </td>
    </tr>
    <?php endforeach; ?>
</table>
<?php echo $this->Js->writeBuffer(); ?>
</body>

19 réponses


Gregory
Réponse acceptée

il faut passer tes conditions ici

$genproduits = $this->paginate('Genproduit',$code);
Gregory
Réponse acceptée

Voici un exemple de ce que je fais et qui marche chez moi

dans le controller

public $paginate = array(
    'paramType' => 'querystring',
    'limit' =>20,
    'order' => 'id DESC',
    'recursive' => 0
);

Dans la fonction qui génère la pagination

public function listing($topic = null){
 $conditions = array();
    if(isset($topic))
        $conditions = array('topic' => $topic);
    $data = $this->Paginate('monModel',$conditions);
    $this->set('actus',$data);
      }

Et j'ai une route qui récupère en paramètre mon topic dans l'url

Router::connect('/mon-url/:topic',array('controller'=>'moncontroller','action'=>'monaction'),array('pass'=> array('topic'), 'topic' =>'[a-z0-9\-]+'));

en espérant que cela t'aide.

babyss
Auteur
Réponse acceptée

super, jy suis arrivé grace a vos reponse , j ai tout passer dans $this->request->params 'pass']

babyss
Auteur

Un petit up.
Je dois finir, mon projet.
Et la je tourne en rond .
Quelqu un pour me mettre sur la voie.
merci d avance

J'ai eu le même problème que toi. J'ai bifurquer pour ne pas être bloquer en faisant une plus grande liste... (ce qui est assez null je l'admets mais moi aussi j'étais pressé).

Avec un peu de recul, on voit que l'on perd nos critère à cause du refresh quand on passe de la page 1 à la page 2.
Je te conseille de faire ta pagination en ajax =).

http://bakery.cakephp.org/articles/daphonz/2008/05/03/easy-ajax-pagination-using-jquery

Bonne continuation

++

babyss
Auteur

Merci pour la piste d'utiliser une pagination en Ajax.

J aurais préféré utiliser la pagination classique.

Je pense que par la pagination classique on peut garder les filtres.

J'ai rien compris mais de rien ^^

je ne suis pas un spécialiste de cake mais je pense que déjà il faut utiliser $this->request->data et non plus $this->data,
ensuite dans ta méthode il testerai avec $this->request->is('post') si j'ai des données postées et si oui je les passerai
à la pagination genre $this->pagination('Genproduit',$conditions)

J'espère que je suis assez clair ;)

babyss
Auteur

Cool, merci .
Je vais essayer de tester cela , ce matin.

babyss
Auteur

bonjour,

meme en utilisant $this->request->data, et la methode $this->request->is('post') , des que je clique sur ma page 2 , le filtre est perdu.

Est ce que tu passes bien les conditions dans la pagination?

et "en mode bourrin" en sauvegardant en session les données que tu veux garder ? as-tu essayé ?

Sinon il n'y a pas un truc du genre $this->request->params'pass'] ou un truc du genre dans lequel retrouver tes infos ?

babyss
Auteur

Merci pour vos réponses .

Se serait super, d avoir un exemple avec un controlleur POST, et une vue index qui contient des champs input de formulaire (qui permet de déterminer les critères de tries de la pagination).

Merci d avance

babyss
Auteur

merci pour ces réponses.

Ce que je n arrive pas c'est garder mes paramètres quand je change de pages.
Concrètement qd je clic sur ma pages 2 , cela devrait garder la conditions que j ai mis dans mon champs input ?
Et la cela le fais pas .

Est ce que tu récupères bien $this->request->data ? et est ce que tu les mets bien dans dans l'array en second paramètre de la pagination?

babyss
Auteur

Je pense que oui , puisque je fais cela :

$code=$this->request->data'Genproduit']'Ref_Constructeur'];

 $this->paginate = array(
                          'conditions' => array(
                                                'Genproduit.Ref_Constructeur LIKE'=>'%'.$code.'%'
                                                )
                         );

    $genproduits=$this->paginate('Genproduit');
    $this->set('genproduits',$genproduits);
                                        }
babyss
Auteur

Merci pour toutes tes réponses, mais meme en passant les conditions a ce moment, la .

Lorsque je clique sur pages 2 du résultat de ma pagination , j ai mes filtres qui partent.

Alors après est ce que l on est obligé de transférer les conditions dans url par les params ect...

Bonjour,
J'ai actuellement exactement le même problème que toi mais je n'arrive pas à faire fonctionner l'application.
En effet je n'arrive pas à passer mes paramètres dans params'pass'].

Je travaille avec Cake 2.3 peut être la solution a changée avec cette version...

Babyss peut tu me donner à voir ton code ? Merci

Je pense que je configure mal mes routes pour récupérer mes parametres.