Come si può aggiungere un campo di testo al modulo della pagina utente / registro in drupal 7?


8

Voglio modificare e aggiungere un campo di testo nella mia pagina utente / registro di Drupal 7. So che il modulo è generato dalla funzioneuser_register_form()

Posso aggiungere un campo di testo in questo modo?

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

Risposte:


7

Preferirei implementare hook_form_FORM_ID_alter () per aggiungere il campo modulo.

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

In questo modo, il campo del modulo verrà aggiunto al modulo di registrazione.


10

Drupal 7 offre la possibilità di aggiungere campi personalizzati all'utente tramite admin/config/people/accounts/fields. Questa funzionalità dovrebbe già essere al centro.


Ok, grazie e per aver aggiunto il campo di testo alla pagina di accesso? È un modo simile?
gbwebservice,

1
Sì, devi solo selezionare "Visualizza nel modulo di registrazione utente". o che si tratta di un "campo obbligatorio". Questo è sicuramente il modo più semplice per aggiungere un campo di testo al modulo di registrazione dell'utente (e poter salvare le informazioni nel database).
iStryker,

Funziona meglio, l'unico problema che ho è che i nuovi campi non vengono visualizzati nel modulo di modifica dell'account quando non sono un amministratore. Come posso raggiungere questo obiettivo?
reptilex,

@reptilex Nella schermata di configurazione del campo aggiunto, dovrebbe essere presente una casella di controllo con l'etichetta Visualizza sul modulo di registrazione dell'utente. che dovrebbe essere spuntato se si desidera che l'utente lo veda.
nmc,

@nmc grazie per la rapida risposta, ti sto prendendo bene? Puoi averli sul modulo di registrazione come li ho ora o sul modulo di modifica, ma non entrambi? Voglio che aggiungano queste informazioni al momento della registrazione, ma dovrebbero anche essere in grado di modificarle. Ora gli utenti già registrati non possono modificare questi campi.
reptilex,

4

Esempio su come aggiungere a livello di programmazione campi al profilo utente e su come utilizzarli o meno nel modulo Registrazione utente.

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

Puoi usare hook_form_FORM_ID_alter () per aggiungere nuovi campi al modulo di registrazione in Drupal 7.

Ecco un esempio di aggiunta di un campo di conferma e-mail aggiuntivo, incluso il callback di convalida.

/**
 * 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.');
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.