2011-05-06 57 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']; 
    } 

} 

編輯:爲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

這看起來不錯,但不適合我。我的壞 - 我忽略提及我的網站是Drupal 6. – baaj 2011-05-06 04:55:03

+0

@baaj我添加了D6的編輯,讓我知道如果這有幫助,它對我有用,但我只是交換電子郵件到用戶名 – goggin13 2011-05-06 05:23:59

+0

這工作很好,非常感謝! – baaj 2011-05-09 16:30:41

0

您需要設置$form_state['values']['name'],不只是$name

0

您的提交處理程序不適用於現有表單,除非您指定了額外的提交處理程序。

這可以通過: $ form ['#submit'] [] ='my_very_own_custom_submit_handler';

添加額外的驗證處理程序是一樣的。

或者,您可以通過hook_user捕獲正在插入的用戶 - 如以前的答案中所列 - 等同於hook_nodeapi,但用於用戶。在'insert'操作期間更改$ edit變量應該足夠了。