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帐户时点击SUBMIT按钮时,如何将$ form ['site_select']的自定义字段值传递给我的案例'insert',以便我可以将其写入'another_table'。用户名和密码等常规用户数据需要继续写入默认的“用户”表。
问:为什么不让Drupal像往常那样序列化并将数据保存到'data'字段中的'users'表中?
答:因为我希望能够使用AJAX-ify并在另一个Drupal表单中使用自动完成,以及在MySQL中查询特定的自定义字段。 MySQL无法序列化/反序列化。例如,“SELECT DISTINCT site_name FROM another_table”
答案 0 :(得分: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.
}