xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Как добавить валидацию одного из полей расширенного профиля

Пример валидации поля profile_phone созданного в профиле с помощью модуля Profile:

/**
 * Implements hook_form_alter().
 */
function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_profile_form' || $form_id == 'user_register') {
    $form['#validate'][] = 'mymodule_phone_validate';
  }
}
 
/**
 * Phone validate callback.
 */
function mymodule_phone_validate($form, $form_state) {
  if (isset($form_state['values']['profile_phone']) && !preg_match('#\d{4}-\d{3}-\d{3}#', $form_state['values']['profile_phone'])) {
    form_set_error('profile_phone', 'Поле Телефон заполнено неверно. Пример правильного заполнения: 8908-546-789');
  }
}
Написанное актуально для Drupal 6
Похожие записи

Комментарии RSS

А можно также переопределить валидацию логина при регистрации в D7, чтобы запрещены были кириллистические логины?

можно

form_set_error() оставляет юзера на форме, с ообщением об ошибке.
А как программно изменить/скорректировать значение ошибочного поля?
$form_state же не по ссылке передается. Да и пробовал я менять на
function mymodule_phone_validate($form, &$form_state) { ...
и потом менять значение
$form_state['values']['profile_phone'] = 'new_value';
но в форме отображается старое значение

$form_state же не по ссылке передается

по ссылке.

Ок, по ссылке. Ну а каккие поля менять, чтобы они изменились в форме?

В общем вот рабочий код

function MY_MODULE_form_alter(&$form, &$form_state, $form_id)
{
  if ($form_id == 'FORM_ID')
  {
    $form['#validate'][] = 'MY_MODULE_node_form_validate';
  }
}
 
function MY_MODULE_node_form_validate($form, &$form_state)
{
  // Считыем значение
  $status = $form_state['values']['status']; 
  // Устанавливаем значение
  $form_state['values']['field_text'][LANGUAGE_NONE][0]['value'] = 'Hello World!'; 
}

@seoDemon, form_set_value

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании