2012-01-04 8 views
2

標準の 'アカウントの作成'ページに追加フィールドを追加しました。特に、 '確認メール'フィールド。Drupal 7 - 電子メールアドレスの確認

独自のカスタム検証ルールを追加できるように(たとえば、2つの電子メールが一致しているかどうかを確認するため)、検証にどのようにフックしますか?

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のキャッシュを作成しますdrupalはそれを正しく登録します。

希望に役立ちます。ここで

+1

私はこの答えが受理された参照が、私は、コードスニペットは、コードのビットが欠けていると思います。 $ form ['second_email']フィールドはどこに作成されていますか? – greggles

+0

@gregglesもう少し前ですが、おそらく例としてフィールド名を入れています。 '$ form ['first_email']'は標準ではありません – Clive

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

こんにちは、これは私の登録ページではうまくいきますが、パスワードフィールドの下に確認フィールドが表示されています。 [パスワード] [パスワード確認] [電子メール確認] [電子メール確認]フィールドが[電子メール]フィールドの直後になるように、これらの並べ替えを行うにはどうすればよいですか? – hockey2112

+0

@ hockey2112いくつかの値とともに '#weight'属性を追加することができます。 – kenorb

+0

weight属性を追加すると影響がありますが、 "-1"の重みは確認フィールドを電子メールアドレスフィールドとパスワードフィールドの上に置き、0以上の値を指定するとそのフィールドの下に下に戻ります。 [電子メールアドレス]フィールドと[パスワード]フィールドの重みはすべて「0」であるようです。それを回避する方法に関するアイデア? – hockey2112

関連する問題