Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Je tente de développer une navigation Ajax de certaines pages. Je souhaites appeler en javascript un controller et une vue et je souhaites que ça me retourne un array Json contenant quelques variables et le script de vue généré par le contrôle.
[lang=javascript] $.ajax({ url: monUrl, type: "POST", dataType:"json", data: {ajax:1}, success: function(html){ alert(html); } });
Niveau Javascript, pas de problème. C'est du côté PHP que ça se corse.
Mes recherches sur le forum m'ont données plusieurs solutions proches de ce que je recherches mais pas complètement. En effet, plusieurs solutions ne font que retourner du contenu généré directement dans le controller et non un script de vue complet.
Mon idée était d'exécuter le controller et la vue, et de récupérer en le html généré pour le renvoyé au javascript.
Ni ContextSwitch, ni le helper Json semble avoir une function pour retourner un JSON comme je le souhaites. (Params + réponse html du vue)
[lang=php] public function init() { ... $ajaxContext = $this->_helper->getHelper('AjaxContext'); $ajaxContext->setAutoJsonSerialization(false); $ajaxContext->addActionContext('inscription','json')->initContext(); ... }
[lang=php] public function monAction() { $params = array(); $params['var1'] = 'value1'; $params['html'] = ??; //Récupérer la réponse html généré $json = Zend_Json::encode($params); echo $json; }
Il faut dire que les pages qui sont appeler via $ajax doivent également s'éxécuter normalement (pas de retour JSON)
J'attens vos solutions afin de connaître les meilleurs pratiques.
Merci à tous,
Dernière modification par probitaille (22-05-2012 18:14:19)
Hors ligne
Je crois avoir trouvé ma réponse.
J'ai simplement créer un plugin avec un postDispatch qui peut récupérer mon contenu HTML produit par mon action. J'insère ce contenu dans un array PHP que je convertis en JSON.
[language=php] class Default_Model_Plugins_Ajax extends Zend_Controller_Plugin_Abstract { public function postDispatch(Zend_Controller_Request_Abstract $request) { $params = $request->getParams(); if(isset($params['ajax']) && $params['ajax']==1){ $view = Zend_Layout::getMvcInstance()->getView(); $paramsAjax = array(); $paramsAjax['title'] = "titre"; $paramsAjax['meta_title'] = "meta_titre"; $paramsAjax['meta_desc'] = "meta_desc"; $paramsAjax['html'] = (string)$this->getResponse()->getBody(); $paramsAjax['breadcrumb'] = (string)$view->navigation()->breadcrumbs()->setLinkLast(false)->setMinDepth(0)->setMaxDepth(3)->setSeparator(' › ' . PHP_EOL); $json = Zend_Json::encode($paramsAjax); //echo $view->navigation()->breadcrumbs()->setLinkLast(false)->setMinDepth(0)->setMaxDepth(3)->setSeparator(' › ' . PHP_EOL); echo($json); exit; } } }
Voilà, j'attends vos commentaires si vous avez une meilleure solution à ce problème.
Hors ligne
Pages: 1