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
Похожие записи
- Показать второй шаг многошаговой формы в модальном окне
- Навесить на элемент managed_file свой ajax callback (Как обновить всю форму при загрузки файла в managed_file)
- Восстанавливаем позицию текстового курсора при ajax обновлении формы
- Как выполнять свой js-код до или после любых AJAX запросов (изменение работы AJAX API)
- AJAX в форме корзины Commerce 2
Комментарии
Спасибо, очень интересно ) Чувствую, что нужно, но вот как это использовать? Вот привязал обработчик, создал hook_menu, callback что-то выводит. И куда я это вставлю? Извините за тупость, но маленький пример, плз.
Это аналог #ajax для тех элементов, к которым нельзя прицепиться из альтер и препроцесс-хуков. Пример — в обычном блоке есть ссылка "Обратная связь", нужно по клику показать диалог с формой.
Спасибо
У меня как всегда вопрос:
Мне сам аякс запрос не нужен, но элементы созданные из аякс запроса или вновь созданные javascriptом - обычно обрабатываются live() или on().. А как правильно написать обработчик для друпала?
Здесь вот про это - http://xandeadx.ru/blog/javascript/355 - но только в комментах, могли бы вы написать функцию?! Спасибо.
Ты о behaviors?
о нём. Только вот не понимаю я как он работает?
фишка - context - передавать? Или нет, в другом?
Drupal.behaviors.exampleModule - и должен по умолчанию с любыми элементами (не существовавшими в коде html изначально) работать? Чё та не выходит аленький цветок ;-)
behavior срабатывает в двух случаях:
1. domready (context = document)
2. в момент вызова Drupal.attachBehaviors (context = обновлённый/добавленный html)
Добавить комментарий