Проблема с валидацией формы

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

Аватар пользователя sysdimon sysdimon 17 апреля 2013 в 15:34

Добрый день!

Создаю элементарную форму для отправки письма на почту.

function order_form($form, &$form_state)
{
$form = array();
$form['name'] = array(
'#title' => 'Ваше имя',
'#type' => 'textfield',
'#required' => true,
);
$form['phone'] = array(
'#title' => 'Ваш телефон',
'#type' => 'textfield',
'#required' => true,
);
$form['mail'] = array(
'#title' => 'Ваш e-mail',
'#type' => 'textfield',
);
$form['message'] = array(
'#title' => 'Ваше сообщение',
'#type' => 'textarea',
'#resizable' => false
);
$form['button'] = array(
'#value' => 'Отправить',
'#type' => 'submit',
'#suffix' => '* — поля, обязательные для заполнения',
);
$form['#attributes'] = array(
'class' => 'order'
);
return ($form);
}

function order_form_submit($form, &$form_state)
{
drupal_mail('system', 'mail', 'info@info.ru', language_default() , array(
'context' => array(
'subject' => 'Заявка с сайта',
'message' => '
' . $form_state['values']['name'] . '
' . $form_state['values']['phone'] . '
' . $form_state['values']['mail'] . '
' . $form_state['values']['message'],
)
));
drupal_set_message('Заказ успешно отправлен');
}

Ничего особенного. При вводе обязательных полей сабмитится и выводит сообщение об отправке.
А вот если не введено какое-либо обязательное поле, сообщение об этом выводит не сразу, а после перезагрузки страницы с формой.

Подскажите, в чем здесь дело?

Спасибо!

Комментарии

Аватар пользователя duozersk duozersk 17 апреля 2013 в 16:12

"sysdimon" wrote:
А вот если не введено какое-либо обязательное поле, сообщение об этом выводит не сразу, а после перезагрузки страницы с формой.

Так и должно быть (если не ставили дополнительно модулей валидации вводимых данных на клиенте), что вас смущает?

Аватар пользователя CSoft CSoft 17 апреля 2013 в 16:16

А я чего-то подумал, что он имеет в виду следующее: не заполняет обязательные поля, отправляет форму, ошибок нет, перегружает страницу и тогда их видит. ТС, уточните Smile Такое бывает при выводе формы, например, программно в шаблонах, когда $messages уже сформирована, потому ошибки видны лишь потом.

Аватар пользователя CSoft CSoft 17 апреля 2013 в 17:07

"sysdimon" wrote:
Так что с этим делать-то?

В своём модуле drupal_get_form выполнять, а не в шаблоне Smile Через

http://api.drupal.org/api/drupal/includes!theme.inc/function/template_pr...

определите переменную с массивом формы (drupal_get_form), а в шаблоне уже рендерьте эту переменную.