210 likes | 534 Views
Drupal Camp Minsk 2012. AJAX в Drupal 7. Недостатки AHAH в Drupal 6. Возможность изменения только одной области Нет инструментов, позволяющих загрузить css или js динамически Механизм по перезагрузке полей формы приходится писать самостоятельно
E N D
Drupal Camp Minsk 2012 AJAX в Drupal 7
Недостатки AHAH в Drupal 6 • Возможность изменения только одной области • Нет инструментов, позволяющих загрузить cssили jsдинамически • Механизм по перезагрузке полей формы приходится писать самостоятельно • Нет возможности загрузить новую форму через AJAX, которая также использовала бы AJAX • Нет единой страницы для AJAX callback
AJAX и Forms API • #ajax['callback'] • #ajax['path'] • #ajax['wrapper'] • #ajax['effect'] • #ajax['event'] • #ajax['keypress'] • #ajax['method'] • #ajax['progress'] • #ajax['trigger_as']
Обработка #ajax[‘callback’] • Запрос посылается на /system/ajax • Загружается форма из {cache_block} • Обработка загруженной формы • Вызов функции из #ajax[‘callback’]
Команды AJAXFramework Серверная часть – массив данных
Команды AJAXFramework Клиентская часть - набор функций массива Drupal.ajax.prototype.commands
Команды AJAXFramework • ajax_command_after($selector, $html, $settings = NULL) • ajax_command_alert($text) • ajax_command_append($selector, $html, $settings = NULL) • ajax_command_before($selector, $html, $settings = NULL) • ajax_command_changed($selector, $asterisk = '') • ajax_command_css($selector, $argument) • ajax_command_data($selector, $name, $value) • ajax_command_html($selector, $html, $settings) • ajax_command_insert($selector, $html, $settings = NULL) • ajax_command_invoke($selector, $method, $arguments = array()) • ajax_command_prepend($selector, $html, $settings = NULL) • ajax_command_remove($selector) • ajax_command_replace($selector, $html, $settings = NULL) • ajax_command_restripe($selector) • ajax_command_settings($argument, $merge = FALSE)
Создание своей AJAX команды Серверная часть
Создание своей AJAX команды Клиентская часть
ajax_deliver() • Выставление правильных хедеров для ответа от сервера • Обработка данных из page callback • Загрузка добавленных cssи js • Изменение настроек в Drupal.settings • Преобразование AJAX комманд в JSON • Вызов хукаhook_exit()
Перезагрузка форм 1. Создание селектора для AJAX ответа 2. Добавление #ajax атрибута
Перезагрузка форм 3. Написание обработчика AJAX
Создание многошаговых форм 1. Создание селектора для AJAX ответа 2. Получение текущего шага
Создание многошаговых форм 3. Создание элементов в зависимости от шага
Создание многошаговых форм 4. Добавляем к кнопкам AJAX 5. Пишем AJAX обработчик
Создание многошаговых форм 6. Пишем к форме функцию сабмита
Chaos Tools и AJAX • Дополнительные AJAX команды • ctools_ajax_command_attr($selector, $name, $value) • ctools_ajax_command_redirect($url, $delay = 0, $options = array()) • ctools_ajax_command_reload() • ctools_ajax_command_submit($selector) • Работа с мультистеп формами • Работа с модальными окнами • Примеры в модуле ctools_ajax_sample
Спасибо за внимание! Масловский Евгений http://drupalace.ru