Список изменений в версии 0.8 не велик, но он порадует поклонников Zend Framework’a…
- Добавлен Action Helper – jQuery – теперь мы не ломаем философию ZF
- Добавлен View Helper – Ajax – ссылки генерировать стало проще
- Подогнал именование папок под ZF (libraries переименовал в library)
- Убрал error pop-up – заменен на div – ибо раздражал
- Обновил примеры (ибо много вопросов возникало)
Немного подробнее:
Сообщение с ошибкой теперь выглядет более цивильно:
Если в нем нет необходимости – то можно написать свой обработчик ошибок:
1 2 3 | < script type = "text/javascript" > php.error = function(xmlEr, typeEr, except) {} </ script > |
А теперь десерт для любителей Zend Framework’a
Для работы с ZF нам потребуется подключить хелперы – для этого сделаем пару изменений в bootstrap’е:
1 2 3 4 5 6 7 8 | // добавим путь к нашему 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 в контроллере:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /** * 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:
1 2 3 | <?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, то вполне вероятно у Вас будет что-то наподобие следующего:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /** * 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:
1 2 3 | <?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 и как оформить редирект в том же скрипте.
интрересуют оба варианта??!!
пример запроса
function
formSubmit(){
var
params = $(
"#taskform"
).serialize();
$.php(
'<?php echo $this->url(array('
action
' =>'
validaterssform
'),'
ajax
')?>'
,
params,
php.complete =
function
(data){
alert(data.SOMETHING);
}
);
}
Для Вашей задачи подойдет использование функции evalScript, но это конечно не самый лучший вариант – в следующей версии добавлю возможность передачи лишь переменных, которые можно будет обрабатывать в php.success …
так и сделал…
Жду обновления библиотеки :)