xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Как программно навесить на элемент друпаловский AJAX-обработчик

Опубликовано в

AJAX-обработчики можно навешивать как из PHP, так и из Javascript. Ниже пример AJAX-ификации клика по заголовку блока #block-menu-devel:

Способ с помощью PHP:

$ajax_settings = array(
  'block-menu-devel-title' => array(
    'selector' => '#block-menu-devel h2',
    'event' => 'click',
    'url' => url('my/custom/ajax/path'),
  ),
);
drupal_add_js(array('ajax' => $ajax_settings), 'setting');
drupal_add_library('system', 'drupal.ajax');

Способ с помощью Javascript:

(function ($) {
  Drupal.behaviors.modulename = {
    attach: function (context, settings) {
      $('#block-menu-devel h2', context).once('ajax', function () {
        var base = 'block-menu-devel-title';
        Drupal.ajax[base] = new Drupal.ajax(base, this, {
          event: 'click',
          url: Drupal.settings.basePath + 'my/custom/ajax/path',
        });
      });
    }
  };
})(jQuery);

Для javascript способа так же нужно не забыть предварительно подключить либу drupal.ajax, как это сделано в первом способе.

Так же, если навешиваете ajax на элемент формы, то дополнительно нужно подключить либу jquery.form.

Подробнее.

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Спасибо, очень интересно ) Чувствую, что нужно, но вот как это использовать? Вот привязал обработчик, создал hook_menu, callback что-то выводит. И куда я это вставлю? Извините за тупость, но маленький пример, плз.

Это аналог #ajax для тех элементов, к которым нельзя прицепиться из альтер и препроцесс-хуков. Пример — в обычном блоке есть ссылка "Обратная связь", нужно по клику показать диалог с формой.

Спасибо

У меня как всегда вопрос:
Мне сам аякс запрос не нужен, но элементы созданные из аякс запроса или вновь созданные javascriptом - обычно обрабатываются live() или on().. А как правильно написать обработчик для друпала?
Здесь вот про это - http://xandeadx.ru/blog/javascript/355 - но только в комментах, могли бы вы написать функцию?! Спасибо.

Ты о behaviors?

о нём. Только вот не понимаю я как он работает?

$('.example', context).click(function () {
        $(this).next('ul').toggle('show');
      });

фишка - context - передавать? Или нет, в другом?
Drupal.behaviors.exampleModule - и должен по умолчанию с любыми элементами (не существовавшими в коде html изначально) работать? Чё та не выходит аленький цветок ;-)

behavior срабатывает в двух случаях:

1. domready (context = document)
2. в момент вызова Drupal.attachBehaviors (context = обновлённый/добавленный html)

Будьте добры, пример AJAX-ификации формы!
Способ с помощью Javascript.
Желательно элемент select.
Обновление элементов options - из своего Javascript - и обновление формы в кеше drupal с новыми элементами.
Спасибо.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании