drupal-7 - 如何以编程方式在 drupal 7 中添加新用户?我的自定义模块定义了带有自定义字段的表单

标签 drupal-7 drupal-modules drupal-forms

您好,作为 drupal 的新手,请指导如何添加新用户,我知道可以使用带有 user_save 的用户模块,但是如何以及在哪里实现它?
我是否必须在下面的自定义表单的提交处理程序中编写此函数 -

function registerme_newform($form, &$form_state) 
{
$form = array();
$form['account details'] = array(
'#type' => 'fieldset',
'#title' => t('Account Details'),
'#description' => t('Enter Personal Credentials'),
);
$form['account details']['first name'] = array(
'#type' => 'textfield',
'#title' => t('First Name'),
'#default_value' => t('Be sure of your first name'),
'#attributes' => array(
'onblur' => "if (this.value == '') {this.value = 'Be sure of your first name'}",
'onfocus' => "if (this.value == 'Be sure of your first name') {this.value = ''}" 
  , ), 
   ); 
 $form['account details']['last name'] = array(
'#type' => 'textfield',
'#title' => t('Last Name'),
'#default_value' => t('Be sure of your last name'),
'#attributes' => array(
'onblur' => "if (this.value == '') {this.value = 'Be sure of your last name'}",
'onfocus' => "if (this.value == 'Be sure of your last name') {this.value = ''}" 
   , ), );

 $form['account details']['email'] = array(
'#type' => 'textfield',
'#title' => t('E-Mail'),
'#required' => TRUE,
'#default_value' => t('Email acts as username.Dont forget it!'),
'#attributes' => array(
'onblur' => "if (this.value == '') {this.value = 'Email acts as username.Dont forget 
 it!'}",
'onfocus' => "if (this.value == 'Email acts as username.Dont forget it!')
 {this.value = ''}" 
   , ), 
 );

$form['account details']['password'] = array(
'#type' => 'password',
'#title' => t('Password'),
'#maxlength' => 60,
'#size' => 60,
'#required' => TRUE,
'#description' => t('Password should be atleast 6 characters long.'),
);

 $form['home'] = array(
'#type' => 'fieldset',
'#title' => 'Home Address',
'#description' => t('Enter Personal Residential Credentials')
 );

 $form['home']['street'] = array(
'#type' => 'textfield',
'#title' => 'Street Address',
 );

 $form['home']['city'] = array(
'#type' => 'textfield',
'#title' => 'City',
 );

 $form['work'] = array(
'#type' => 'fieldset',
'#title' => 'Work Address',
 '#description' => t('Enter Official Address')
 );

 $form['work']['street'] = array(
'#type' => 'textfield',
'#title' => 'Street Address',
 );

 $form['work']['city'] = array(
'#type' => 'textfield',
'#title' => 'City',
);

 $form['submit'] = array(
 '#type' => 'submit',
 '#value' => t('Register Me'),
 );

 return $form;

 }

 function registerme_newform_validate(&$form, &$form_state)
 {
 if($form_state['values']['account details']['first name']=='Be sure of your first
 name')
 {
  form_set_error('first name',t('Please enter your first name'));
 }
 } 
 function registerme_newform_submit(&$form, &$form_state)
 {
 dsm($form_state); 
  }


还想知道如何在数据库中输入值,我的意思是如何将这些自定义字段添加到数据库中?请指导谢谢。

最佳答案

首先请检查名字是否是允许的用户名。我建议您提供另一个字段来输入用户名,因为用户名已被其他人使用的情况并不罕见。然后还要检查是否没有用户使用给定的电子邮件地址注册。

function registerme_newform_validate(&$form, &$form_state) {
  if($form_state['values']['account details']['first name']=='Be sure of your first
  name') {
  form_set_error('first name',t('Please enter your first name'));
  }
  // TODO: Provide user with a chance to enter a name ( drupal user name )
  // Also do the following two checks and report an error.
  // check using user_load_by_name($form_state['values']['account details']['first anme'])
  // check using user_load_by_mail($form_state['values']['account details']['email'])
} 

接下来在提交函数中将表单值映射到可以传递给 user_save 的数组,如下所示。如果您想准确了解其他字段如何映射,请使用 devel 模块通过查看现有的用户配置文件来检查结构。

function registerme_newform_submit(&$form, &$form_state){
  $new_user = array(
    // The below name field must be unique.
    'name' => $form_state['values']['account details']['name'],
    'pass' => $form_state['values']['account details']['password'],
    'mail' => $form_state['values']['account details']['email'],
    'init' => $form_state['values']['account details']['email'],
    'field_first_name' => array(LANGUAGE_NONE => array(array('value' => $form_state['values']['account details']['first name']))),
    'field_last_name' => array(LANGUAGE_NONE => array(array('value' => $form_state['values']['account details']['last name']))),
    // Map all the extra fields to user objects as shown above.
    ...

    'status' => 1,
    'access' => REQUEST_TIME,
    'roles' => $roles,
  );

  // $account returns user object
  $account = user_save(null, $new_user);
  //after user_save you can use the following code to send notification email.
  drupal_mail('user', 'register_no_approval_required', $account->mail, NULL, array('account' => $account), variable_get('site_mail', 'noreply@mysite.com'));
}

关于drupal-7 - 如何以编程方式在 drupal 7 中添加新用户?我的自定义模块定义了带有自定义字段的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12902098/

相关文章:

ssl - Drupal - 使用 ssl 证书时出现混合内容错误

php - 如何使用 node_load 并呈现上下文链接

drupal-forms - Drupal 8、如何构建分层表单?

drupal - 如何显示/验证节点列表页面的错误

php - 哪些 Drupal 核心函数可用于调用钩子(Hook)?

drupal - 如何在 View 批量操作期间显示附加表单?

csv - 将数组导出为 CSV

Drupal 面板页面 Pathauto

Drupal 仅根据位置显示某些内容

Drupal 仅作为服务层