2012-01-04 217 views
2

我在标准“创建帐户”页面中添加了一些额外字段;特别是'确认电子邮件'字段。Drupal 7 - 确认电子邮件地址

如何勾入验证,以便我可以添加自己的一些自定义验证规则(例如,检查两个电子邮件匹配)?

我发现hook_user_presave,但我对我应该如何代码它或者把它不确定。

任何和所有的帮助表示赞赏。

回答

4

我会建议安装LoginToboggan module,它实际上具有开箱即用的准确功能选项,并且还有其他一些有用的选项。

如果你想自己做,虽然你可能会被关闭实施hook_form_FORM_ID_alter()和直接添加验证功能的registration form更好:

function mymodule_form_user_register_form_alter(&$form, &$form_state, $form_id) { 
    $form['#validate'][] = 'mymodule_user_register_form_validate'; 
} 

function mymodule_user_register_form_validate(&$form, &$form_state) { 
    if ($form_state['values']['first_email'] != $form_state['values']['second_email']) { 
    form_set_error('second_email', 'The email addresses much match.'); 
    } 
} 

确保您清除Drupal的缓存,一旦你已经实现了形成alter函数,以便Drupal正确注册它。

希望有所帮助。

+1

我看到这个答案已被接受,但我认为该代码段缺少一些代码。 $ form ['second_email']字段在哪里创建? – greggles 2012-12-27 17:02:53

+0

@greggles这是一段时间以前,但我可能只是把这些字段名称作为例子; '$ form ['first_email']'不会作为标准 – Clive 2012-12-27 22:05:32

3

下面是Drupal 7的示例解决方案:

/** 
* Implements hook_menu(). 
* Note: You can define your own menu callback optionally. 
*/ 
function foo_menu() { 
    $items['foo-signup'] = array(
    'title' => 'Create new account', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('user_register_form'), 
    'access callback' => 'user_register_access', 
    'type' => MENU_CALLBACK, 
); 
    return $items; 
} 

/** 
* Implements hook_form_FORM_ID_alter(). 
*/ 
function foo_form_user_register_form_alter(&$form, &$form_state, $form_id) { 
    $form['account']['mail_confirm'] = array(
    '#type' => 'textfield', 
    '#title' => t('Confirm e-mail address'), 
    '#maxlength' => EMAIL_MAX_LENGTH, 
    '#description' => t('Please confirm your e-mail address.'), 
    '#required' => TRUE, 
); 
    $form['#validate'][] = 'foo_user_register_form_validate'; 
} 

/** 
* Implements validation callback. 
*/ 
function foo_user_register_form_validate(&$form, &$form_state) { 
    if ($form_state['values']['mail'] != $form_state['values']['mail_confirm']) { 
    form_set_error('mail_confirm', 'The email addresses must match.'); 
    } 
} 
+0

嗨,这对我的注册页面非常有用,但确认字段正在密码字段下面显示...按以下顺序:[email] [密码] [密码确认] [电子邮件确认]。如何重新对这些进行排序,以便[email confirm]字段直接位于[email]字段之后? – hockey2112 2017-05-25 20:18:30

+0

@ hockey2112您可以尝试添加具有某些值的'#weight'属性。 – kenorb 2017-05-25 20:38:31

+0

添加weight属性确实会影响它,但权重为“-1”会将确认字段放在“电子邮件地址”和“密码”字段的上方,而任何权重为0或更大的字符将其放回到这些字段下方的底部。看起来,电子邮件地址和密码字段都具有“0”的权重。任何想法如何解决这个问题? – hockey2112 2017-05-26 22:11:53