Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
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 )
/* 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
echo $this->paginate($this->pager, $this->paginationParams);
Hors ligne
Ou encore utiliser le limitePage de Zend_Db
$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);
Hors ligne
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 :
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
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
Si tu débute tu devrais prendre le temps de lire la doc et quelques tutoriaux ce ne serra pas du temps de perdu
La doc sur les view helpers : http://framework.zend.com/manual/en/zen … lpers.html
Mon helper pour la pagination ressemble à ceci
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
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
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
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
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
Hors ligne
Moi je me suis inspiré de phpmyadmin. Je fais passer les éléments Where, Orderby, la page courante... en GET.
Hors ligne
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 :
<?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
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
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