Ajax-запросы по таймеру в Drupal 7


81

Многие уже сталкивались с обновлением части страницы без перезагрузки. И многие уже успели оценить простоту и удобство AJAX Framework в Друпал 7. В качестве пример могу привести пару полезных ссылок:

Если обновление информации должно происходить в ответ на действие пользователя (нажатие на кнопку, ссылку), то порядок организации запроса следующий:

  1. Регистрируете адрес, по которому будут возвращаться данные. Для этого в Друпале существует hook_menu()
  2. Создаете функцию, которая будет возвращать набор AJAX-команд
  3. Добавляете на страницу 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-запросы в Друпал можно почитать тут.

Добавить комментарий
Может быть интересно

Закрываем порты docker контейнеров  в iptables. 
Обновление правил при перезагрузке сервера.

6

Данный скрипт поможет пересохранить файлы Excel в csv. Может быть полезно перед отправкой прайсов на хостинг для дальнейшей обработки

6

Порядок действий для установки Solr на сервере с Centos 7

4

В данной статье будет теория про механизм, который использует модуль migrate при импорте материалов в Друпал из различных источников.

2
Задача: разрешить пользователю во время оформления заказа выбрать вариант предоплаты (50% от стоимости заказа). Например, при продаже билетов на мероприятие. Остальная оплата будет осуществляться на месте самого мероприятия...
2