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'); } }
Комментарии
А можно также переопределить валидацию логина при регистрации в D7, чтобы запрещены были кириллистические логины?
можно
form_set_error() оставляет юзера на форме, с ообщением об ошибке.
А как программно изменить/скорректировать значение ошибочного поля?
$form_state же не по ссылке передается. Да и пробовал я менять на
function mymodule_phone_validate($form, &$form_state) { ...
и потом менять значение
$form_state['values']['profile_phone'] = 'new_value';
но в форме отображается старое значение
по ссылке.
Ок, по ссылке. Ну а каккие поля менять, чтобы они изменились в форме?
В общем вот рабочий код
@seoDemon, form_set_value
Оставить комментарий