Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour a tous,
j'ai une page ou j'ai une liste. Lorsque je clique sur un élément de la liste, je voudrais que la valeur de cet élément soit envoyer vers un autre controleur pour que sur cette nouvelle page on affiche la valeur envoyée.
Comment dois-je faire?
J'ai essayé en faisant Zend_registry::set('test', $valeur) dans mon 1er controleur
et dans mon second Zend_registry::get('test') mais sur la 2eme page, j'ai l'erreur suivante:
Fatal error: Uncaught exception 'Zend_Exception' with message 'No entry is registered for key 'test'
Peut etre que je m'y prend mal, merci a tout ceux qui pourront m'aider
Hors ligne
ça veut dire quoi envoyer ?
lorsque ton utilisateur clique sur un lien ?
lorsque tu fais une redirection ?
A+JYT
Hors ligne
autant pout moi, c'est bientot le weekend.
Lorsque l'utilisateur clique sur un des liens de la liste, il va sur la seconde page, d'un second controleur, ou je veux avoir ma valeur. Je ne veux pas passé ça dans la barre d'adresse
Hors ligne
Zend_Registry ne va pas marcher parce que tu changes de page (à chaque nouvelle page Zend_Registry est réinitialisé).
Le plus logique serait de passer le paramètre dans l'URL mais apparemment ça ne te convient pas.
Sans javascript, tu peux faire un mini formulaire pour chaque bouton qui enverrait les données en post.
Avec du javascript, tu fais un unique mini formulaire (affiché nul part) et en javascript, quand on clique sur un des boutons, tu remplis en champs hidden et tu submitte le formulaire en POST.
A+, Philippe
Hors ligne
Et Zend_Session?
Hors ligne
Pourrais-tu m'en dire plus sur comment utiliser zend_session dans mon cas ...
Hors ligne
Tu ne peux pas utiliser la session
il te faut passer la valeur dans l'url
je supose que dans ta liste tu invoque une url genre
http://monserveur/controleur/action
il te suffit à la place de mettre
http://monserveur/controleur/action/mavaleur/lavaleur
dans ton action tu auras accès à la valeur par un getParam('mavaleur')
A+JYT
Hors ligne
Merci sekaijin je connais déjà cette technique mais je demandais s'il en existait une autre pour ne pas avoir la valeur dans l'URL et avoir une URL 'propre'
Hors ligne
pour ça il te faut construire un formulaire à la volé et y placer ta valeur
j'ai fais ça dans une lib à partir de jQuery pour les URL
tu fais un lien en http://toto/truc.ext?var=valeur&var2=machin
et ça te transforme le lien de telle sort que lors tu clique ça crée un form avec les variable et le poste
j'ai une démo qui contient plein d'autre truc là
http://jeanyves.terrien.free.fr/org.jqu … /fast.html
pour voir le post url clique sur l'icône "music" du la barre de menu
si tu regarde le code c'est un simple lien avec des variables
une fois invoqué celui-ci t'affiche les variables et la méthode utilisé
pour comprendre comment tous ça marche il te faut connaitre un peu jQuery et ouvrir le fichier
http://jeanyves.terrien.free.fr/org.jqu … ry.fast.js
c'est lui qui repère les éléments de la page à transformer
pour le lien qui nous intéresse le code html est :
<a fast:class="postUrl" target="_blank" class="dock-item2" href="/test.php?coucou=1&machin=bla bla"><span>Music</span><img src="images/music.png" alt="music" /></a>
c'est l'attribut fast:class="postUrl" qui va permettre au script de savoir quelle fonction appliquer
donc lorsque la page va se charger le script org.jquery.fast.js va ajouter une méthode onClick au lien et c'est dans cette méthode onClick que ce trouve le code qui t'intéresse
ce lui-ci est là
http://jeanyves.terrien.free.fr/org.jqu … posturl.js
function() { href = $(this).attr('href'); target = $(this).attr('target'); arg = new Array(); //on decoupe l'url pour récupérer les varaibles expr = new RegExp("([^?]*)(\\?([^?#]*)?)(#.*)?"); matches = expr.exec(href); if (matches) { loc = matches[1]; if ('string'==typeof(matches[4])) loc += matches[4]; args = matches[3]; matches = args.split(/\&/); for (i=0;i<matches.length;i++) arg[i] = matches[i].split(/=/); } else { loc = href; } //on crée un formulaire avec la location de l'url en mode POST myForm = $('body').Form(loc, 'POST'); if (target) myForm.attr('target',target); //on ajoute toute les variable en hidden for (i = 0; i < arg.length; i++) { myForm.Input('hidden', arg[i][0], arg[i][1]); } //on soumet le formulaire myForm.submit(); //il faut faie le ménage car s'il y a un target //on va laisser trainer des formulaires myForm.remove(); //il faut absolument retourner false pour ne pas activer le lien. return false; }
la partie qui t'intéresse commence par
//on crée un formulaire avec la location de l'url en mode POST
pour toi c'est le genre de code à placer dans la méthode qui est actifé lorsque ton utilisateur sélectionne un élément dans la liste
dans mon exemple on crée un formulaire (myForm) dans le body de la page avec pour action la cible de l'url et la méthode POST
ensuite on ajoute autant de champs Hidden que de variables avec leur valeur
on fait un myForm.submit()
et on nétoie la page
myForm.remove();
dans le cas d'un lien si le onClick retourne true le lien est activé en GET cette activation prendra le pas sur le POST du formulaire c'est la raison de la présence du return false
A+JYT
PS : le contenu de http://jeanyves.terrien.free.fr/org.jquery.fast/ n'est pas de première jeunesse mais tout peut être librement pompé je n'ai déposé aucun brevet dessus
dans le dossier js jquery.js et jquery-latest.js sont des version de la lib jQuery de 2007 il y a plus récent
org.jquery.dom2.js est une extention de jQuery que je mets à dispo de qui la veut qui ajoute le support des namespaces à jQuery conformément à la norme DOM2 du W3C
org.jquery.fast.js est simplement le fichier de traitement jQuery que je mets dans toutes mes pages et qui traite toutes les transformation à effectuer bref un onReady générique écrit une fois pour toutes
org.jquery.xtdDom.js est lui le plus gros morceau le dom javascript et jQuery on un gros inconvénient il est fait pour faire du XML sans plus de précision. il ne connaît donc pas le XHTML il ne peut donc pas créer un dic ou un body mais il crée des éléments génériques. du coup on ne l'utilise que très rarement alors qu'il est très portable et facilite beaucoup de traitement. la raison est qu'il est très verbeu
il est donc souvent remplacer par des innerHtml et du code html directement en chaine de caractères.
le pb avec cette approche est que le html en question doit être portable pour que le js le soit.
ce fichier ajoute donc au dom les capacité de traitement des éléments XHTML
ainsi en quelque lignes on écrit des création et manipulation du DOM XHTML générique portable là ou il fallait soit beaucoup de code avec le DOM soit beaucoup de gymnastique avec le innerHtml
pour mémoire je rappelle que le innerHtml fait appel à l'iterprète HTLML du navigateur pour générer un DOM là ou le dom et donc ma lib le fait directement
ça resemble à ça
$('myPane).DIV({id: 'mydiv'},{color: 'red'}).AHREF('http://truc', 'cliquer ici', {id : myLink}, {margin: 'auto'});
le dossier components contient quant à lui le composant autoform et post url que je démontrait dans l'exemple et qui eux aussi sont libre
A+JYT
Dernière modification par sekaijin (05-09-2009 21:46:02)
Hors ligne
Pages: 1