Drupal 如何在注册期间合并字段以生成用户名?

Drupal 如何在注册期间合并字段以生成用户名?,drupal,forms,drupal-hooks,Drupal,Forms,Drupal Hooks,在一个自定义模块“nade_reg”中,我将注册表更改为包含两个字段,以收集用户的名字和姓氏,同时隐藏用户名字段。我不知道这是否与此相关,但我确实启用了登录雪橇模块 提交时,我希望用户名成为Firstname Lastname(带空格) 我一直在尝试使用提交处理程序来实现这一点,但系统似乎无法识别我的函数(即使在清除了大量缓存之后),因此无法判断我的错误在哪里 下面的代码是否正确,或者我是否需要与数组进行一些争论 你知道为什么这个系统看不到吗 function nade_reg_user_reg

在一个自定义模块“nade_reg”中,我将注册表更改为包含两个字段,以收集用户的名字和姓氏,同时隐藏用户名字段。我不知道这是否与此相关,但我确实启用了登录雪橇模块

提交时,我希望用户名成为Firstname Lastname(带空格)

我一直在尝试使用提交处理程序来实现这一点,但系统似乎无法识别我的函数(即使在清除了大量缓存之后),因此无法判断我的错误在哪里

下面的代码是否正确,或者我是否需要与数组进行一些争论

你知道为什么这个系统看不到吗

function nade_reg_user_register_submit($form, &$form_state) {
  drupal_set_message(t('function redlemonade_register_user_register_submit sucessfully called.'));

  $name = $form_state['values']['field_uprofile_first_name1'] . ' ' . $form_state['values']['field_uprofile_last_name1'];
}

您需要设置
$form\u state['values']['name']
,而不仅仅是
$name

您需要设置
$form\u state['values']['name']
,而不仅仅是
$name

我有一个类似的要求,我希望用户名始终与电子邮件相等。我通过在注册表中隐藏用户名,然后使用user_presave()钩子实现了这一点

对你来说,它看起来像这样

function nade_reg_user_presave (&$edit, $account, $category) {

  // check that the names are being edited, or else you will overwrite 
  // with a blank username
  if (array_key_exists('first_name', $edit) && 
      array_key_exists('last_name', $edit)) {
    $edit['name'] = $edit['first_name'] . ' ' . $edit['last_name'];
  }

}
编辑:对于每个评论中的Drupal6(我认为这会起作用),我已经使用hook_user()完成了我在D7中所做的工作,尽管这有点混乱

function nade_reg_user($op, &$edit, &$account, $category = NULL) {
  if (($op == 'insert' || $op == 'edit')  // if its the right operation
       && array_key_exists('first_name', $edit)  // and the right edits
       && array_key_exists('last_name', $edit)) {   
    $name = $edit['first_name'] . ' ' . $edit['last_name'];
    $qry = "UPDATE {users} SET name = '%s' WHERE uid = %d";
    if (db_query($qry, $name, $account->uid)) {
      $edit['name'] = $name; // update in the user array for access by other modules
    }
  }
}

我有一个类似的要求,我希望用户名始终等于电子邮件。我通过在注册表中隐藏用户名,然后使用user_presave()钩子实现了这一点

对你来说,它看起来像这样

function nade_reg_user_presave (&$edit, $account, $category) {

  // check that the names are being edited, or else you will overwrite 
  // with a blank username
  if (array_key_exists('first_name', $edit) && 
      array_key_exists('last_name', $edit)) {
    $edit['name'] = $edit['first_name'] . ' ' . $edit['last_name'];
  }

}
编辑:对于每个评论中的Drupal6(我认为这会起作用),我已经使用hook_user()完成了我在D7中所做的工作,尽管这有点混乱

function nade_reg_user($op, &$edit, &$account, $category = NULL) {
  if (($op == 'insert' || $op == 'edit')  // if its the right operation
       && array_key_exists('first_name', $edit)  // and the right edits
       && array_key_exists('last_name', $edit)) {   
    $name = $edit['first_name'] . ' ' . $edit['last_name'];
    $qry = "UPDATE {users} SET name = '%s' WHERE uid = %d";
    if (db_query($qry, $name, $account->uid)) {
      $edit['name'] = $name; // update in the user array for access by other modules
    }
  }
}

您的提交处理程序不适用于现有表单,除非您指定了一个额外的提交处理程序

这可以通过以下方式实现: $form['#submit'][]=“我的(我的)自己的(你的)自定义(你的)提交(你的处理程序)”

添加额外的验证处理程序也是如此


或者,您可以通过hook_user(如前一个答案中所列)捕获正在插入的用户,这与hook_nodeapi相当,但对于用户而言。在“插入”操作期间更改$edit变量应该足够了。

您的提交处理程序不适用于现有表单,除非您指定了额外的提交处理程序

这可以通过以下方式实现: $form['#submit'][]=“我的(我的)自己的(你的)自定义(你的)提交(你的处理程序)”

添加额外的验证处理程序也是如此


或者,您可以通过hook_user(如前一个答案中所列)捕获正在插入的用户,这与hook_nodeapi相当,但对于用户而言。在“插入”操作期间更改$edit变量应该足够了。

这看起来不错,但对我来说不起作用。我的坏-我忘了提到我的网站是drupal 6。@baaj我为D6添加了一个编辑,如果有帮助,请告诉我,它对我有效,但我只是将电子邮件交换为用户名。这看起来很棒,但对我无效。我的错-我忘了提到我的网站是drupal 6。@baaj我为D6添加了一个编辑,如果有帮助,请告诉我,它对我有用,但我只是将电子邮件换成了用户名