2011-05-06 1 views
0

사용자 정의 모듈 "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

사용자 이름이 항상 이메일과 같을 때와 비슷한 요구 사항이있었습니다. 내가했던대로 등록 양식에서 사용자 이름을 숨긴 다음 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']; 
    } 

} 

편집 : 코멘트 당 드루팔 6은 비트 메시에 있지만, 나는 내가 D7 위에서 한 일을 달성하기 hook_user()를 사용했다 (나는이 트릭을 할 것이라 생각합니다).

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

멋져 보이지만 저에게는 효과가 없습니다. 내 나쁜 - 나는 내 사이트 drupal 언급했다. 9 방치. – baaj

+0

@baaj D6에 대한 편집을 추가, 그게 도움이되는지 알려주지, 그것은 나를 위해 일한하지만 난 사용자 이름으로 이메일을 교환하고있다 – goggin13

+0

이것은 아름답게, 많은 감사합니다! – baaj

0

당신은 $form_state['values']['name'] 아니라 $name를 설정해야합니다.

0

추가 제출자 처리기를 지정하지 않는 한 제출 처리기가 기존 양식에 대해 작동하지 않습니다.

이 작업은 다음을 통해 수행 할 수 있습니다. $ form [ '# submit'] [] = 'my_very_own_custom_submit_handler';

추가 유효성 검사 처리기를 추가하는 경우에도 동일합니다.

또는 이전 답변에 나열된 hook_user (hook_nodeapi에 해당) 대신 사용자에게 삽입되는 사용자를 알 수 있습니다. $ edit 변수를 변경하는 것은 'insert'op 동안 충분해야합니다.

관련 문제