Как сохранить данные конкретного пользователя после регистрации?


Допустим, вы хотите собрать немного больше информации о пользователях во время регистрации. Например, вместо имени пользователя и электронной почты мне также нужно место жительства. Как мне собирать и хранить эти данные для каждого пользователя? В конце концов, я хочу в конечном итоге узнать место жительства каждого пользователя, выполнив простой запрос.

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
Author: Free Radical, 2011-10-05

2 answers

Пользователи являются "полевыми объектами" в Drupal 7. Просто перейдите в раздел "конфигурация / люди / настройки учетной записи / управление полями" и добавьте свои поля. Обязательно установите флажок "Отображать в форме регистрации пользователя".

Для "места жительства" я рекомендую модули адресное поле или местоположение.

 7
Author: uwe, 2011-10-05 14:35:09

Другой способ подойти к этому - использовать поле "данные" пользователя. Согласно документации здесь, вы могли бы сделать что-то подобное. Допустим, вы добавили новый элемент формы в новую форму регистрации пользователя и хотите сохранить данные в ней для чего-то позже после того, как они успешно пройдут аутентификацию в первый раз.

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->данные ['пользовательское поле'].

 2
Author: LSU_JBob, 2011-10-07 14:46:03