0
function Mymodule_user($op,&$edit, &$account, $category = NULL) {
  switch ($op) {
    case 'register':
      $result = db_query("SELECT id,name FROM {sites} ORDER BY name");
      while($row=db_fetch_array($result)) {
        $sites[$row['id']] = $row['name'];
      }

      $form['site_select'] = array(
        '#type' => 'select',
        '#title' => t('Select your site'),
        '#options' => $sites,
      )
      return $form;

    case 'insert':
      //How to take the $form values from above and use in my query to
      //write to my own table while writing to the standard 'users' table?
      db_query("INSERT INTO {another_table} (site_name) VALUES ('%s')",
               $form['site_select']);
);

当用户在创建标准 Drupal 帐户时点击提交按钮时,如何将自定义字段值 $form['site_select'] 传递给我的案例“插入”,以便我可以将其写入“another_table”。用户名和密码等常规用户数据需要继续写入默认的“用户”表。

问:为什么不像往常一样让 Drupal 序列化并将您的数据保存到 'data' 字段中的 'users' 表中?

答:因为我希望能够在另一个 Drupal 表单中进行 AJAX 化和使用自动完成功能,以及在 MySQL 中查询特定的自定义字段。MySQL 无法序列化/反序列化。例如,“SELECT DISTINCT site_name FROM another_table”

4

1 回答 1

1

您可能想要更改 user_register 表单,以便将您自己的回调函数添加到该表单的 #submit 属性,例如:

<?php
/**
 * Implementation of hook_form_FORMID_alter().
 * @param $form
 * @param $form_state
 * @return void
 */
function MYMODULE_form_user_register_alter(&$form, &$form_state) {
  $form['#submit'][] = 'MYMODULEs_own_register_submit_callback_func';
}

然后在回调中,您将$form_state填写用户填写表单的任何内容(包括您在 hook_user 实现中添加的额外 site_select 字段元素的值):

<?php
function MYMODULEs_own_register_submit_callback_func(&$form, &$form_state) {
  // Do stuff with $form_state['values'], i.e $form_state['values']['site_select'], etc.
}
于 2011-12-22T00:03:41.517 回答