drupal 7のユーザー/登録ページフォームにテキストフィールドを追加するにはどうすればよいですか?


8

Drupal 7のユーザー/登録ページでテキストフィールドを変更して追加したい。フォームが関数によって生成されることを知っていますuser_register_form()

この方法でテキストフィールドを追加できますか?

function bartik_copy_user_login($form, &$form_state) {
  global $user;

  // If we are already logged on, go to the user page instead.
  if ($user->uid) {
    drupal_goto('user/' . $user->uid);
  }

  // Display login form:
  $form['name'] = array('#type' => 'textfield',
    '#title' => t('Username'),
    '#size' => 60,
    '#maxlength' => USERNAME_MAX_LENGTH,
    '#required' => TRUE,
  );

  $form['name']['#description'] = t('Enter your @s username.', array('@s' => variable_get('site_name', 'Drupal')));
  $form['pass'] = array('#type' => 'password',
    '#title' => t('Password'),
    '#description' => t('Enter that accompanies your username.'),
    '#required' => TRUE,
  );
$form['address'] = array('#type' => 'textfield',
    '#title' => t('Your address'),
    '#size' => 60,
    '#maxlength' => 125,
    '#required' => TRUE,
  );

  $form['#validate'] = user_login_default_validators();
  $form['actions'] = array('#type' => 'actions');
  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Log in'));

  return $form;
}

回答:


7

フォームフィールドを追加するには、hook_form_FORM_ID_alter()を実装する必要があります。

function mymodule_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $form['address'] = array('#type' => 'textfield',
    '#title' => t('Your address'),
    '#size' => 60,
    '#maxlength' => 125,
    '#required' => TRUE,
  );
}

このようにして、フォームフィールドが登録フォームに追加されます。


10

Drupal 7では、を介してユーザーにカスタムフィールドを追加できますadmin/config/people/accounts/fields。この機能はすでにコアにあるはずです。


ログインページにテキストフィールドを追加してくれてありがとう、それは同様の方法ですか?
gbwebservice

1
はい、「ユーザー登録フォームに表示」をチェックするだけです。または、それが「必須フィールド」であること。これは間違いなく、ユーザー登録フォームにテキストフィールドを追加する(そしてデータベースに情報を保存できる)最も簡単な方法です。
iStryker

これが最適に機能します。唯一の問題は、私が管理者でない場合、アカウントの編集フォームに新しいフィールドが表示されないことです。どうすればこれを達成できますか?
reptilex 2013

@reptilex追加したフィールドの構成画面に、[ ユーザー登録フォームに表示]というラベルの付いたチェックボックスがありますこれは、ユーザーに表示する場合はオフにする必要があります。
nmc 2013

@nmc迅速な回答ありがとうございます。今持っているような登録フォームまたは編集フォームのいずれかに置くことができますが、両方にできませんか?登録時にこの情報を追加してほしいのですが、編集もできるはずです。これで、すでに登録されているユーザーはこのフィールドを編集できません。
reptilex 2013

4

プログラムによってフィールドをユーザープロファイルに追加する方法と、フィールドをユーザー登録フォームに追加する方法としない方法の例。

function MYMODULE_enable() {
  // Check if our field is not already created.
  if (!field_info_field('field_myField')) {
    $field = array(
      'field_name' => 'field_myField', 
      'type' => 'text', 
    );

    field_create_field($field);

    // Create the instance on the bundle.
    $instance = array(
      'field_name' => 'field_myField', 
      'entity_type' => 'user', 
      'label' => 'My Field Name', 
      'bundle' => 'user', 
      // If you don't set the "required" property then the field wont be required by default.
      'required' => TRUE,
      'settings' => array(
        // Here you inform either or not you want this field showing up on the registration form.
        'user_register_form' => 1,
      ),
      'widget' => array(
        'type' => 'textfield',
      ), 
    );

    field_create_instance($instance);
  }
}

1

Drupal 7の登録フォームに新しいフィールドを追加するには、hook_form_FORM_ID_alter()を使用できます。

以下は、検証コールバックを含む追加の電子メール確認フィールドを追加する例です。

/**
 * Implements hook_form_FORM_ID_alter().
 */
function foo_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $form['account']['mail_confirm'] = array(
    '#type' => 'textfield',
    '#title' => t('Confirm e-mail address'),
    '#maxlength' => EMAIL_MAX_LENGTH,
    '#description' => t('Please confirm your e-mail address.'),
    '#required' => TRUE,
  );
  $form['#validate'][] = 'foo_user_register_form_validate';
}

/**
 * Implements validation callback.
 */
function foo_user_register_form_validate(&$form, &$form_state) {
  if ($form_state['values']['mail'] != $form_state['values']['mail_confirm']) {
    form_set_error('mail_confirm', 'The email addresses must match.');
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.