Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-10-2009 10:13:31

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Zend_Paginator et formulaire de recherche

Salut à tous,

Je viens de tester facilement le paginator, et cela marche tres bien :

Code:

// Gestion de la pagination
$paginator = Zend_Paginator::factory($row);
$paginator->setItemCountPerPage(4);
$paginator->setCurrentPageNumber($this->getRequest()->getParam('page'));
$this->view->myRows= $paginator;

Par contre, ces données viennent d'un formulaire (sans Zend_Form). Au début je teste si cela viens d'un POST :

Code:

public function indexAction() {
define ('_NB_MAX_CAR_SEARCH_',3);

    if ($this->_request->isPost()) {

Lors de la pagination (passage à une autre page), je perds les données du POST . A  part récupérer les données du form et des enreg dans un Zend_Registry (mais ce n'est pas tres élégant sad ), je me demande si il y a une astuce "Zend".

Merci
Fabrice

Hors ligne

 

#2 19-10-2009 10:53:19

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: Zend_Paginator et formulaire de recherche

Une petite question : Pourquoi utilises tu du POST ?

Ton formulaire n'est-il pas qu'un filtre sur les données que tu cherches à afficher.
Un GET est alors largement suffisant.

Hors ligne

 

#3 19-10-2009 11:48:56

openaccess
Membre
Date d'inscription: 12-10-2009
Messages: 16

Re: Zend_Paginator et formulaire de recherche

Avec Zend_Registry tu ne peux pas car le registre va être écrasé à chaque changement de page.
La solution la plus propre consiste à utiliser les sessions avec Zend_Session_Namespace

Hors ligne

 

#4 19-10-2009 11:53:41

gcr01
Membre
Date d'inscription: 28-08-2009
Messages: 17

Re: Zend_Paginator et formulaire de recherche

Salut ,

En fait, j'ai trouvé cette fonctionalité, il y a trés peu de temps.

Ton Zend_paginatorControl dans ta page HTML ne te renvoie pas les variable de ta query qu'il y avait dans la première page.
Pour les ajouter, dans ton Controller, envoie une variable que tu recupere dans ta vue.

Ensuite dans ta vue, genre index.phtml, tu dois avoir

Code:

$this->paginationControl($this->unevariabletableaurecord,'Sliding','pagination.phtml);

que j'ai changé avec

Code:

$this->paginationControl($this->unevariabletableaurecord,'Sliding','pagination.phtml,array('search'=$this->search));

Dans ton fichier paginator.phtml, tu change les url

Code:

$this->url(array('page' => $this->first));

par

Code:

$this->url(array('page' => $this->first, 'search'=>$this->search));

Hors ligne

 

#5 19-10-2009 15:02:01

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: Zend_Paginator et formulaire de recherche

bonjour,

Merci pour vos réponses.

Une petite question : Pourquoi utilises tu du POST ?

Pour plusieurs raisons evidentes, on n'utilise pas (plus) le get, trop peu fiable, pas tres propre, etc. Et ce n'est pas le propos d'ailleurs smile

Avec Zend_Registry tu ne peux pas car le registre va être écrasé à chaque changement de page.

Que me racontes-tu là ????, voir ici, mais les sessions sont aussi une bonne idée, j'y avais pensé.

Merci grc01, je vais essayer ta methode.

Fabrice

Hors ligne

 

#6 19-10-2009 15:49:25

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: Zend_Paginator et formulaire de recherche

__fabrice a écrit:

bonjour,

Merci pour vos réponses.

Une petite question : Pourquoi utilises tu du POST ?

Pour plusieurs raisons evidentes, on n'utilise pas (plus) le get, trop peu fiable, pas tres propre, etc. Et ce n'est pas le propos d'ailleurs smile

trop peu fiable ?
Le POST n'est pas plus fiable, légèrement plus dur que le GET à forger ^^ Au lieu de modifier les données dans l'url, on fait un formulaire. La fiabilité est la même quelque soit la donnée reçue de l'exterieur. GET/POST/COOKIE/Database même combat.

Propre pour quoi ?
A part pour le référencement, quoique.

Le gros inconvénient du GET est sa limite du nombre de caractères.

Pour ce qui est du hors de propos, je ne suis pas sûr de comprendre.
Ta problématique est que tu n'arrives pas à garder des données que tu as toi même "masqué" à ton navigateur via POST. Utilisé les sessions déplace le problème sur le serveur alors qu'en GET cela resterai une problématique navigateur. En plus ca te rajoute plus de traitement.

Code:

// en pseudo code
si  POST
  on filtre
sinon si SESSION
  on filtre
// en get
si GET 
   on filtre

En plus, en n'utilisant pas le GET, tu empêches d'utiliser le cache de ton navigateur, proxy ou autre. Mais ca, c'est un autre problème. Si tu caches les données coté serveur, c'est encore le serveur qui trinque ^^

J'aimerai bien que tu m'explicites un peu plus ton raisonnement concernant les problèmes du GET et POST. C'est peut être un peu hors topic mais bon, si je peux dormir moins con ce soir, je suis toujours preneur.

Avec Zend_Registry tu ne peux pas car le registre va être écrasé à chaque changement de page.

Que me racontes-tu là ????, voir ici, mais les sessions sont aussi une bonne idée, j'y avais pensé.

manuel ZF a écrit:

Un regitre est un conteneur pour stocker des objets et des valeurs dans l'espace d'application. En stockant la valeur dans le registre, le même objet est toujours disponible partout dans votre application.

Application est a prendre au terme déroulement du traitement sur la page, il ne faut pas oublié que HTTP est protocole sans état.

manuel ZF a écrit:

Ce mécanisme est une alternative à l'utilisation du stockage global

A comprendre, Zend_Registry <=> $_GLOBAL ou un truc du genre ^^

fais le test suivant :

Code:

include '/path/vers/Zend/Registry.php';
if ( isset($_GET['registre']) )
   Zend_Registry::set('registre', $_GET['registre']) ;
else
  echo Zend_Registry::isRegistered('registre') ? Zend_Registry::get('registre') : 'Donnée absente du registre' ;

et fais les appels suivant :
http://localhost/mapage.php?registre=toto
puis
http://localhost/mapage.php

Hors ligne

 

#7 19-10-2009 16:11:42

openaccess
Membre
Date d'inscription: 12-10-2009
Messages: 16

Re: Zend_Paginator et formulaire de recherche

__fabrice a écrit:

Que me racontes-tu là ????, voir ici

Comme ndesaleux l'a bien expliqué, je ne rajouterais qu'une chose:
Ne pas confondre Zend_Registry et les sessions...
Le comportement et la porté des deux est très différentes.

ensuite entre choisir entre POST et GET pour un formulaire de recherche je suis assez d'accord avec ndesaleux pour utiliser GET, sauf si tu as un grand nombre de variable..... (et encore....)..

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