Comment ajouter un champ de texte au formulaire de page utilisateur / inscription dans Drupal 7?

8

Je souhaite modifier et ajouter un champ de texte dans ma page utilisateur / inscription Drupal 7. Je sais que le formulaire est généré par la fonctionuser_register_form()

Puis-je ajouter un champ de texte de cette façon?

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
la source

Réponses:

7

Je préfère implémenter hook_form_FORM_ID_alter () pour ajouter le champ de formulaire.

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 cette façon, le champ du formulaire sera ajouté au formulaire d'inscription.

kiamlaluno
la source
10

Drupal 7 offre la possibilité d'ajouter des champs personnalisés à l'utilisateur via admin/config/people/accounts/fields. Cette fonctionnalité devrait déjà être au cœur.

nmc
la source
Ok, merci et pour avoir ajouté textfield à la page de connexion? C'est la même chose?
gbwebservice
1
Oui, il vous suffit de cocher 'Afficher sur le formulaire d'inscription de l'utilisateur'. ou qu'il s'agit d'un «champ obligatoire». C'est certainement le moyen le plus simple d'ajouter un champ de texte à votre formulaire d'inscription d'utilisateur (et de pouvoir enregistrer les informations dans la base de données).
iStryker
Cela fonctionne mieux, le seul problème que j'ai, c'est que les nouveaux champs n'apparaissent pas sur le formulaire d'édition du compte lorsque je ne suis pas administrateur. Comment puis-je y parvenir?
reptilex
@reptilex Dans l'écran de configuration du champ que vous avez ajouté, il devrait y avoir une case à cocher intitulée Afficher sur le formulaire d'inscription de l'utilisateur. qui doit être cochée si vous voulez que l'utilisateur la voie.
nmc
@nmc merci pour la réponse rapide, est-ce que je vous comprends? Vous pouvez les avoir sur le formulaire d'inscription comme je les ai maintenant ou sur le formulaire d'édition, mais pas les deux? Je veux qu'ils ajoutent ces informations lors de l'inscription, mais ils devraient également pouvoir les modifier. Désormais, les utilisateurs déjà enregistrés ne peuvent pas modifier ces champs.
reptilex
4

Exemple sur la façon d'ajouter par programmation des champs au profil utilisateur et comment les utiliser, ou non, dans le formulaire d'inscription utilisateur.

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
la source
1

Vous pouvez utiliser hook_form_FORM_ID_alter () pour ajouter de nouveaux champs au formulaire d'inscription dans Drupal 7.

Voici un exemple d'ajout d'un champ de confirmation de courrier électronique supplémentaire, y compris le rappel de validation.

/**
 * 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
la source