Пример создания AJAX формы с помощью концепции прогрессивного улучшения (progressive enhancement). Такая форма будет работать даже при выключенном javascript.
1. Создаём обычную форму с submit callback-ом:
/**
* Form builder
*/
function mymodule_myform($form, $form_state) {
$form['sometext'] = array(
'#type' => 'textfield',
'#title' => 'Some text',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
}
/**
* Form submit callback
*/
function mymodule_myform_submit($form, $form_state) {
... // Submit logic
drupal_set_message('Form submitted.');
}
2. Добавляем AJAX функциональность:
/**
* Form builder
*/
function mymodule_myform($form, $form_state) {
$form['sometext'] = array(
'#type' => 'textfield',
'#title' => 'Some text',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
// new
'#ajax' => array(
'callback' => 'mymodule_myform_ajax_callback'
),
);
return $form;
}
/**
* Form submit callback
*/
function mymodule_myform_submit($form, $form_state) {
... // Submit logic
drupal_set_message('Form submitted.');
}
/**
* Form AJAX callback
*/
function mymodule_myform_ajax_callback($form, $form_state) { // new
return array(
'#type' => 'ajax',
'#commands' => array(
ajax_command_html('#' . $form['#id'], theme('status_messages')),
),
);
}
Написанное актуально для
Drupal 7
Похожие записи
- Показать второй шаг многошаговой формы в модальном окне
- Навесить на элемент managed_file свой ajax callback (Как обновить всю форму при загрузки файла в managed_file)
- Восстанавливаем позицию текстового курсора при ajax обновлении формы
- Как выполнять свой js-код до или после любых AJAX запросов (изменение работы AJAX API)
- AJAX в форме корзины Commerce 2
Комментарии
Graceful degradation - это отказоустойчивость. Прогрессивное улучшение - это "progressive enhancement". Разница в терминах в данном случае несущественна, но она есть. См. http://designformasters.info/posts/understanding-progressive-enhancemen…
спасибо, исправил
Недавно мы выложили на дорг модуль asaf (ajax submit for any form) который берет на себя всю рутину по созданию колбеков, навешивания '#ajax'.
Т.е. в простейшем случае можно просто указать форм_ид в настройках и форма будет отправляться аяксом. Можно указать только некоторые кнопки, на которые стоит цепляться. Можно юзать его API: хуки для изменения списка ajax-комманд и т.д.
Может кому будет интересно :)
Установил модуль asaf (ajax submit for any form) у себя. Форма имеет около 25 полей. Аякс не работает. Лоадер крутится, но это и все. Жаль.
Какую версию качали? Как подключали к форме? js-ошибки есть? Напишите мне пожалуйста, на taldy (at) yandex.ru, или issue заведите.
Если ли способ узнать прошла ли форма валидацию или нет ? Нужно чтобы mymodule_myform_ajax_callback вызывался только в случае если нет ошибок(запонены обязательные поля),и тогда сообщение об успешной отправке заменяло форму. сейчас сообщения об ошибке также заменяют форму
Можно. В $form_state['asaf_form_status'] в случае ошибок будет находиться значение "errors".
Вы не первый кто спрашивает, поэтому в будущем сделаю чтобы по-умолчанию commands_alter-хуки не вызывались при ошибках валидации.
Добавить комментарий