Drupal 自定义注册表格保存
Drupal Custom registration form save
我编写了一个自定义模块,用于在用户抵制表单之前添加一个简单的表单步骤。我有以下将一些自定义文件添加到注册表中的内容
function join_form_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register_form') {
//lots of extra fields
}
}
我还创建了一个安装脚本来在数据库中创建一个新的 table,这样我就不必弄乱默认用户 table。目前一切正常,除了将自定义数据保存到我的新 table。
这是我的自定义提交功能
function join_form_form_submit($form, &$form_state) {
$form_id = $form_state['input']['form_id'];
switch($form_id) {
case 'join_form_form':
//
break;
case 'user_register_form':
$date = new DateTime();
$data = array(
'username' => $form_state['values']['name'],
'email' => $form_state['values']['mail'],
'title' => $form_state['values']['title'],
'first_name' => $form_state['values']['first_name'],
'last_name' => $form_state['values']['last_name'],
'gender' => $form_state['values']['gender'],
'dob' => $form_state['values']['dob'],
'address_1' => $form_state['values']['address_1'],
'address_2' => $form_state['values']['address_2'],
'address_3' => $form_state['values']['address_3'],
'country' => $form_state['values']['country'],
'county_state' => $form_state['values']['county_state'],
'postcode' => $form_state['values']['postcode'],
'contact_pref' => $form_state['values']['contact'],
'created' => $date->format('Y-m-d H:i:s')
);
user_save(drupal_anonymous_user(), $data);
drupal_set_message(t('Good here.'));
db_insert('registrations')
->fields(array(
'title' => $form_state['values']['title'],
'first_name' => $form_state['values']['first_name'],
'last_name' => $form_state['values']['last_name'],
'gender' => $form_state['values']['gender'],
'dob' => $form_state['values']['dob'],
'address_1' => $form_state['values']['address_1'],
'address_2' => $form_state['values']['address_2'],
'address_3' => $form_state['values']['address_3'],
'country' => $form_state['values']['country'],
'county_state' => $form_state['values']['county_state'],
'postcode' => $form_state['values']['postcode'],
'contact_pref' => $form_state['values']['contact'],
'created' => $date->format('Y-m-d H:i:s')
))->execute();
//empty session data
unset($_SESSION['name']);
unset($_SESSION['email']);
break;
}
}
我是否可以覆盖默认的注册过程以正常保存用户,然后将数据保存到我的自定义 table 然后定义重定向?我的方向对吗?
您尝试将 user_save 用于自定义 table,但此功能适用于用户 table 并且是为用户定义的 drupal 功能;
我的解决方案 is:add hook_update 中用户 table 的字段,或者当您在 hook_install 和 hook_schema_alter 中安装某些模块时的字段。这种方式太容易了。而且你可以使用 $account = user_save(NULL, $data);
你的帐户将包含新用户信息;所以你可以像
一样登录你的用户
$form_state['uid'] = $account->uid;
$form_state['redirect'] = '';
user_login_submit(array(), $form_state);
我编写了一个自定义模块,用于在用户抵制表单之前添加一个简单的表单步骤。我有以下将一些自定义文件添加到注册表中的内容
function join_form_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register_form') {
//lots of extra fields
}
}
我还创建了一个安装脚本来在数据库中创建一个新的 table,这样我就不必弄乱默认用户 table。目前一切正常,除了将自定义数据保存到我的新 table。
这是我的自定义提交功能
function join_form_form_submit($form, &$form_state) {
$form_id = $form_state['input']['form_id'];
switch($form_id) {
case 'join_form_form':
//
break;
case 'user_register_form':
$date = new DateTime();
$data = array(
'username' => $form_state['values']['name'],
'email' => $form_state['values']['mail'],
'title' => $form_state['values']['title'],
'first_name' => $form_state['values']['first_name'],
'last_name' => $form_state['values']['last_name'],
'gender' => $form_state['values']['gender'],
'dob' => $form_state['values']['dob'],
'address_1' => $form_state['values']['address_1'],
'address_2' => $form_state['values']['address_2'],
'address_3' => $form_state['values']['address_3'],
'country' => $form_state['values']['country'],
'county_state' => $form_state['values']['county_state'],
'postcode' => $form_state['values']['postcode'],
'contact_pref' => $form_state['values']['contact'],
'created' => $date->format('Y-m-d H:i:s')
);
user_save(drupal_anonymous_user(), $data);
drupal_set_message(t('Good here.'));
db_insert('registrations')
->fields(array(
'title' => $form_state['values']['title'],
'first_name' => $form_state['values']['first_name'],
'last_name' => $form_state['values']['last_name'],
'gender' => $form_state['values']['gender'],
'dob' => $form_state['values']['dob'],
'address_1' => $form_state['values']['address_1'],
'address_2' => $form_state['values']['address_2'],
'address_3' => $form_state['values']['address_3'],
'country' => $form_state['values']['country'],
'county_state' => $form_state['values']['county_state'],
'postcode' => $form_state['values']['postcode'],
'contact_pref' => $form_state['values']['contact'],
'created' => $date->format('Y-m-d H:i:s')
))->execute();
//empty session data
unset($_SESSION['name']);
unset($_SESSION['email']);
break;
}
}
我是否可以覆盖默认的注册过程以正常保存用户,然后将数据保存到我的自定义 table 然后定义重定向?我的方向对吗?
您尝试将 user_save 用于自定义 table,但此功能适用于用户 table 并且是为用户定义的 drupal 功能;
我的解决方案 is:add hook_update 中用户 table 的字段,或者当您在 hook_install 和 hook_schema_alter 中安装某些模块时的字段。这种方式太容易了。而且你可以使用 $account = user_save(NULL, $data);
你的帐户将包含新用户信息;所以你可以像
$form_state['uid'] = $account->uid;
$form_state['redirect'] = '';
user_login_submit(array(), $form_state);