Como adicionar um campo de texto ao formulário de usuário / página de registro no drupal 7?

8

Quero modificar e adicionar um campo de texto na minha página de usuário / registro do Drupal 7. Eu sei que o formulário é gerado pela funçãouser_register_form()

Posso adicionar um campo de texto dessa maneira?

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
fonte

Respostas:

7

Prefiro implementar hook_form_FORM_ID_alter () para adicionar o campo do formulário.

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

Dessa forma, o campo do formulário será adicionado ao formulário de registro.

kiamlaluno
fonte
10

O Drupal 7 fornece a capacidade de adicionar campos personalizados ao usuário admin/config/people/accounts/fields. Essa funcionalidade já deve estar no núcleo.

nmc
fonte
Ok, obrigado e por adicionar o campo de texto à página de login? É uma maneira semelhante?
Gbwebservice 21/07
11
Sim, basta marcar 'Exibir no formulário de registro do usuário'. ou que é um 'campo obrigatório'. Essa é definitivamente a maneira mais fácil de adicionar um campo de texto ao formulário de registro do usuário (e poder salvar as informações no banco de dados).
IStryker
Isso funciona melhor, o único problema que tenho é que os novos campos não estão aparecendo no formulário de edição da conta quando eu não sou um administrador. Como faço para conseguir isso?
Reptilex
@reptilex Na tela de configuração do campo que você adicionou, deve haver uma caixa de seleção chamada Exibir no formulário de registro do usuário. que deve ser marcado se você quiser que o usuário o veja.
nmc
@ nmc obrigado pela resposta rápida, estou entendendo direito? Você pode tê-los no formulário de inscrição como eu os tenho agora ou no formulário de edição, mas não os dois? Quero que eles adicionem essas informações no registro, mas também devem poder editá-las. Agora os usuários já registrados não podem editar esses campos.
Reptilex
4

Exemplo de como adicionar programaticamente campos ao perfil do usuário e como utilizá-los, ou não, no formulário Registro do Usuário.

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
fonte
1

Você pode usar hook_form_FORM_ID_alter () para adicionar novos campos ao formulário de registro no Drupal 7.

Aqui está um exemplo de adição de campo de confirmação de email adicional, incluindo o retorno de chamada de validação.

/**
 * 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
fonte