Bagaimana cara menambahkan bidang teks ke formulir halaman pengguna / daftar di drupal 7?

8

Saya ingin memodifikasi dan menambahkan bidang teks di halaman pengguna / register Drupal 7 saya. Saya tahu bahwa formulir dihasilkan oleh fungsiuser_register_form()

Bisakah saya menambahkan bidang teks dengan cara ini?

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;
}
layanan gbweb
sumber

Jawaban:

7

Saya lebih suka menerapkan hook_form_FORM_ID_alter () untuk menambahkan bidang formulir.

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,
  );
}

Dengan cara ini, bidang formulir akan ditambahkan ke formulir pendaftaran.

kiamlaluno
sumber
10

Drupal 7 menyediakan kemampuan untuk menambahkan bidang khusus ke Pengguna melalui admin/config/people/accounts/fields. Fungsi ini seharusnya sudah menjadi inti.

nmc
sumber
Oke, terima kasih dan telah menambahkan bidang teks ke halaman login? Ini cara yang mirip?
gbwebservice
1
Ya, Anda hanya perlu mencentang 'Tampilan pada formulir pendaftaran pengguna'. atau bahwa itu adalah 'bidang wajib'. Ini jelas merupakan cara termudah untuk menambahkan bidang teks ke formulir pendaftaran pengguna Anda (dan dapat menyimpan informasi ke database).
iStryker
Ini berfungsi dengan baik, satu-satunya masalah yang saya miliki adalah bahwa bidang baru tidak muncul pada formulir edit akun ketika saya bukan seorang admin. Bagaimana saya mencapai ini?
reptil
@reptilex Di layar konfigurasi bidang yang Anda tambahkan, harus ada kotak centang berlabel Display pada formulir pendaftaran pengguna. yang harus diperiksa jika Anda ingin pengguna melihatnya.
nmc
@nmc terima kasih atas jawaban cepatnya, apakah saya membuat Anda benar? Anda dapat memilikinya pada formulir pendaftaran seperti yang saya miliki sekarang atau pada formulir edit, tetapi tidak keduanya? Saya ingin mereka menambahkan informasi ini pada pendaftaran, tetapi mereka juga harus dapat mengeditnya. Sekarang pengguna yang sudah terdaftar tidak dapat mengedit bidang ini.
reptil
4

Contoh tentang cara menambahkan bidang ke profil pengguna secara sistematis dan bagaimana memanfaatkannya, atau tidak, ke dalam formulir Registrasi Pengguna.

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);
  }
}
Francisco Luz
sumber
1

Anda dapat menggunakan hook_form_FORM_ID_alter () untuk menambahkan bidang baru ke formulir pendaftaran di Drupal 7.

Berikut adalah contoh menambahkan bidang konfirmasi email tambahan termasuk panggilan balik validasi.

/**
 * 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.');
  }
}
kenorb
sumber