hook_user():将额外字段插入数据库而不仅仅是表单

时间:2010-07-27 12:52:55

标签: drupal-6 drupal-modules drupal-fields

我可以在注册时添加一个额外的字段。我需要知道的是我需要采取什么步骤来获取输入并将其插入到drupal的用户表中。下面的代码在我的模块中,它只为表单添加一个字段,但是当它提交时它不会对数据做任何事情。

function perscriptions_user($op, &$edit, &$account, $category = NULL){
  if ($op == 'register') {
    $form['surgery_address'] = array (
      '#type' => 'textarea',
      '#title' => t('Surgery Address'),
      '#required' => TRUE,
    );      

     return $form;     
  }

  if ($op == 'update') {
    // …
  }
}

1 个答案:

答案 0 :(得分:7)

hook_user() documentation中所述:

  

$ op正在执行什么样的操作。可能的值(按字母顺序排列):
    - “插入”:正在添加用户帐户。模块应将其对用户对象的自定义添加内容保存到数据库中,并在$ edit中将保存的字段设置为NULL     - “更新”:正在更改用户帐户。模块应将其对用户对象的自定义添加内容保存到数据库中,并在$ edit中将保存的字段设置为NULL     - “验证”:即将修改用户帐户。该模块应验证其对用户对象的自定义添加,并根据需要注册错误。

模块需要在hook_install()中创建自己的数据库表。

hook_user()可以使用以下代码实现,例如:

function perscriptions_user($op, &$edit, &$account, $category = NULL){
  if ($op == 'register' || ($op == 'form' && $category = 'account')) {
    $form['surgery_address'] = array (
      '#type' => 'textarea',
      '#title' => t('Surgery Address'),
      '#required' => TRUE,
    );

    return $form;     
  }

  if ($op == 'insert' || $op == 'update') {
    prescriptions_save_user_profile($account->uid, $edit['surgery_address']);
  }
  if ($op == 'validate' && $category == 'account') {
    // Verify the entered values are valid.
    // In this example, the value is contained in $edit['surgery_address'].
  }
}

prescriptions_save_user_profile()是将用户配置文件值保存在数据库中的函数。代码检查类别以避免在用户配置文件编辑表单中显示的所有选项卡中显示相同的表单字段。