Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je viens poser ma question ici parce que après avoir cherché sur internet je n'ai apparemment pas trouvé de personnes avec le même problème que moi... je vous explique :
Je développe un site en PHP avec le Zend Framework .Il est fait de façon a ce que tout marche sans JavaScript.
Maintenant que j'ai fini la partie "fonctionnement" du site je voulais ajouter des petites animations en ajax, en plus pour le confort.
Voici le principe : je récupère mon lien en parcourant tout ma page avec le JS , j'y ajoute un paramètre "ajax" que je met a "true" et du coup dans mon contrôleur et mes vues je réagis en fonction ( affichage ou non de certains éléments ) .
Mon problème est lorsque je veux changer un lien dynamique , le lien est envoyé a la vue depuis le contrôleur et concaténé dans la vue dans un href . Or la ou ça bug c'est que le JS n'arrive pas a récupérer ce que contient le lien ... (je précise que lorsque le liens est écrit directement dans la vue j'arrive sans problème a l'attraper..).
Voici mes codes :
//action transmise a la vue dans le contrôleur ... $this->view->action = "/utilisateur/supprimermessage/idmessage/"; ...
//Partie de la vue ou est utilisée l'action pour construire le lien ... <a href="<?php echo $this->baseUrl().$this->action.$this->id; ?>" class="oui">Oui</a> <a href="<?php echo $_SERVER['HTTP_REFERER']; ?>" class="non">Non</a> ...
//Code JavaScript ( j'utilise la bibliotheque Mootools ) ... var lien = $$('a.oui'); var nl = lien.href + temp; lien.setProperty('href',nl); ...
Merci d'avance
+ Fred
Hors ligne
Voici le principe : je récupère mon lien en parcourant tout ma page avec le JS , j'y ajoute un paramètre "ajax" que je met a "true" et du coup dans mon contrôleur et mes vues je réagis en fonction ( affichage ou non de certains éléments ) .
Tu n'as pas besoin de t'embeter avec des bidouilles comme ça.
En effet, Zend_Controller_Request possède une méthode pour déterminé si une requête est de type ajax ou non. Ainsi dans ton controller, tu peux faire $this->_request->isXmlHttpRequest() qui te renverra true dans le cas d'une requête ajax (marche avec prototype, dojo, et jquery, à voir pour mootools). Il existe encore mieux avec le action helper AjaxContent.
Sinon pour générer tes urls, regardes du côté tu view helper url (à la fin de la liste des aides initiales)...
Après si ton problème est purement javascript, ce n'est pas sur ce forum que tu trouveras de l'aide...
Hors ligne
Merci de ta réponse Mr.MoOx .
J'ai fais quelques essais avec les view helper url mais d'une ça ne me convient pas tout a fait au niveau du lien généré et d'autre part je n'ai pas très bien compris la doc sur le AjaxContent ..
En tout cas je vais regarder plus précisément du coté du JavaScript et si je trouve la réponse je vous la posterais pour ceux qui passeront par ici plus tard.
+Fred
Hors ligne
Bonjour
Si j'ai bien compris Fred, il fait d'abord tout son site sans penser à Ajax, proprement côté serveur, fonctionnant sans javascript, et après il veut ajouter Ajax au niveau de ses pages pour le rendre plus dynamique, joli, etc.
C'est bien ça?
Donc il n'utilise pas de requetes faites directement depuis Ajax, ou si?
Je commence un back-office et je pensais travailler comme Fred; mais que me conseilles-tu?
Merci
Hors ligne
Perso je travaille exactement de la même manière.
Je fais mon site en PHP only et après je pense au JS qui est un plus.
Par contre pour un backoffice c'est autre chose car cette partie n'est pas forcément accéssible par pleins de gens. Tu peux donc imposer des contraintes plus fortes (javascript obligatoire, tel ou tel navigateur, etc...)
A toi de voir (avec ton client )
Hors ligne
D'accord et merci!!!!
Alors je ne comprends pas bien le souci de Fred et puis est-ce que tes conseils donnés (à Fred) concernent la façon dont tu travailles et donc celle que je me prépare à faire?
En sachant que je vais utiliser Protoype et Scriptaculous. Je ne sais pas si ceci change quelque chose à l'affaire.
Merci de ton conseil car je ne voudrais pas me lancer aveuglement sans avoir avant analyser la meilleure façon de faire.
merci encore
Hors ligne
Alors je ne comprends pas bien le souci de Fred
Ben en fait moi non plus, mais je suppose que c'est purement javascript...
est-ce que tes conseils donnés (à Fred) concernent la façon dont tu travailles et donc celle que je me prépare à faire?
Pour le helper url c'est valable pour tout le monde (pourquoi se privé d'un générateur d'url? si on change les routes, les urls changent automatiquement sur tout le site!!!)
Pour l'ajax, c'est aussi valable par rapport à la méthode "PHP puis JS".
En gros avec un snippet de code:
PHP only
public function maAction() { $resultatNormal = $objet->methode(); }
PHP revu pour JS (si traitement différent sinon cf AjaxContent
public function maAction() { if ($this->_request->isXmlHttpRequest()) { //.. d'autre truc } else { $resultatNormal = $objet->methode(); } //... }
Franchement pour avoir utiliser l'AjaxContent et la sérialisation JSON automatique des variables de vue, je vous conseille de regarder ça de près, ç fait gagner un temps précieux
Hors ligne
je te remercie énormément; je vais regarder tout ceci de près!!!
Hors ligne
Sinon pour générer tes urls, regardes du côté tu view helper url (à la fin de la liste des aides initiales)...
si je comprends ... pas sûr.... , ceci permet de gérer une action qui disons vient s'ajouter.... par exemple une venant d'Ajax??
Comme pour Fred (où es tu ?), le helper de zend n'est pas encore clair pour moi....
Hors ligne
Hello,
Le helper Url te sert à générer la chaîne de caractère correspondant à l'url. La génération est basé sur l'url actuel de ta page (fonctionnement par défaut).
Exemple : tu es dans le module toto, dans le contrôleur tata et dans l'action titi, en plus un de tes paramètres d'url est tutu=1. Tu utilise le router par défaut (rewrite). Ton adresse est donc : http://monsite/toto/tata/titi/tutu/1
// dans ce cas echo $this->url(array('action'=>'tyty')); // affiche http://monsite/toto/tata/tyty/tutu/1 // par contre echo $this->url(array('action'=>'tyty'), null true); // affiche http://monsite/default/index/tyty à cause du true en 3ème // tu peux aussi faire echo $this->url(array('action'=>'tyty', 'module'=>'commun', 'test'=>123)); // affiche http://monsite/commun/tata/tyty/tutu/1/test/123
C'est plus clair ?
A+
Hors ligne
oui, c'est plus clair mais donc Ajax ici comment peut-il rentrer dans cette structure? Une nouvelle action?, un nouveau module? Simplement une nouvelle key/valeur?
je ne vois pas trop encore.... désolée....
Hors ligne
Hello,
Pas de problème, on est là pour apprendre. Dans mon cas, j'ai un contrôleur Ajax dans chaque module où il est nécessaire, ce contrôleur ne retourne que du JSON.
Je travaille avec jQuery.
Par exemple, j'ai un input avec un id=toto en fin d'un formulaire.
$('#toto').click(function(){ var serial = $('#formulaire').formSerialize(); $.ajax({ type: "POST", url: "<?=$this->url(array('controller' => 'ajax' , 'action' => 'modifie'))?>", data: serial, success: function(result){ result=result.parseJSON(); alert(result[0]); } }); });
C'est vrai qu'il faut connaître jQuery, mais ce que je veux montrer c'est l'url inclus dans le JS. Quand je clique sur mon input, je crée une requête Ajax qui interroge la page http://monsite/default/ajax/modifie. Cette page retourne des infos au format JSON. Je les traite via result.parseJSON(); et j'affiche alert(result[0]);. Tout ceci sans recharger la page.
A+
Dernière modification par mikaelkael (13-05-2008 16:14:28)
Hors ligne
Ah, d'acc je commence à comprendre et même si je n'utilise pas jQuery ton exemple m'aide à comprendre la liaison entre ajax et Zend.
Dans mon cas ce sera depuis Prototype/Scriptaculous et puis un contrôler Ajax: Ceci me paraît propre comme idée donc cela me permet de faire comme j'avais pensé c'est à dire faire mon site d'abord seulement en Zend sans javascript et puis ajouter les requêtes Ajax là où c'est nécessaire!
Merci, je vais étudier en profondeur le AjaxContext et les helpers..
merci à tous!!!!
Hors ligne