I have posted a sample code on my wiki on how to submit variables to an action controller. The sample code contains a niffty jQuery plugin – the jQuery Calendar.
Update (07-08-2008): For those who don’t know, Zend Framework has built-in stuff for Dojo. So you might want to check it out first. I still prefer jQuery though.
Update (05-07-2008): Since this post has been getting a lot of traffic and the tutorial to my wiki is not that good, I have decided to update this page and post a simpler and shorter tutorial.
So here it is…
The Javascript will look something like this:
//For Edit Action function editnote(notes_id) { //a sample loading image thingy $('#notes_entry_id').prepend('<p id="loading"><img src="http://blog.ekini.net/wp-admin/" /></p>'); //Get notes from database - in ZF, notes = controller and getnoteforedit = action $.post(baseUrl+"/notes/getnoteforedit",{ notes_id: notes_id }, function(data){ $('#loading').remove(); obj = window.eval(data); $('#textarea_id').val(obj['notes']); }, "json"); //this returns JSON. } |
Then my controller would look something like this:
/** * Get note for action * */ public function getnoteforeditAction() { $this->_helper->layout->disableLayout(); //disable layout $this->_helper->viewRenderer->setNoRender(); //suppress auto-rendering //the 2 lines above are very important. //this action would return html tags from the layout and will look for a phtml file. //we disable the layout and suppress auto-rendering of the phtml view files //SO that our JSON will be echoed properly to the Javascript... require_once('models/Notes.php'); require_once('models/UsersNotes.php'); try { if (!$this->_request->isPost()) { throw new Exception('Invalid action. Not post.'); } $Notes = new Notes(); $data = array(); if ($result = $Notes->fetchRow("notes_id=".$Notes->getAdapter()->quote($_POST['notes_id'])."")->toArray()) { $data['notes_id'] = $result["notes_id"]; $data['notes'] = $result["notes"]; $data['datetime_posted'] = $result["datetime_posted"]; $data['status'] = $result["status"]; $json = Zend_Json::encode($data); //basically, $data array will also be available in the JS. } else { throw new Exception('Note ID not found.'); } echo $json; //this will echo JSON to the Javascript unset($json); unset($data); } catch (Exception $e) { echo $e->getMessage(); } } |
That’s about it…
The $data that was encoded using Zend_JSON in the controller/action can now be accessed in the Javascript after you call the eval().
I use jQuery-PHP library with ZF, see example on project homepage
Thanks Anton. Have you created a proposal for this in ZF? It would be great if this made it to the official ZF release.
couldnt u you do this in your controller? it works for me:
$this->_helper->json(Zend_Json::encode($array));
nice,http://news.wangmeng.cn/index
i used simple jQuery method .
just included the JS file in main layout and just disabled the layout for some views which i call them by ajax and it works
my project was very simple by the way .
$this->_helper->layout->disableLayout();
Thanks, this article helped me in work.