Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-04-2008 00:53:45

Sid_la_chouette
Membre
Date d'inscription: 07-03-2008
Messages: 15

[Resolu][Zend_Controller][1.5] Pb redirection du controleur avec ajax

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

Code:

<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 :

Code:

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 :

Code:

function reponseRubrique(transport,m)
{
    $(m).innerHTML = transport.responseText;
}

La fonction du controleur appelé par le js :

Code:

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

 

#2 02-04-2008 09:50:42

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Resolu][Zend_Controller][1.5] Pb redirection du controleur avec ajax

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

Code:

                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) :

Code:

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 02-04-2008 18:40:30

Sid_la_chouette
Membre
Date d'inscription: 07-03-2008
Messages: 15

Re: [Resolu][Zend_Controller][1.5] Pb redirection du controleur avec ajax

salut,

Ok pour les balises codes désolé ... Un grand merci pour ta réponse je me sens moins seul smile

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

Code:

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 :

Code:

'../index/searchRubrique'

il me permet de charger les menus ca marche quoi mais pas pour l'index ? sad

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

 

#4 02-04-2008 20:09:14

Sid_la_chouette
Membre
Date d'inscription: 07-03-2008
Messages: 15

Re: [Resolu][Zend_Controller][1.5] Pb redirection du controleur avec ajax

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 :

Code:

        <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 :

Code:

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) :

Code:

    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 smile

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