2010-03-05 105 views
3

我有一個網站,其中一些用戶將由我們的工作人員註冊,並且不會有與其關聯的電子郵件。我想將電子郵件字段保留爲必填字段,因此我設計了一個隨機電子郵件生成器。在Drupal中掛鉤用戶註冊

function generateRandomEmail() { 
    $email = 'noemail'. rand(0,1000000) . '@noemail.com'; 
    return $email; 
    } 

因此,我將它附加到用戶註冊表alter,並且它運行良好,可以爲這些用戶有效生成電子郵件。

但是,在此過程中,與主帳戶部分(密碼,用戶名,通知等)相關的所有其他字段都消失了。我的問題是,有沒有一種快速填充我不想改變的字段的方法?我用過drupal_render($ form);在tpl.php中,但它沒有在alter形式中工作。

這裏是我改變形式:

function accountselect_user($op, &$edit, &$account, $category) { 
    if ($op == 'register') { 

     $fields['account']['mail'] = array(
     '#type' => 'textfield', 
     '#default_value' => generateRandomEmail(), 
    ); 
+0

不是你的問題的答案,但你知道'noemail.com'是一個現有的域名,將收到郵件發送到您的'隨機'電子郵件地址?你應該使用你自己的域名,或者至少是正式保留的'example.com'來防止發送郵件給無關的參與者! – 2010-03-05 10:21:35

回答

4

您目前正在使用hook_user您的操作,但畢竟是放錯了地方。在$ op'註冊'上,您可以返回其他字段要注入註冊過程,但不能更改現有字段。使用hook_form_alter()hook_form_FORM_ID_alter()爲,例如:

function yourModule_form_user_register_alter(&$form, &$form_state) { 
    $form['account']['mail']['#default_value'] = generateRandomEmail(); 
} 

你可能想增加一個檢查該請求實際上由工作人員來了,因爲上面的代碼會預填充電子郵件字段爲正常登記表也!


另外,請不會產生使用現有的第三方域名「隨機」郵件地址(如「nomail.com」)。使用保留的'example.com',或者更好的是,你自己擁有一個!