Многие уже сталкивались с обновлением части страницы без перезагрузки. И многие уже успели оценить простоту и удобство AJAX Framework в Друпал 7. В качестве пример могу привести пару полезных ссылок:
Если обновление информации должно происходить в ответ на действие пользователя (нажатие на кнопку, ссылку), то порядок организации запроса следующий:
- Регистрируете адрес, по которому будут возвращаться данные. Для этого в Друпале существует hook_menu()
- Создаете функцию, которая будет возвращать набор AJAX-команд
- Добавляете на страницу ajax ссылку для отправки запроса. Чтобы ссылка обрабатывалась без перезагрузки (отправляла ajax-запрос), ей нужно присвоить класс "use-ajax". Что бы можно было опознать пользователей с отключенным javascript к адресу добавляют аргумент nojs
Если вы хотите производить обновление в фоновом режиме, без каких-либо действий пользователя (разве что, открытие страницы), то вместо добавления ajax-ссылки, необходимо организовать работу таймера. Через определенный период времени на сервер идет запрос и возвращаются наборы ajax-команд. Потом запускается их выполнение. Пример скрипта, который не только организовывает работу таймера, но и ставит все запросы в очередь выполнения:
(function($){ Drupal.behaviors.my_module = { //$(document).ready(function() { attach: function (context, settings) { $('body').once(function () { //указываем, что данная функция будет выполняться для элемента body один раз. Иначе могут быть проблемы с повторяющимся запуском таймера var ajax = new Drupal.ajax(false, false, {url : '/ajax_forms_ajax/nojs'}); var timer = window.setInterval(function(){ //Создаем таймер для отправки запроса // добавляем код в очередь $(document).queue(function() { ajax.eventResponse(ajax, {}); //запрос и выполнение $(document).dequeue(); }); return false; }, 5000);//интервал через который будет отправляться запрос }) } } })(jQuery);
Кстати, в Друпале очень удобно передавать параметры из php в javascript. Так, для данного примера полезно сделать настраиваемый интервал таймера. В php после подключения скрипта добавляем
$timer=5000; drupal_add_js(array('my_module' => array('delay' =>$timer)), 'setting');
В скрипте строка
}, 5000);//интервал через который будет отправляться запрос
примет вид
}, Drupal.settings.my_module.delay);//интервал через который будет отправляться запрос
Теперь можно вынести интервал таймера в настройки модуля и радоваться. Подробнее про ajax-запросы в Друпал можно почитать тут.
Комментарии
Добавить комментарий