Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-03-2010 12:14:05

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Contexte Ajax et layout qui ne se désactive pas

Bonjour,

Pour des besoins répétitifs de mon application, j'ai crée une classe mère controleur étendant Zend_Controller_Action

Code:

class My_Controller extends Zend_Controller_Action
{
     public function preDispatch
     {
          // changement du layout
     }
}

Dans mon module, mes controleurs étendent donc My_Controller.
J'utilise le contexteur pour gérer mes requêtes ajax, afin que le layout soit désactivé et qu'une réponse en json soit renvoyé.

Code:

class IndexController extends My_Controller
{
    public function  init()
    {
        $context = $this->_helper->getHelper('contextSwitch');
        $context->addActionContext('delete', 'json')
                ->initContext();
    }

    public function deleteAction()
    {
        $id = $this->_getParam('id');
        $model = new Index_Model();
        
        // Contexte
        $context = $this->_helper->getHelper('contextSwitch')->getCurrentContext();

        // Si le contexte ajax est détecté
        if ($context){
            $model->delete($id);
            $this->view->ok = 'ok';
        } else {
            $this->_redirect('/');
        }
    }
}

Le seul problème, c'est que le layout ne se désactive pas, donc ma réponse json se retrouve en plein dans l'html.
Je suis obligé de recourir manuellement à
$this->_helper->layout->disableLayout(true);

Ce qui est bizarre c'est que ce problème se produit uniquement si j'étends My_Controller, et pas si j'étends directement Zend_Controller_Action

Merci pour votre aide

Hors ligne

 

#2 17-03-2010 12:24:25

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: Contexte Ajax et layout qui ne se désactive pas

C'est bizarre

$context->getAutoDisableLayout()

Me renvoie bien true pourtant sad

Hors ligne

 

#3 17-03-2010 13:06:25

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Contexte Ajax et layout qui ne se désactive pas

Hello

Tu passes bien le paramètre format=json lors de l'appel de la page.

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#4 17-03-2010 14:53:18

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: Contexte Ajax et layout qui ne se désactive pas

mikaelkael a écrit:

Hello

Tu passes bien le paramètre format=json lors de l'appel de la page.

@+

Oui smile

Code:

$.ajax({
                url : '/index/delete',
                type : 'POST',
                dataType : 'json',
                data : { format: 'json', id: id_item },
                success : function(data){
                    container.html('<span style="color: red;">Elément supprimé</span>').fadeOut(1000);
                }
            });

d'ailleurs, $this->_helper->getHelper('contextSwitch')->getCurrentContext() renvoie bien "json"

J'arrive pas à voir d'où ça vient.

Dernière modification par supertino7 (17-03-2010 14:54:04)

Hors ligne

 

#5 18-03-2010 09:02:21

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Contexte Ajax et layout qui ne se désactive pas

Tu n'as pas un plugin en postDispatch ou qqchose de genre qui intervient sur le layout ?


----
Gruiiik !

Hors ligne

 

#6 19-03-2010 15:34:16

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: Contexte Ajax et layout qui ne se désactive pas

nORKy a écrit:

Tu n'as pas un plugin en postDispatch ou qqchose de genre qui intervient sur le layout ?

Si !

Plus haut, dans la classe mère et dans le preDispatch, où j'ai commenté :

Code:

public function preDispatch
{
    // Changement du layout
    $this->_helper->setLayout('admin');
}

Quelle serait la soluce ?

Hors ligne

 

#7 22-03-2010 14:36:09

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Contexte Ajax et layout qui ne se désactive pas

hmm. ca veut rien dire ton code la, t'as oublié te casé ton objet layout_helper dans ta ligne de code

Sinon, la solution, c'est  setLayout('admin', false);

Ca empêche de réactivé le layout si tu l'a desactivé avant.


----
Gruiiik !

Hors ligne

 

#8 24-03-2010 11:51:17

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: Contexte Ajax et layout qui ne se désactive pas

Merci.

Sinon, la solution ça serait pas plutot de mettre le setLayout() en init() plutot qu'en preDispatch() ?
Lequel survient avant ?

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