Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Pour des besoins répétitifs de mon application, j'ai crée une classe mère controleur étendant Zend_Controller_Action
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é.
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
C'est bizarre
$context->getAutoDisableLayout()
Me renvoie bien true pourtant ![]()
Hors ligne
Hello
Tu passes bien le paramètre format=json lors de l'appel de la page.
@+
Hors ligne
mikaelkael a écrit:
Hello
Tu passes bien le paramètre format=json lors de l'appel de la page.
@+
Oui ![]()
$.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
Tu n'as pas un plugin en postDispatch ou qqchose de genre qui intervient sur le layout ?
Hors ligne
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é :
public function preDispatch
{
// Changement du layout
$this->_helper->setLayout('admin');
}Quelle serait la soluce ?
Hors ligne
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.
Hors ligne
Merci.
Sinon, la solution ça serait pas plutot de mettre le setLayout() en init() plutot qu'en preDispatch() ?
Lequel survient avant ?
Hors ligne
Pages: 1