Как я могу объединить поля для создания имени пользователя при регистрации? - PullRequest
0 голосов
/ 06 мая 2011

В пользовательском модуле "nade_reg" я изменил форму регистрации, включив в нее два поля для сбора имени и фамилии пользователя, скрывая при этом поле имени пользователя. Я не знаю, имеет ли это отношение к этому, но у меня включен модуль входа в систему.

При отправке я хочу, чтобы имя пользователя стало Имя Фамилия (с пробелом)

function nade_reg_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    // This is our form ID.
    case 'user_register':        
     $form['name']['#type'] = 'hidden';

     $form['field_uprofile_first_name1'] = array(
       '#type' => 'textfield',
       '#title' => t('First Name'),
       '#weight' => -40,
       '#required' => TRUE,
     );

     $form['field_uprofile_last_name1'] = array(
       '#type' => 'textfield',
       '#title' => t('Last Name'),
       '#weight' => -35,
       '#required' => TRUE,
     );

     break;
  }
}

Я пытался сделать это с помощью обработчика отправки, но кажется, что моя функция не распознается системой (даже после значительной очистки кэша), поэтому не могу сказать, где мои ошибки.

Правильный ли приведенный ниже код, или мне нужно поругаться с массивами?

Есть идеи, почему система не увидит этого?

function nade_reg_user_register_submit($form, &$form_state) {
  drupal_set_message(t('function redlemonade_register_user_register_submit sucessfully called.'));

  $name = $form_state['values']['field_uprofile_first_name1'] . ' ' . $form_state['values']['field_uprofile_last_name1'];
}

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

У меня было похожее требование, когда я хотел, чтобы имя пользователя всегда совпадало с адресом электронной почты. Что я и сделал, скрыв имя пользователя в форме регистрации, как вы, а затем используя хук user_presave ().

Для вас это будет выглядеть примерно так;

function nade_reg_user_presave (&$edit, $account, $category) {

  // check that the names are being edited, or else you will overwrite 
  // with a blank username
  if (array_key_exists('first_name', $edit) && 
      array_key_exists('last_name', $edit)) {
    $edit['name'] = $edit['first_name'] . ' ' . $edit['last_name'];
  }

}

РЕДАКТИРОВАТЬ: для Drupal 6 за комментарий (я думаю, что это поможет), я использовал hook_user (), чтобы выполнить то, что я делал выше в D7, хотя это немного сложнее.

function nade_reg_user($op, &$edit, &$account, $category = NULL) {
  if (($op == 'insert' || $op == 'edit')  // if its the right operation
       && array_key_exists('first_name', $edit)  // and the right edits
       && array_key_exists('last_name', $edit)) {   
    $name = $edit['first_name'] . ' ' . $edit['last_name'];
    $qry = "UPDATE {users} SET name = '%s' WHERE uid = %d";
    if (db_query($qry, $name, $account->uid)) {
      $edit['name'] = $name; // update in the user array for access by other modules
    }
  }
}
0 голосов
/ 07 мая 2011

Ваш обработчик отправки не работает для существующих форм, если вы не укажете дополнительный обработчик отправки.

Это может быть достигнуто с помощью: $ form ['# submit'] [] = 'my_very_own_custom_submit_handler';

То же самое для добавления дополнительных обработчиков проверки.вы можете поймать вставляемого пользователя через hook_user - как указано в предыдущем ответе - что эквивалентно hook_nodeapi, но для пользователей.Изменение переменной $ edit должно быть достаточно во время операции вставки.

0 голосов
/ 06 мая 2011

Вам нужно установить $form_state['values']['name'], а не просто $name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...