Проверка по форме регистрации пользователя?
Я сделал модуль, в котором я пытаюсь добавить проверку, как если бы пользователь ввел символы в текстовом поле "Номер телефона" и то же самое в "Мобильном №".
Это будет работать, когда пользователь открыл форму регистрации пользователя.
Я сделал это....
<?php
function form_intro_form_alter($form_id,&$form){
if($form_id == 'user_register' || $form_id == 'user_edit'){
$form['Personal Information']['profile_pno']['#validate'] = array('form_intro_pno_validate' => array()); //profile_pno is for Phone No.
$form['Personal Information']['profile_mno']['#validate'] = array('form_intro_mno_validate' => array()); //profile_mno is for Mobile No.
}
}
function form_intro_pno_validate($element){
if(!is_numeric($element['#value'])){
form_set_error('profile_pno' , t('Please Enter Only Number in Phone no'));
}
}
function form_intro_mno_validate($element){
if(!is_numeric($element['#value'])){
form_set_error('profile_mno' , t('Please Enter Only Number in Mobile no'));
}
}
?>
имя модуля form_intro.....
Пожалуйста, проверьте это и пришлите мне реплей...
это не работает... это не дает никакой ошибки, когда пользователь ввел символы.
2 ответа
Вам нужно использовать #element_validate
передать обработчик проверки для каждого элемента или $form['#validate']
добавить обработчик проверки в форму. Вот почему это не работает.
РЕДАКТИРОВАТЬ:
Другая причина, почему это не работает для вас, заключается в том, что вы неправильно реализовали хук. Для крючка hook_form_FORM_ID_alter
нужно заменить hook
с именем вашего модуля и FROM_ID
с идентификатором формы.
Пример:
function my_module_form_intro_form_alter(&$form, &$form_state) {
$form['#validate'][] = 'my_module_form_validation_handler';
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#description' => t('The title you enter here appears on the page.'),
'#size' => 40,
'#maxlength' => 255,
`#element_validate` => array('my_module_element_validation_handler'),
);
}
Делая выше, функция my_module_form_validation_handler
будет вызываться для всей формы, в то время как my_module_element_validation_handler
будет вызван для title
элемент формы.
Я пытался с hook_user..
<?php
function legalagree_user($op, &$edit, &$user, $category = NULL) {
switch($op) {
case 'validate':
if (!is_numeric($edit['profile_mno'])) {
form_set_error('profile_mno', t('You have to enter only numbers in Mobile No Field.'));
}
return;
}
}
Это работает.....