Есть формочка в блоке, сделанная через модуль, с отправкой результатов на почту. Понадобилось перебить её на Аякс - чтобы не было перезагрузки. Так то сделал, но некоторое поведение формы никак не могу осуществить - точнее не очень знаю,как это правильно делать.
Нужно чтобы после заполнения формы и отправки вместо формы проявлялось сообщение, ну типа "Вы ввели такие то данные. спасибо." - а формы не было видно. Не могу понять как это сделать, сообщение то можно вывести, но по какому триггеру скрывать форму?
С обычной формой рецепт известен - редирект на другую страницу, а как с аякс-формой такое делают?
Так же при ошибке ввода нужно подсвечивать красным поля с неверным вводом без вывода сообщений - тоже непонятно как, сообщение вывожу, а поля наоборот не подсвечиваются.
Может кто знает, как подобные проблемы обычно решаются с аякс-формами в блоках?
В итоге почти все проблемы решил с помощью вот этого примера. http://drupalace.ru/lesson/mnogoshagovye-multistep-formy-na-ajax-v-drupal-7 Разве что результат выполнения формы пришлось заменить
Комментарии
В генераторе формы добавляйте условие, приблизительно так:
<?php
function myform_callback($form, &$form_state) {
if (empty($form_state['myform_submit_data'])) {
// Реализация формы
}
else {
$form = array(
'#markup' => t('You data: %val1, %val2', array(
'%val1' => $form_state['myform_submit_data']['val1'],
'%val2' => $form_state['myform_submit_data']['val2'],
)),
);
}
return
$form;}
?>
При отправке формы устанавливать данные из $form_state['values'] в массив $form_state['myform_submit_data'].
Я бы смотрел в сторону команд.
Короче проблему сокрытия формы решил через установку префикса вокруг всей формы и вывода сообщения после отправки формы. Теперь осталась проблема, по-какому триггеру определять, есть ли ошибки в форме(не все данные введены) и выводить тогда ошибку. а не итоговое сообщение с данными....
То есть как узнать в callback-функции, что форма выдала ошибку, и на каких элементах ошибка?
PS Как узнать что форма выдает ошибку - решил пока через параметр $form_state['executed'].
Теперь бы узнать, какие поля выдают ошибку...
hook_form_validate + form_set_error
Как узнать в callback функции.
Впрочем теперь часть задач отпала. осталась фактически одна - как убрать сообщения об ошибках, а подсветку( выделением красным поле) оставить
Сообщения об ошиках можно убрать с помощью drupal_get_messages(); Просто вызвать эту функцию и всё.
Круто. Я убрал в итоге через css - но счас на ваше решение заменю...
Поставьте и включите примеры ajax https://www.drupal.org/project/examples там много вариантов и все Ваши вопросы, - решены.
Submit-driven AJAX решает Ваши задачи для выдачи
См. ajax_command_replace
Ну список функций ajax_commend я знаю, вопрос как с помощью них проблему решить