Список изменений в версии 0.8 не велик, но он порадует поклонников Zend Framework’a…
- Добавлен Action Helper – jQuery – теперь мы не ломаем философию ZF
- Добавлен View Helper – Ajax – ссылки генерировать стало проще
- Подогнал именование папок под ZF (libraries переименовал в library)
- Убрал error pop-up – заменен на div – ибо раздражал
- Обновил примеры (ибо много вопросов возникало)
Немного подробнее:
Сообщение с ошибкой теперь выглядет более цивильно:
Если в нем нет необходимости – то можно написать свой обработчик ошибок:
<script type="text/javascript"> php.error = function(xmlEr, typeEr, except) {} </script>
А теперь десерт для любителей Zend Framework’a
Для работы с ZF нам потребуется подключить хелперы – для этого сделаем пару изменений в bootstrap’е:
// добавим путь к нашему View Helper'у require_once 'Zend/Layout.php'; $layout = Zend_Layout::startMvc($config->layout); $layout->getView()->addHelperPath(APPLICATION_PATH . '/../library/ZendY/JQuery/View/Helper', 'ZendY_JQuery_View_Helper_'); // подключим Action Helper require_once 'Zend/Controller/Action/HelperBroker.php'; Zend_Controller_Action_HelperBroker::addPrefix('ZendY_JQuery_Controller_Action_Helper');
Теперь можно использовать хелпер jQuery в контроллере:
/** * ajaxAction * * @access public * @created Tue Jun 10 17:50:24 EEST 2008 */ public function ajaxAction() { // инициализируем Jquery action helper - обязательно $this->_helper->getHelper('Jquery'); // проверяем что это XML HTTP Request, если нет - форвардим на указанный экшен if ($this->_helper->getHelper('Jquery')->error('error', 'error')) { // forward to Error Controller, Error Action return false; } // назначаем div'у с id = 'test' текущее время jQuery('div#test')->html(date('H:i:s')); // отдаем то что у нас получилось - обязательно $this->_helper->getHelper('Jquery')->sendResponse(); }
Обращаемся к данному экшену используя следующую запись во view:
<?php $this->headScript()->appendFile($this->baseUrl() . '/js/jquery.php.pack.js?ver=0.5'); ?> <a href="#" <?php echo $this->Ajax(array('action'=>'ajax'), array('id'=>23), true)?> >Test Ajax</a> <div id="test"></div>
Если же вы строите систему с поддержкой браузеров без JavaScript’a, то вполне вероятно у Вас будет что-то наподобие следующего:
/** * ajaxAction * * @access public * @created Tue Jun 10 17:50:24 EEST 2008 */ public function ajaxAction() { // проверяем это AJAX запрос или нет if (!$this->getRequest()->isXmlHttpRequest()) { $this->view->test = date('H:i:s'); } else { // инициализируем Jquery action helper - обязательно $this->_helper->getHelper('Jquery'); // назначаем div'у с id = 'test' текущее время jQuery('div#test')->html(date('H:i:s')); // отдаем то что у нас получилось - обязательно $this->_helper->getHelper('Jquery')->sendResponse(); } }
И view:
<?php $this->headScript()->appendFile($this->baseUrl() . '/js/jquery.php.pack.js?ver=0.5'); ?> <a <?php echo $this->Ajax(array('action'=>'ajax'), array('id'=>23), true, true)?> >Test Ajax</a> <div id="test"><?=$this->test?></div>
P.S Cсылка на бибилотеку – jQuery-PHP
P.P.S Почему ZendY – не знаю, но есть же ZendX…
ну ZendX это все же Zend Extensions
возник вопрос применительно к Zend’у используя jQuery-PHP:
задача: сделать переадресацию по результату работы скрипта ajaxAction().. т.е. либо редиректить внутри скрипта (надо в другой контроллер) либо передавать в функцию success и там делать windows.location = ‘кудато’
т.е. где внутри PHP скрипта присваивается переменная data, которая потом идет в success и как оформить редирект в том же скрипте.
интрересуют оба варианта??!!
пример запроса
Для Вашей задачи подойдет использование функции evalScript, но это конечно не самый лучший вариант – в следующей версии добавлю возможность передачи лишь переменных, которые можно будет обрабатывать в php.success …
так и сделал…
Жду обновления библиотеки :)