Webform: своя валидация полей и значения по умолчанию





В этом посте решил собрать и объединить несколько плюшек по работе с модулем webform.

Валидация полей формы

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

Поэтому уже взял за практику выставлять значение по умолчанию "+375 ХХ ХХХ-ХХ-ХХ", которое пользователь видит и уже что-то в этом ключе вводит. И чтобы пользователь не засабмитил форму со значением по умолчанию:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if($form_id=='webform_client_form_XX')  {
    $form['#validate'][]='mymodule_validate';
    return $form;
  }
 
}
function mymodule_validate($form,&$form_state) {
  $phoneval=$form_state['values']['submitted']['phone'] 
  if($phoneval=='' || $phoneval == '+375 ХХ ХХХ-ХХ-ХХ')  {
    form_set_error('phone','Укажите номер телефона');
  }
} 

Динамическое значение по умолчанию для полей

Иногда приходится создавать формы (например, "заказ тура") и выводить их блоком на странице тура. Чтобы не заставлять пользователя писать, какой тур он хочет заказать, а цеплять его автоматически из заголовка просматриваемой страницы было решено добавить еще одно поле "тип тура" и запретить его редактирование.

Далее маленький кусок кода, который и делает немного магии:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if($form_id=='webform_client_form_XX')  {
    if ($node = menu_get_object()) {
      $form['submitted']['tip_tura']['#default_value'] = $node->title;
    }
  }

Вуаля :)





Комментарии

Подскажите, пожалуйста, в какой файл необходимо вставить данный код, чтобы заработало? Заранее огромное спасибо за ответ!!!

используй вместо hook_form_alter — hook_form_FORM_ID_alter, меньше оверхед будет

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
Drupal
29
03 '13 — 13:16:44