Làm thế nào có thể thêm một trường văn bản vào mẫu trang người dùng / đăng ký trong drupal 7?


8

Tôi muốn sửa đổi và thêm một trường văn bản trong trang đăng ký / người dùng Drupal 7 của tôi. Tôi biết rằng biểu mẫu được tạo bởi hàmuser_register_form()

Tôi có thể thêm một trường văn bản theo cách này?

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

Câu trả lời:


7

Tôi thà triển khai hook_form_FORM_ID_alter () để thêm trường biểu mẫu.

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

Theo cách này, trường biểu mẫu sẽ được thêm vào biểu mẫu đăng ký.


10

Drupal 7 cung cấp khả năng thêm các trường tùy chỉnh cho Người dùng thông qua admin/config/people/accounts/fields. Chức năng này đã có trong lõi.


Ok, cảm ơn bạn và đã thêm trường văn bản vào trang đăng nhập? Đó là một cách tương tự?
gbwebservice

1
Có, bạn chỉ cần kiểm tra 'Hiển thị trên biểu mẫu đăng ký người dùng'. hoặc đó là một 'trường bắt buộc'. Đây chắc chắn là cách dễ nhất để thêm trường văn bản vào biểu mẫu đăng ký người dùng của bạn (và có thể lưu thông tin vào cơ sở dữ liệu).
iStryker

Điều này hoạt động tốt nhất, vấn đề duy nhất tôi có là các trường mới không hiển thị trên biểu mẫu chỉnh sửa của tài khoản khi tôi không phải là quản trị viên. Làm thế nào để tôi đạt được điều này?
reptilex

@reptilex Trong màn hình cấu hình của trường bạn đã thêm, cần có hộp kiểm có nhãn Hiển thị trên biểu mẫu đăng ký người dùng. cần được kiểm tra nếu bạn muốn người dùng nhìn thấy nó.
nmc

@nmc cảm ơn vì câu trả lời nhanh, tôi có hiểu bạn không? Bạn có thể có chúng trên mẫu đăng ký như tôi có chúng bây giờ hoặc trên mẫu chỉnh sửa, nhưng không phải cả hai? Tôi muốn họ thêm thông tin này khi đăng ký, nhưng họ cũng có thể chỉnh sửa chúng. Bây giờ người dùng đã đăng ký không thể chỉnh sửa các lĩnh vực này.
reptilex

4

Ví dụ về cách thêm các trường vào hồ sơ người dùng theo cách lập trình và cách tận dụng chúng, hoặc không, vào biểu mẫu Đăng ký người dùng.

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

Bạn có thể sử dụng hook_form_FORM_ID_alter () để thêm các trường mới vào biểu mẫu đăng ký trong Drupal 7.

Dưới đây là ví dụ về việc thêm trường xác nhận e-mail bổ sung bao gồm cả gọi lại xác thực.

/**
 * 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.');
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.