Многие уже сталкивались с обновлением части страницы без перезагрузки. И многие уже успели оценить простоту и удобство 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-запросы в Друпал можно почитать тут.
- 21.01.2013
- 81 просмотр