Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-10-2009 12:35:56

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

[Zend_Paginator] Utiliser juste LIMIT sans COUNT.

Bonjour,

Pour faire simple,
voici la fonction de mon modele me selectionnant les news :

Code:

public function getNews()
{
   $select = $this->select();
   $select()->where('publié = ?', 1);

   return $select;
}

mettons 2 actions :

Code:

// Retourne toutes les news et les pagine.
public function retournertoutAction()
{ 
   $news = $model->getNews()
   $page = Zend_Paginator::factory($news);
   $page->setDefaultItemCountPerPage(10);

   $this->view->news = $page;
}

// Retourne seulement 10 news, et pas plus.
public function retourner10newsAction()
{ 
   $news = $model->getNews()
   $page = Zend_Paginator::factory($news);
   $page->setItemCountPerPage(10);

   $this->view->news = $page;
}

Pour pouvoir utiliser de manière flexible le Paginator avec les requêtes SQL, j'ai fait en sorte que toutes mes classes Db ou Models retournent l'objet select (j'ai pas trouvé d'autres moyens), pour ensuite le passer à un instance du Zend_Paginator.
Dans l'action retournertoutAction(), pas de probleme.
Dans l'action retourner10newsAction(), la seule différence c'est que je n'affiche pas le paginateur pour naviguer entre les pages.

Bref, je n'ai pas trouvé de manière plus "élégante". Si je joue avec limit(), il faudrait que je l'applique dans le controleur, mais j'appelle également l'objet table() pour pouvoir fetchAll() sur le select().

Enfin ça me conviendrait comme ça... mais le probleme c'est que je me retrouve avec la requête COUNT du paginateur, qui est inutile dans le cas où je veux seulement afficher les 10 news.


Enfin voila, j'espère que vous m'avez capté. smile
Merci d'avance pour votre aide.

Hors ligne

 

#2 26-10-2009 09:11:57

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Zend_Paginator] Utiliser juste LIMIT sans COUNT.

N'oublie pas que tu n'es pas obligé d'utiliser un "DbSelect" comme adaptateur. Tu peux utiliser aussi "Array"

Autre solution :
Je suppose que tu utilises un foreach dans ta vue. Ca veut donc dire que tu n'es pas obligé de passé un objet "Zend_Paginator" mais n'importe quel objet qui implémente IteratorAggregate (un tableau par exemple)


----
Gruiiik !

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