jQuery-PHP обновление до версии 0.8

Список изменений в версии 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…

4 thoughts on “jQuery-PHP обновление до версии 0.8”

  1. возник вопрос применительно к Zend’у используя jQuery-PHP:
    задача: сделать переадресацию по результату работы скрипта ajaxAction().. т.е. либо редиректить внутри скрипта (надо в другой контроллер) либо передавать в функцию success и там делать windows.location = ‘кудато’

    т.е. где внутри PHP скрипта присваивается переменная data, которая потом идет в success и как оформить редирект в том же скрипте.

    интрересуют оба варианта??!!

    пример запроса

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    function formSubmit(){
        var params = $("#taskform").serialize();
            $.php(
                '<?php echo $this->url(array('action' =>'validaterssform'),'ajax')?>',
                params,
                 
                php.complete = function (data){
                    alert(data.SOMETHING);
                }
            );
        }
    1. Для Вашей задачи подойдет использование функции evalScript, но это конечно не самый лучший вариант – в следующей версии добавлю возможность передачи лишь переменных, которые можно будет обрабатывать в php.success …

  2. так и сделал…
    Жду обновления библиотеки :)

Comments are closed.