Аякс-Форма в блоке

Главные вкладки

Аватар пользователя xakd xakd 22 августа 2017 в 13:10

Есть формочка в блоке, сделанная через модуль, с отправкой результатов на почту. Понадобилось перебить её на Аякс - чтобы не было перезагрузки. Так то сделал, но некоторое поведение формы никак не могу осуществить - точнее не очень знаю,как это правильно делать.
Нужно чтобы после заполнения формы и отправки вместо формы проявлялось сообщение, ну типа "Вы ввели такие то данные. спасибо." - а формы не было видно. Не могу понять как это сделать, сообщение то можно вывести, но по какому триггеру скрывать форму?
С обычной формой рецепт известен - редирект на другую страницу, а как с аякс-формой такое делают?

Так же при ошибке ввода нужно подсвечивать красным поля с неверным вводом без вывода сообщений - тоже непонятно как, сообщение вывожу, а поля наоборот не подсвечиваются.

Может кто знает, как подобные проблемы обычно решаются с аякс-формами в блоках?

В итоге почти все проблемы решил с помощью вот этого примера. http://drupalace.ru/lesson/mnogoshagovye-multistep-formy-na-ajax-v-drupal-7 Разве что результат выполнения формы пришлось заменить

Лучший ответ

Аватар пользователя gun_dose gun_dose 23 августа 2017 в 12:26

Сообщения об ошиках можно убрать с помощью drupal_get_messages(); Просто вызвать эту функцию и всё.

Комментарии

Аватар пользователя bumble bumble 22 августа 2017 в 21:14

xakd wrote:

по какому триггеру скрывать форму?

В генераторе формы добавляйте условие, приблизительно так:

<?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'].

xakd wrote:

при ошибке ввода нужно подсвечивать красным поля

Я бы смотрел в сторону команд.

Аватар пользователя xakd xakd 23 августа 2017 в 8:50

Короче проблему сокрытия формы решил через установку префикса вокруг всей формы и вывода сообщения после отправки формы. Теперь осталась проблема, по-какому триггеру определять, есть ли ошибки в форме(не все данные введены) и выводить тогда ошибку. а не итоговое сообщение с данными....

То есть как узнать в callback-функции, что форма выдала ошибку, и на каких элементах ошибка?

PS Как узнать что форма выдает ошибку - решил пока через параметр $form_state['executed'].

Теперь бы узнать, какие поля выдают ошибку...

Аватар пользователя xakd xakd 23 августа 2017 в 11:12

Как узнать в callback функции.
Впрочем теперь часть задач отпала. осталась фактически одна - как убрать сообщения об ошибках, а подсветку( выделением красным поле) оставить