Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour tout le monde,
Je débute sur Zend 1.x et j'ai un petit problème,dont ci-dessous la description:
mon site contient une page index.phtml et qui inclus un certains page phtml celons des conditions sur un paramétré envoyer via l'URL,
j'ai un seul contrôleur ayant 2 actions indexAction() et rechercheAction().
pour info j'ai créer l'action rechercheAction en mode commande,du coup il ma créer une page nommée recherche.phtml,que je l'inclus dans ma page index.
Avec cette manip,toutes mes paramétrés de vue,sont perdus,et donc je ne peux pas les récupérés;
echo $this->view->liste;
me retourne un vide.
Par contre si j’accède directement a recherche.phtml j'obtiens correctement mes informations.
que doit-je faire dans ce cas ??
merci d'avance pour vos repenses
Dernière modification par lamkadmi (15-01-2013 13:03:17)
Hors ligne
Bonjour,
Je rajout les informations suivantes pour mieux comprendre mon problème
en fait dans ma page index.phtml j'ai mis le code ci-dessous au lieu de include, pour ne pas perdre mes informations de vue
[lang=php] <?php $this->render('contenu.phtml') ; ?>
Les informations sont perdu,par contre si je me redirige directement vers contenu.phtml j'obtiens les bonnes informations.
merci
Dernière modification par lamkadmi (18-01-2013 10:02:11)
Hors ligne
Je ne sais pas si cela est encore d'actualité.
Je ne suis pas sur de comprendre ton problème.
Tu as ton script de vue recherche.phtml dans lequel tu peux récupérer une variable de vue par exemple
<?php echo $this->liste; ?>
Dans ton script de vue tu appelles une vue partielle qui s'appelle contenu.phtml et tu veux récupérer la variable liste de la même façon ? c'est ça ?
Dans ce cas tu peux spécifier cette variable à l'aide de vue partial sous forme de tableau :
<?php echo $this->partial('contenu.phtml', array('liste' => $this->liste)) ; ?>
Ce qui te permet de récupérer ta variables dans la vue partielle contenu.phtml de la même façon :
<?php echo $this->liste; ?>
Ce que tu dois faire pour chaque variables de vue que tu veux récupérer dans ta vue partielle.
Ou sinon tu passes directement toutes les variables à ta vue partielle :
<?php echo $this->partial('contenu.phtml', $this->getVars()) ; ?>
J'espère que cela répond à ta question
p.s : Y'a un truc qui me perturbe dans ton poste c'est ça
echo $this->view->liste;
Si tu mets ça dans ta vue c'est sur que ça sera vide, la bonne syntaxe est :
echo $this->liste;
Hors ligne
Bonsoir
Merci beaucoup pour ton aide,t'as bien compris mon problème,
j'ai essayer avec l'exemple que tu ma fournit est j'ai toujours le même problème,je n'arrive pas a récupérer mes variable de vue.
Je te fournit un extrait de mon code :
Dans mon controlleur Index :
public function rechercheAction() { $this->view->test='TOTO'; $this->_redirect('/'); }
Dans ma page index.phtml :
<div id="contenu"> <?php echo $this->partial('index/recherche.phtml', array('test' => $this->test)) ; ?> </div>
Et en fin dans ma page recherche.phtml j'ai mis :
<?php echo $this->test; ?>
Hors ligne
Bonjour,
C'est un autre problème que tu as la !
Quand tu fais ça :
public function rechercheAction() { $this->view->test='TOTO'; $this->_redirect('/'); }
Tu affectes la valeur 'TOTO' à ta variable de vue pour la vue en cours et pour la boucle de distribution en cours, à savoir, le script de vue recherche.phtml
Ensuite tu fais un redirect, c'est à dire que tu refais en gros une requête HTTP et donc tu engages une nouvelle boucle de distribution dans laquelle la vue est réinstanciée etc...etc...
Donc c'est normal que tu "perdes" ta valeur.
Mets la en session dans ton action Recherche et récupère la dans Index après par exemple.
Après tout dépend de ce que tu souhaites réaliser exactement.
Hors ligne
Bonjour Juch,
En faite j'ai beaucoup d'actions,et c'est embêtant de créer à chaque fois une session mon action index deviendra plus lourde...
Je peut pas reconstruire ma requêtes HTTP ?
Merci d'avance
Hors ligne
Il y a plein de solutions possibles si ton problème était clair, la j'ai du mal à voir ce que tu veux faire exactement ?
Que fait l'action recherche exactement ?
Hors ligne
Ok je t’explique
Je suis entrain de mettre en place un petit site pour les annonce online,pour cela j'ai crée une page index qui inclus un certains pages phtml.
on cliquant sur un menu "rechercher une annonce" par exemple,j'obtiens mon formulaire de recherche(inclus dans la page index.phtml) .
après un clic sur le bouton recherche,je veux obtenir ma liste d'annonces,tout en gardant ma page index incluant une autre page result.phtml.
Pour l'inclusion,à chaque foi quand je clic sur un menu/bouton/lien j'envoie un paramètre nommée "page_id" et après je fait une petit test pour savoir quel page je dois inclure.
j’espère bien expliquer mon souci .
Merci d'avance Juch
Dernière modification par lamkadmi (22-01-2013 17:02:30)
Hors ligne
Plein de solutions possibles pour ton problème de recherche
1/ Tu pourrais utiliser dans ton script de vue index l'aide de vue action() qui te permet de créer une autre boucle de distribution à l'intérieur de la première et qui renderait ta vue partielle result.phtml.
L'inconvénient est que c'est assez gourmand en terme de ressources.
2/ Tu pourrais appeler une aide d'action dédiée qui gérerait la recherche, appelée dans ton action indexAction() et se contenterait de remplir un placeHolder que tu afficherais dans ton script index.phtml si il existe. (méthode la plus élégante pour moi)
3/ Tu pourrais aller fouiner du côté de l'actionStack qui te permet d’exécuter une suite d'action dans la même boucle de dispatching (la bonne parade à l'utilisation abusive de l'aide de vue action()) Mais bon ça serait plus pour apprendre, parce que ça ne correspond pas à ton besoin
4/ Tu pourrais le faire avec un peu d'AJAX et garder ton action rechercheAction en virant le redirect et en créant le script de vue correspondant.
Par exemple :
Ton action rechercheAction() retourne la liste des résultats et les mets en forme dans son propre script de vue recherche.phtml par défaut
Tu désactives donc le plugin layout si jamais tu l'utilises et éventuellement tous les variables de vues qui auraient pu être affectées par des plugins ou autres (ne sait-on jamais )
Dans ton controlleur :
$this->_helper->layout->disableLayout(); $this->view->clearVars(); ... ton traitement .... $this->view->result = ton_tableau_resultat;
Ton action va donc rendre une vue partielle, sans layout que tu iras afficher dans ton script de vue index.phtml.
Niveau JS ça sera un simple truc comme ça :
Si ton bouton recherche est un lien par exemple <a id="recherche">Rechercher</a>
et que tu as un <div id="result"></div> pour afficher tes résultats
$('a#recherche').click(function(e) { e.preventDefault(); e.stopPropagation(); $.ajax({ type: 'POST', url: 'tonURL', dataType: 'html', async: true, data: { data1: value1, data2: value2 }, success: function(data) { if (data && data.length > 0) { $('div#result').html(data); return true; } return false; } }); return true; });
Un truc comme ça quoi mais on sort du cadre du forum.
Hors ligne