¿Cómo se puede agregar un campo de texto al formulario de página de usuario / registro en drupal 7?

8

Quiero modificar y agregar un campo de texto en mi página de usuario / registro de Drupal 7. Sé que el formulario es generado por la funciónuser_register_form()

¿Puedo agregar un campo de texto de esta manera?

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
fuente

Respuestas:

7

Prefiero implementar hook_form_FORM_ID_alter () para agregar el campo de formulario.

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

De esta manera, el campo del formulario se agregará al formulario de registro.

kiamlaluno
fuente
10

Drupal 7 proporciona la capacidad de agregar campos personalizados al usuario a través admin/config/people/accounts/fields. Esta funcionalidad ya debería estar en el núcleo.

nmc
fuente
Ok, gracias y por agregar un campo de texto a la página de inicio de sesión. ¿Es una forma similar?
gbwebservice
1
Sí, solo tiene que marcar 'Mostrar en el formulario de registro de usuario'. o que es un "campo obligatorio". Esta es definitivamente la forma más fácil de agregar un campo de texto a su formulario de registro de usuario (y poder guardar la información en la base de datos).
iStryker
Esto funciona mejor, el único problema que tengo es que los nuevos campos no se muestran en el formulario de edición de la cuenta cuando no soy administrador. ¿Cómo logro esto?
reptilex
@reptilex En la pantalla de configuración del campo que agregó, debe haber una casilla de verificación etiquetada Mostrar en el formulario de registro del usuario. que debe marcarse si desea que el usuario lo vea.
nmc
@nmc gracias por la respuesta rápida, ¿te estoy entendiendo bien? ¿Puede tenerlos en el formulario de registro como los tengo ahora o en el formulario de edición, pero no ambos? Quiero que agreguen esta información en el registro, pero también deberían poder editarla. Ahora los usuarios ya registrados no pueden editar estos campos.
reptilex
4

Ejemplo sobre cómo agregar campos mediante programación al perfil de usuario y cómo aprovecharlos, o no, en el formulario de registro de usuario.

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

Puede usar hook_form_FORM_ID_alter () para agregar nuevos campos al formulario de registro en Drupal 7.

Aquí hay un ejemplo de cómo agregar un campo de confirmación de correo electrónico adicional, incluida la devolución de llamada de validación.

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