Как добавить текстовое поле в форму страницы пользователя / регистрации в 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;
}
gbwebservice
источник

Ответы:

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. Эта функциональность уже должна быть в ядре.

NMC
источник
Хорошо, спасибо и за добавление текстового поля на страницу входа? Это аналогичный способ?
gbwebservice
1
Да, вам просто нужно отключить «Отображать в форме регистрации пользователя». или что это «обязательное поле». Это, безусловно, самый простой способ добавления текстового поля в форму регистрации пользователя (и возможность сохранения информации в базе данных).
iStryker
Это работает лучше всего, единственная проблема, которую я имею, состоит в том, что новые поля не отображаются в форме редактирования учетной записи, когда я не являюсь администратором. Как мне этого добиться?
reptilex
@reptilex На экране конфигурации добавленного вами поля должен быть установлен флажок Отображать в форме регистрации пользователя. который должен быть отмечен, если вы хотите, чтобы пользователь его увидел.
NMC
@nmc спасибо за быстрый ответ, я правильно тебя понял? Вы можете иметь их в регистрационной форме, как у меня сейчас, или в форме редактирования, но не оба? Я хочу, чтобы они добавили эту информацию при регистрации, но они также должны иметь возможность редактировать их. Теперь уже зарегистрированные пользователи не могут редактировать эти поля.
reptilex
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

Вы можете использовать hook_form_FORM_ID_alter () для добавления новых полей в регистрационную форму в Drupal 7.

Вот пример добавления дополнительного поля подтверждения по электронной почте, включая обратный вызов проверки.

/**
 * 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
источник