我有一个网站,其中一些用户将由我们的员工注册,并且不会有与之关联的电子邮件。我想将电子邮件字段保留为必填字段,因此我设计了一个随机电子邮件生成器。
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 :(得分:4)
您目前正在使用hook_user
进行操作,但这是错误的地方。在$ op'registration'上,您可以返回要注册到注册过程的其他字段,但不能更改现有字段。请使用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',或者更好的是你自己拥有的那个!