Drupal 7 - 确认电子邮件地址
我在标准“创建帐户”页面中添加了一些额外字段;特别是'确认电子邮件'字段。Drupal 7 - 确认电子邮件地址
如何勾入验证,以便我可以添加自己的一些自定义验证规则(例如,检查两个电子邮件匹配)?
我发现hook_user_presave,但我对我应该如何代码它或者把它不确定。
任何和所有的帮助表示赞赏。
我会建议安装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正确注册它。
希望有所帮助。
下面是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.');
}
}
嗨,这对我的注册页面非常有用,但确认字段正在密码字段下面显示...按以下顺序:[email] [密码] [密码确认] [电子邮件确认]。如何重新对这些进行排序,以便[email confirm]字段直接位于[email]字段之后? – hockey2112 2017-05-25 20:18:30
@ hockey2112您可以尝试添加具有某些值的'#weight'属性。 – kenorb 2017-05-25 20:38:31
添加weight属性确实会影响它,但权重为“-1”会将确认字段放在“电子邮件地址”和“密码”字段的上方,而任何权重为0或更大的字符将其放回到这些字段下方的底部。看起来,电子邮件地址和密码字段都具有“0”的权重。任何想法如何解决这个问题? – hockey2112 2017-05-26 22:11:53
我看到这个答案已被接受,但我认为该代码段缺少一些代码。 $ form ['second_email']字段在哪里创建? – greggles 2012-12-27 17:02:53
@greggles这是一段时间以前,但我可能只是把这些字段名称作为例子; '$ form ['first_email']'不会作为标准 – Clive 2012-12-27 22:05:32