Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour, voilà jusqu'à présent, je suis arrivé à évoluer avec Zend Framework avec la doc, mais la je cale.
Mon problème est que la pagination fonctionne à peut prêt sauf qu'elle ne m'affiche pas le nombre de données demandés mais toutes.
Je vais donc montrer les bouts de code qui semblent être les fautifs.
Controller
//Pagination $dbPagi = new Posts(); $selectPagi = $dbPagi->select(); $paginator = Zend_Paginator::factory($selectPagi); //Paramètres pagination $paginator->setCurrentPageNumber($this->_getParam('page', 1)) ->setPageRange(10) ->setItemCountPerPage(4); //Envoi à la vue $this->view->paginator = $paginator;
Model
class Posts extends Zend_Db_Table_Abstract{ protected $_name = 'post_news'; }
En attente de réponse !
Seazer
Dernière modification par Seazer (28-04-2009 20:37:56)
Hors ligne
Qu'est-ce que tu veux dire par TOUTES les données ? Tu peux nous montrer ce qui est sortie au final ? Ha et bienvenue sur le forum
Hors ligne
Merci, je n'hésiterai pas à aider les autres sur les problèmes que j'ai rencontrés et résolut.
Pour l'affichage, il ne me limite pas le nombre d'articles, ici à 4 (setItemCountPerPage(4)). Il me les affiche tous.
Par exemple, il y a 13 articles.
ceil(13/4) = 4 (Il m'affiche bien les 4 pages dans la vue de la pagination, donc le paginator sais combien de pages il faut et combien d'articles sont dans la BDD).
Sauf que chaque page est identique, avec les 13 articles de la BDD. (Il n'en met pas que 4 par page).
Dernière modification par Seazer (25-04-2009 17:18:50)
Hors ligne
Ha oki, maintenant je comprends très bien ton problème...c'est bizarre parce que tu set bien le nombre d'élément à afficher et de toute façon, par défault il est à 10 donc si tu aurais mal fait, il t'aurais afficher quand même 10 éléments maximum...
$paginator->setCurrentPageNumber($this->_getParam('page', 1))
Ya cette ligne qui m'intrigue un peu...peut-être qu'il sait combien de pages il doit te donner mais...peut-être qu'il sait pas à qu'elle page il se trouve et décide de tout afficher en même temps...d'où vient le page en paramètre ? Il est égale à quoi ? Et le 1 c'est le défault ?
Enfin, j'esseye de t'aider mais je n'ai pas eu à utiliser la paginator encore, à venir Mais c'est bon en cherchant ton problème, je le comprends déjà un peu mieux ! (Zend_paginator)
Dernière modification par probitaille (25-04-2009 20:05:30)
Hors ligne
Si, la paginator sait ou il se trouve, si je lui demande la page deux, il me désactive le lien 2.
$this->_getParam('page', 1) C'est le paramètre passé par l'url et si il ne le trouve pas ben il prend pour valeur 1.
Voilà ma route au cas ou :
//Router News Pagi $routeNewsPagi = new Zend_Controller_Router_Route_Regex( 'news/page-(\d+)\.html', array('module' => 'news', 'controller' => 'Index', 'action' => 'index'), array(1 => 'page'), 'news/page-%d.html');
J'ai vu que : setCurrentPageNumber Règle le numéro de la page courante (par défaut à 1).
Il n'a donc pas besoin de la valeur par défaut de $this->_getParam('page'), mais cela ne change rien au problème.
Dernière modification par Seazer (25-04-2009 21:46:16)
Hors ligne
Tu as surement vérifié ce que te sortais $dbPagi->select(); ? Peut-être que le problème est ailleurs mais...peu importe les données que tu devrais récolter avec la bd...sa explique pas le truc de l'affichage de tous les articles dans la même page...
Hors ligne
Oui rien n'explique qu'il fasse l'affichage de tout les articles.
Quand j'aurai le temps, je le referai de zéro pour voir si cela corrige le problème.
Hors ligne
Salut,
Remplace:
$paginator ->setItemCountPerPage(4);
Par:
$paginator ->setItemCountPerPage($this->_getParam('par', 4));
Dans ta vue tu fais bien un foreach sur $paginator ?
Si cela affiche tout, je ne vois pas trop où peut être le problème.
Sinon essaye sans le Route, normalement il n y a pas de raison que cela ne fonctionne pas.
Dernière modification par wiwidumi (26-04-2009 21:34:23)
Hors ligne
Ce que tu me demande revient au même.
Si ($this->_getParam('par') n'existe pas, la variable va prendre pour valeur 4.
Ce qui revient au même de ce que j'ai fais.
Pour ma vue, la voilà :
<?php if ($this->pageCount): ?> <div id="paginationControl"> <!-- Previous page link --> <?php if (isset($this->previous)): ?> <a href="<?php echo $this->url(array('page' => $this->previous)); ?>">< <?php echo "précédent"; ?></a> | <?php else: ?> <span class="disabled">< <?php echo "précédent"; ?></span> | <?php endif; ?> <!-- Numbered page links --> <?php foreach ($this->pagesInRange as $page): ?> <?php if ($page != $this->current): ?> <a href="<?php echo $this->url(array('page' => $page)); ?>"><?php echo $page; ?></a> | <?php else: ?> <span class="current"><?php echo $page; ?></span> | <?php endif; ?> <?php endforeach; ?> <!-- Next page link --> <?php if (isset($this->next)): ?> <a href="<?php echo $this->url(array('page' => $this->next)); ?>"><?php echo "suivant" ?> ></a> <?php else: ?> <span class="disabled"><?php echo "suivant" ?> ></span> <?php endif; ?> </div> <?php endif; ?>
C'est celle de la doc en attendant que cela fonctionne.
Dernière modification par Seazer (27-04-2009 17:15:37)
Hors ligne
Voilà problème résolut.
J'ai en faite réfléchi comment il pouvait me donner tout les résultats.
Car en faite, comme un idiot j'ai fais un foreach du select() et pas du paginator.
Encore merci de votre réactivité ainsi que votre aide.
Hors ligne
Pages: 1