Как сохранить данные конкретного пользователя после регистрации?
Допустим, вы хотите собрать немного больше информации о пользователях во время регистрации. Например, вместо имени пользователя и электронной почты мне также нужно место жительства. Как мне собирать и хранить эти данные для каждого пользователя? В конце концов, я хочу в конечном итоге узнать место жительства каждого пользователя, выполнив простой запрос.
PS: В настоящее время я добавил дополнительные поля в форму user_register_form
, но я не знаю, как связать эти данные с моим новым пользователем, потому что я у вас нет нового идентификатора пользователя.
Каков правильный подход? Потому что я думаю, что это должно быть тривиальное упражнение на Друпале, но я потею :)
.
Я использую Drupal 7.1.
// implements hook_form_alter()
// user-register-form id the id in html but id that works in php is user_register_form
function mymodule_form_alter(&$form, &$form_state, $form_id) {
switch($form_id) {
case 'user_register_form':
$form['placeofresidence']= array(
'#title'=>'where do you stay?',
'#type' => 'textfield',
'#required' => true,
);
$form['#submit'][]='mycustommodule_submit'; //add to callback submit list
break;
}
}
function mycustommodule_submit($form, &$form_state) {
$stayswhere=$form_state['values']['placeofresidence']; // how do I associate this with new user?
}
2 answers
Пользователи являются "полевыми объектами" в Drupal 7. Просто перейдите в раздел "конфигурация / люди / настройки учетной записи / управление полями" и добавьте свои поля. Обязательно установите флажок "Отображать в форме регистрации пользователя".
Для "места жительства" я рекомендую модули адресное поле или местоположение.
Другой способ подойти к этому - использовать поле "данные" пользователя. Согласно документации здесь, вы могли бы сделать что-то подобное. Допустим, вы добавили новый элемент формы в новую форму регистрации пользователя и хотите сохранить данные в ней для чего-то позже после того, как они успешно пройдут аутентификацию в первый раз.
function custom_module_user_presave(&$edit, $account, $category) {
//If the account is being created for the first time
if (empty($account->original->login)) {
$edit['data']['custom-field'] = $edit['custom-field'];
}
}
Эта информация всегда будет возвращена при загрузке пользователя и может быть найдена в массиве данных $user->. Для этого примера это было бы быть в $user->данные ['пользовательское поле'].