Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Ce que j'ai fais est d'intégrer de l'ajax dans le site, et j'ai un souci pour les menus.
Le principe est d'avoir crée des menus qui peuvent se recharger en fonction de la position de la souris sur le menu soit "onmouseover", cette méthode me permet d'appeler une méthode javascript qui appelle le controlleur indexController pour écrire ce que je veux.
Le problème intervient quand je change de controleur, c'est à dire par exemple quand je clique sur connexion (ou autre) mon url change donc je suis plus dans mon IndexController et la ca plante, je vous montre.
Le code de ma vue qui appel la fonction js :
// J'appel ma fonction je lui file deux paramètre bref pas de soucis
<div class='menuHaut' onmouseover="searchRubrique('<?=$menu->titre?>','<?=$this->file?>');" > <a href="<?=$menu->lien?>"> <?=htmlentities($menu->titre) ?> </a> </div> <div id="<?=$menu->titre?>"></div>
La fonction js qui appel le controller :
function searchRubrique(m,f) { var myAjax = new Ajax.Request ( // ICI CE TROUVE LE PROBLEME IL NE VEUX PAS REDIRIGER CORRECTEMENT // QUAND JE NE SUIS PAS DANS INDEXCONTROLLER ..............................?!? 'index/searchRubrique', { method: 'get', parameters: {menu: m, file: f}, onComplete: function(transport) {reponseRubrique(transport,m);} } ); }
La fonction retour du resultat de Ajax.Request :
function reponseRubrique(transport,m) { $(m).innerHTML = transport.responseText; }
La fonction du controleur appelé par le js :
function searchRubriqueAction() { $this->_helper->viewRenderer->setNoRender(true); $this->_helper->layout->disableLayout(); echo "<img src='".Zend_Registry::get('REP_SITE')."application/public/boutons/marqueOk.png' />"; }
Je ne comprend pas bien comment rediriger dans la partie js le bon controleur comme je vous le disais il cherche (pour l'exemple connexion) le controleur actuel puis la méthode donc pas de soucis quand je suis dans l'index mais des que je passe à n'importe qu'elle autre page la méthode n'étant pas le controleur courant il ne la trouve pas (normal), mais comment lui dire (on ne peux pas lui donné ce type Zend_Registry::get('REP_SITE') le js ne comprend pas).
Merci de vos commentaire et de votre aide ....
Svp.
Dernière modification par Sid_la_chouette (02-04-2008 23:08:33)
Hors ligne
Bonjour,
J'ai ajouté les balises code pour rendre tes codes lisibles, pense à le faire dans les prochains messages.
Sinon pour ton problème, il y a un truc super foireux au niveau des lignes
onComplete: function(transport) {reponseRubrique(transport,m);}
le callback onComplete reçois un objet request qui contient la réponse de ton controlleur. il ne connait pas la variable "m".
si tu veux récupérer transport et m il faut les mettre dans un variable globale js.
Ca donnerait un truc du genre (c'est la version crados, mais ça te donne le principe) :
function searchRubrique(m,f) { m_global = m; // pas de var devant => variable globale var myAjax = new Ajax.Request ( 'index/searchRubrique', { method: 'get', parameters: {menu: m, file: f}, onComplete: function(transport) {reponseRubrique(transport);} } ); } function reponseRubrique(transport) { var m = m_global; $(m).innerHTML = transport.responseText; }
A+, Philippe
Hors ligne
salut,
Ok pour les balises codes désolé ... Un grand merci pour ta réponse je me sens moins seul
Mais en fait je suis pas d'accord avec toi car en fait ca marche tres bien pour passer la valeur de m je la récupére bien j'ai pas de soucis a ce niveau mais au niveau de 'index/searchRubrique' (de plus je suis pas friand des variable global) .
De plus sinon j'aurais fais un coder de cette manière plutot
onComplete: reponseRubrique
car a la variable transport est d'office en paramètre
Quand je suis dans mon index soit la page d'accueil, pas de soucis car il est gérer par mon IndexController qui renvoi la valeur souhaité.
Mais quand je suis dans dans une autre page, et que je survole les menus il me met une fatal erreur du genre qu'il arrive pas a trouver la fonction correspondante (en gros), il l'a cherche dans le controleur lié à ma vu pour connexion le controleur connexionController et ainsi de suite.
Je voudrais donc arriver a rediriger mon appel vers le bon controleur de maniere générique en obligeant la fonction javascript a regarder dans IndexController.
Petite précision si je modifie mon code de la fonction js pour rechercher la fonction comme ceci :
'../index/searchRubrique'
il me permet de charger les menus ca marche quoi mais pas pour l'index ?
On ne peux pas le mettre en chemin absolu je j'y arrive pas ... Je ne sais pas d'ou il faut partir
Merci pour vos suggestions ...
Dernière modification par Sid_la_chouette (02-04-2008 18:57:08)
Hors ligne
Donc voila en fait ce n'étais pas aussi compliqué que je pensais j'ai résolu le problème en répondant dans mon post précédent avec le chemin absolu pour ce que ca intéresse voila le résultat.
Le bout du formulaire de la vue :
<div class='menuHaut' onmouseover="searchRubrique('<?=Zend_Registry::get('REP_SITE'); ?>','<?=$menu->titre?>','<?=$this->file?>');" ><a href="<?=$menu->lien?>"><?=htmlentities($menu->titre) ?></a></div> <div id="<?=$menu->titre?>"></div>
Le code javascript :
function searchRubrique(c,m,f) { alert(c); var myAjax = new Ajax.Request ( c+'index/searchRubrique', { method: 'get', parameters: {menu: m, file: f}, onComplete: function(transport) {reponseRubrique(transport,m);} } ); } function reponseRubrique(transport,m) { $(m).innerHTML = transport.responseText; }
Ce que fait le controleur (juste un petit test) :
function searchRubriqueAction() { $this->_helper->viewRenderer->setNoRender(true); $this->_helper->layout->disableLayout(); echo "<img src='".Zend_Registry::get('REP_SITE')."application/public/boutons/marqueOk.png' />"; }
Merci à philippe quand meme
Hors ligne
Pages: 1