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

08.04.2011

Пример валидации поля 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
Похожие записи

Комментарии

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

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

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

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

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!'; 
}

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