0

カスタムモジュール「nade_reg」で、ユーザー名フィールドを非表示にしながら、ユーザーの名前と名前を収集する2つのフィールドを含めるように登録フォームを変更しました。これに関連するかどうかはわかりませんが、ログイントボガンモジュールを有効にしています。

送信時に、ユーザー名を名姓(スペース付き)にします

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'];
}
4

3 に答える 3

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
    }
  }
}
于 2011-05-06T00:50:07.763 に答える
0

$form_state['values']['name']だけでなく、設定する必要があります$name

于 2011-05-06T00:40:23.977 に答える