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