2012-01-04 249 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