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
     }
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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('/');
        }
    }
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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);
                }
            });
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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');
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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