Использование Ajax в Drupal.
Если вы разрабатываете свой модуль для Drupal, то использование Ajax поможет улучшить взаимодействие пользователя с вашими страницами, т.к. обмен данными с сервером здесь производится без перезагрузки страниц, а это значит, что скорость работы последних будет значительно выше. Ajax позволяет избавить пользователя от утомительного ожидания «когда же, наконец, эти данные загрузятся».
Алгоритм создания нужных функций включает в себя следующие этапы:
1. Реализация hook_menu(), чтобы «зарегистрировать» алиас-путь к функции, обрабатывающей Ajax-запрос.
2. Создание функции, обрабатывающей Ajax-запрос.
3. Создание JS-кода, который делает запрос к серверу и обрабатывает ответ.
Рассмотрим простой пример использования Ajax в Drupal. Допустим, нам необходимо передать на сервер одно из двух значений и, в зависимости, от него, вернуть ‘1’ или ‘2’ (первое или второе значение). Условно назовем модуль «my_module».
1. Реализация hook_menu(). В файле нашего модуля my_module.module создаем функцию my_module_menu().
1 2 3 4 5 6 7 8 |
function my_module_menu(){ $items['ajax-numbers'] = array( 'access callback' => TRUE, 'page callback' => 'my_module_menu_ajax_callback', 'type' => MENU_CALLBACK ); return $items; } |
Здесь мы «регистрируем» алиас «ajax-numbers», при обращении к которому будет вызываться функция my_module_menu_ajax_callback().
2. Создание функции, обрабатывающей Ajax-запрос.
1 2 3 4 5 6 7 8 9 10 11 12 |
function my_module_menu_ajax_callback(){ //достаем значение нашей переменной из массива $_POST. $number = $_POST['number']; //в зависимости от присылаемого значения определяем ответ. if($number == 1){ $answer = 1; }else{ $answer = 2; } //отдаем ответ echo $answer; } |
3. Создание JS-кода. Включаем в html-код в нужное место следующие строки (код может быть помещен в определенную функцию javascript).
1 2 3 4 5 6 7 8 9 |
<script> //определяем путь к функции нашего модуля url = Drupal.settings.basePath + "ajax-quotes"; //отправляем наши данные методом post (отправляем значение number = 1). $.post(url, { number: '1'},function(data) { //выводим ответ сервера методом alert. alert(data); }); </script> |
В результате работы нашего скрипта должно появиться всплывающее окно со значением 1. Не забудьте почистить кэш при добавлении новых функций в файлы вашего модуля.