Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-09-2007 15:33:51

frederic
Membre
Date d'inscription: 04-09-2007
Messages: 31

mettre en place une pagination

Bonjour,

je suis tout à fait débutant sur le Zend-framework et ai quelques connaissances en Php et en POO.
J'ai suvi quelques tutoriaux pour m'initier à ce framework notamment sur le modèle MVC que je ne connaissais pas. Aussi, j'ai suivi le tutoriel album, mais j'aimerai y ajouter une pagination pour n'afficher qu'un certain nombre d'enregistrements et inclure une navigation simple.

J'aimerai avoir votre avis sur ce sujet, et peut-être pourriez-vous me renseigner sur l'existence d'autres tutoriaux qui concerneraient cette mise en place. J'ai fait quelques recherches sur le web et ai trouvé quelques résultats intéressants mais pour mon niveau me paraissent pour le moment pas tout à fait compréhensible et difficile à implémenter.

Merci pour vos suggestions et conseils. Cdlt. Frédéric

Hors ligne

 

#2 04-09-2007 17:26:27

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: mettre en place une pagination

Quelques  Tutoriaux

http://www.phpnoise.com/tutorials/9/1
http://www.symfony-project.com/askeet/5
http://bakery.cakephp.org/articles/view … pear-pager
http://www.alberton.info/pear_pager_tut … write.html
http://antoine-herault.developpez.com/t … ue-en-php/


Il te faut une classe Pager pour calculer l’offset  de l’enregistrement à partir du quel on veut récupérer les données.

Il faut rajouter une methode Zend_Db_Table :: fetchCount() pour obtenir le nombre total d’enregistrements.

Il te faut un view helper pour afficher la pagination.

Cas d'utilisation avec  Mmx_Data_Pager (une classe que j'ai développé mais pas encore eu le temps de finaliser )

Code:

/* On connait :
 * - le nombre total d'enregistrement
 * - le nombre d'enregistrement par page
 * - la page courante
 *
 * On veut l'offset : l
 *  Il est fournit par Mmx_Data_Pager::getOffset()
 */
$currentPage = $this->getRequest()->getParam('page');
$currentPage = isset($currentPage) ? $currentPage : 1;
$rowPerPage = 3;
$totalRows = $post->fetchCount();

$pager = new Mmx_Data_Pager($totalRows, $rowPerPage, $currentPage);
$this->view->posts = $post->fetchAll(null, null, $rowPerPage,  $pager->getOffset());

