Добрый день!
Создаю элементарную форму для отправки письма на почту.
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('Заказ успешно отправлен');
}
Ничего особенного. При вводе обязательных полей сабмитится и выводит сообщение об отправке.
А вот если не введено какое-либо обязательное поле, сообщение об этом выводит не сразу, а после перезагрузки страницы с формой.
Подскажите, в чем здесь дело?
Спасибо!
Комментарии
Где и как Вы выводите свою форму?
Так и должно быть (если не ставили дополнительно модулей валидации вводимых данных на клиенте), что вас смущает?
А я чего-то подумал, что он имеет в виду следующее: не заполняет обязательные поля, отправляет форму, ошибок нет, перегружает страницу и тогда их видит. ТС, уточните
Такое бывает при выводе формы, например, программно в шаблонах, когда $messages уже сформирована, потому ошибки видны лишь потом.
Да, CSoft прав. Форму вывожу через render(drupal_get_form('order_form')) в шаблоне page.tpl.php.
Так что с этим делать-то?
В своём модуле drupal_get_form выполнять, а не в шаблоне
Через
http://api.drupal.org/api/drupal/includes!theme.inc/function/template_pr...
определите переменную с массивом формы (drupal_get_form), а в шаблоне уже рендерьте эту переменную.
Спасибо за помощь! Заработало. )))