Wie kann ein Textfeld zum Benutzer- / Registrierungsseitenformular in Drupal 7 hinzugefügt werden?


8

Ich möchte ein Textfeld auf meiner Drupal 7-Benutzer- / Registrierungsseite ändern und hinzufügen. Ich weiß, dass das Formular von der Funktion generiert wirduser_register_form()

Kann ich auf diese Weise ein Textfeld hinzufügen?

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

Antworten:


7

Ich würde lieber hook_form_FORM_ID_alter () implementieren , um das Formularfeld hinzuzufügen.

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

Auf diese Weise wird das Formularfeld dem Registrierungsformular hinzugefügt.


10

Drupal 7 bietet die Möglichkeit, dem Benutzer benutzerdefinierte Felder hinzuzufügen admin/config/people/accounts/fields. Diese Funktionalität sollte sich bereits im Kern befinden.


Ok, danke und für das Hinzufügen eines Textfelds zur Anmeldeseite? Ist es ähnlich?
Gbwebservice

1
Ja, Sie müssen nur "Auf Benutzerregistrierungsformular anzeigen" abhaken. oder dass es sich um ein "Pflichtfeld" handelt. Dies ist definitiv die einfachste Möglichkeit, Ihrem Benutzerregistrierungsformular ein Textfeld hinzuzufügen (und die Informationen in der Datenbank zu speichern).
iStryker

Dies funktioniert am besten. Das einzige Problem, das ich habe, ist, dass die neuen Felder nicht im Bearbeitungsformular des Kontos angezeigt werden, wenn ich kein Administrator bin. Wie erreiche ich das?
Reptilex

@reptilex Im Konfigurationsbildschirm des von Ihnen hinzugefügten Felds sollte ein Kontrollkästchen mit der Bezeichnung Anzeige auf dem Benutzerregistrierungsformular angezeigt werden . Dies sollte abgehakt sein, wenn der Benutzer es sehen soll.
nmc

@nmc danke für die schnelle Antwort, verstehe ich dich richtig? Sie können sie entweder auf dem Registrierungsformular haben, wie ich sie jetzt habe, oder auf dem Bearbeitungsformular, aber nicht auf beiden? Ich möchte, dass sie diese Informationen bei der Registrierung hinzufügen, aber sie sollten sie auch bearbeiten können. Jetzt können die bereits registrierten Benutzer diese Felder nicht mehr bearbeiten.
Reptilex

4

Beispiel, wie Sie dem Benutzerprofil programmgesteuert Felder hinzufügen und diese in das Benutzerregistrierungsformular aufnehmen oder nicht.

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

Sie können hook_form_FORM_ID_alter () verwenden, um dem Registrierungsformular in Drupal 7 neue Felder hinzuzufügen.

Hier ist ein Beispiel für das Hinzufügen eines zusätzlichen E-Mail-Bestätigungsfelds einschließlich des Validierungsrückrufs.

/**
 * 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.');
  }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.