// Render the view
$this->view->paginationParams = array('urlbase'' => '/module/controller/action/page/@@page@@' );
$this->view->pager = $pager;

Dans la vue, utilisation du helper

Code:

echo $this->paginate($this->pager, $this->paginationParams);

Hors ligne

 

#3 04-09-2007 17:57:53

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: mettre en place une pagination

Ou encore utiliser le limitePage de Zend_Db smile

Code:

        $select->from('annonce a', 'a.id, a.ville, a.type_bien, a.prix, a.ref_agence, a.type_transaction')
                ->join('annonce_data ad', 'ad.annonce_id = a.id', 'LEFT(ad.content,100) AS content')
                ->where('a.type_bien = ? ', $type)
                ->where('ad.language = ? ', $_SESSION['language'])
                ->group('a.id')
                ->order('a.prix DESC')
                ->limitPage($page, $rowPerPage);

Société : Direct Info Service

Hors ligne

 

#4 04-09-2007 18:16:12

frederic
Membre
Date d'inscription: 04-09-2007
Messages: 31

Re: mettre en place une pagination

Merci de vos réponses, j'ai essayé de regarder cette solution  :

http://fashion.hosmoz.net/post/2007/07/ … n-reloaded

mais je bloque un peu, étant tout à fait novice sur ce framework et dans le développement en général. J'ai récupéré tous les fichiers via le SVN, mais j'ai quelques soucis. Avez-vous déjà testé ce code ?

Autrement, je vais regarder les différents liens que vous m'avez donné.
Concernant le limitPage de Zend_Db, je ne sais pas trop où l'appeler. Dans le controller ?
je vous donne en exemple une partie du code de mon controller :

Code:

public function indexAction() {    
        $this->view->title="Mes albums";
        $album = new Album();
        $this->view->albums = $album->fetchAll(); 
    }

Merci mille fois pour votre aide !
a+ Frédéric

Hors ligne

 

#5 05-09-2007 10:31:23

frederic
Membre
Date d'inscription: 04-09-2007
Messages: 31

Re: mettre en place une pagination

Re-bonjour,

je ne sais pas comment créer le helper paginate qui me permettrait de l'utiliser dans la vue ? Désolé mais pour le moment, ma connaissance du framework est pour le moment très faible. Aussi, où pourrais trouver de l'info sur ce que signifie ces helpers ? Est-ce des templates ?

Merci de votre aide.

Dernière modification par frederic (05-09-2007 10:39:03)

Hors ligne

 

#6 05-09-2007 11:17:48

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: mettre en place une pagination

Si tu débute tu devrais prendre le temps de lire la doc et quelques tutoriaux ce ne serra pas du temps de perdu smile


La doc sur les view helpers : http://framework.zend.com/manual/en/zen … lpers.html

Mon helper pour la pagination ressemble à ceci

Code:

class Mmx_View_Helper_Paginate 
   { 
       function paginate(Mmx_Data_Pager $pager, $parametres) 
       {
           $pagination = new Mmx_Data_Pager_Render($pager, $parametres);
           return $pagination->render();
       } 
   }

Pour la classe Mmx_Data_Pager_Render je me suis inspiré de la présentation de Matthew Weier O'Phinney où il explique comment créer une application CRUD avec le framework.

http://weierophinney.net/matthew/archiv … tions.html
http://weierophinney.net/matthew/upload … tation.pdf

Dernière modification par 2mx (05-09-2007 11:21:37)

Hors ligne

 

#7 05-09-2007 11:28:15

frederic
Membre
Date d'inscription: 04-09-2007
Messages: 31

Re: mettre en place une pagination

Merci de ta réponse j'ai effectivement trouvé cette doc concernant les helpers,
http://framework.zend.com/manual/en/zen … lpers.html

Donc , je creuse.

Mille fois merci de ta réponse !

Hors ligne

 

#8 05-09-2007 12:16:37

frederic
Membre
Date d'inscription: 04-09-2007
Messages: 31

Re: mettre en place une pagination

Re salut,

Voilà j'ai réussit à faire ma pagination mais je ne pense avoir suivit la meilleure façon de faire :

je vous présente ma classe View_Helper_Paginate

Code:

public function paginate($pager, $parametres) 
       {
           $offset = $pager->offset;
           $limit  = $pager->limit;
           $page   = $pager->page;
           $numPages = $pager->numPages;
           
           if ($page == 1) echo "Précédent"; 
           else  echo "<a href=\"?page=" . ($page - 1) . "\">Précédent</a>";
           
           for ($i = 1; $i <= $numPages; $i++) { 
           
                echo " | "; 
                if ($i == $page) echo "Page $i"; 
                else echo "<a href=\"?page=$i\">Page $i</a>";
                
            }

            if ($page == $numPages) echo "Suivant"; 
            else echo " | <a href=\"?page=" . ($page + 1) . "\">Suivant</a>";
    
                
       }

Pouvez-vous me dire ce que vous en pensez et les choses à faire pour bien suivre le framework.

Hors ligne

 

#9 23-05-2008 12:31:25

bertra
Membre
Date d'inscription: 06-02-2008
Messages: 130

Re: mettre en place une pagination

Bonjour,
Concernant la pagination, je vais m'en occuper sous peu.
Je fais juste remonter ce post assez ancien afin de savoir s'il y a d'autres retours d'expérience depuis smile

Hors ligne

 

#10 23-05-2008 12:37:13

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: mettre en place une pagination

Moi je me suis inspiré de phpmyadmin. Je fais passer les éléments Where, Orderby, la page courante... en GET.

Hors ligne

 

#11 23-05-2008 16:00:16

bertra
Membre
Date d'inscription: 06-02-2008
Messages: 130

Re: mettre en place une pagination

Je me suis inspiré de ce tuto :
http://antoine-herault.developpez.com/t … ue-en-php/
J'ai un formulaire permettant de saisir des critères de recherche dans un tableau.
Ce tableau est posté au contrôleur qui prépare la requête en fonction de ces critères
Dans ma vue j'ai ça :

Code:

<?php for($i=1; $i<=$this->nombreDePages; $i++):
          if($i==$this->pageActuelle){
             echo ' [ '.$i.' ] '; 
         }else{
               echo ' <a href="/dossier/index/page/'.$i.'">'.$i.'</a> ';     
         }
     endfor;
?>

Ca me permet de rediriger sur les pages choisies, je remplis ensuite mon LIMIT en récupérant le paramètre "page".
Cependant, je ne sais pas comment récupérer dans mon contrôleur les critères de recherche saisis dans le formulaire du début.
Comment faire ?
Je ne sais pas si je suis clair ?

Dernière modification par bertra (23-05-2008 16:04:27)

Hors ligne

 

#12 24-05-2008 07:52:32

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: mettre en place une pagination

Je ne comprends pas ce que tu veux dire par

les critères de recherche saisis dans le formulaire du début

Quoi qu'il en soit, tu ne peux pas mettre les critères dans ton tableau ? Sinon tu peux toujours créer une classe adapté et non un tableau, tu pourras stocker toutes les infos nécessaires proprement non ?

Moi je passe par le GET parce que les informations précédentes reste dans l'URL, au départ j'ai eu la flème de faire qq chose plus complexe.

Hors ligne

 

#13 24-05-2008 10:39:55

bertra
Membre
Date d'inscription: 06-02-2008
Messages: 130

Re: mettre en place une pagination

whitespirit a écrit:

Je ne comprends pas ce que tu veux dire par

les critères de recherche saisis dans le formulaire du début

j'ai ouvert une nouvelle discussion : http://www.z-f.fr/forum/viewtopic.php?pid=7410

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages