2010-03-05 124 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',或者更好的是,你自己拥有一个!