Jak dodać dodatkowe pola do profilu użytkownika?

22

Chciałbym dodać dodatkowe pola do profilu użytkownika. Chciałbym, aby użytkownik mógł edytować prawie wszystkie informacje o nim przechowywane w bazie danych. Mam kilka pomysłów: może da się to zrobić za pomocą interfejsu API.

Alexey
źródło
szczegółowy blog jest tutaj: goo.gl/zxBTBY
Suresh Kamrushi

Odpowiedzi:

23

Sposób dodawania pól użytkowników według kodu, dzięki czemu można umieścić to w module.

Znalazłem to: field_create_field z w komentarzach sposób na utworzenie pola dla użytkownika po włączeniu modułu:

/**
 * Implementation of hook_enable().
 */
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',
            'weight' => '1',
        ), 
    );
    field_create_instance($instance);
  }
}
LATAĆ
źródło
1
Znalazłem tę bardzo przydatną stronę, która wyjaśnia, jak eksportować pola utworzone za pomocą interfejsu użytkownika. Ten eksport może być następnie użyty z field_create_field i field_create_instance do zrobienia wszystkiego programowo
Whisky
Dzięki, to było bardzo przydatne - masz pomysł, jak automatycznie przypisać wagę?
inertialmedia
możesz dodać 'weight' => '1',do tablicy widżetów w polu „ $instanceDodaję” w mojej odpowiedzi.
FLY
W przypadku skomplikowanych przypadkach, warto najpierw dodać pola ręcznie /admin/config/people/accounts/fields, a następnie użyć pola Inspector na /admin/config/development/field-inspectoreksportowanie pól i pól tablice definicji instancji do użycia w kodzie jak wyżej.
tanius
Aby zachować DB w czystości, możesz także zaimplementować hook_uninstall, aby usunąć pole. function MYMODULE_uninstall() {field_delete_field('field_myField');}
dxvargas
35

Znalazłem stronę trudną do znalezienia, ale w / admin / config / people / account / fields możesz dodawać pola do użytkowników.

Attiks
źródło
2
Dziękuję, ale czy mogę to zrobić za pomocą interfejsu API? Potrzebuję więcej funkcji.
Alexey,
co chcesz zrobić, co nie jest możliwe w przypadku pól?
Attiks
Już utworzyłem własne pola w tabeli Drupal users. „Pola” tworzą nowe pola poza tabelą users.
Alexey,
tak działa Drupal, dlaczego chcesz przechowywać pola w tabeli użytkowników?
Attiks
Moim zdaniem jest to wygodniejszy sposób. Nawiasem mówiąc, aby dodać dodatkowe pola, których używamhook_form_alter(&$form, &$form_state, $form_id)
Alexey
5

Profil w D7 jest trochę dziwny. Profile2 moduł może zrobić to, czego potrzebujesz.

Jeremy French
źródło
4

W Drupal 7 użyj tego procesu, aby dodać nowe lub istniejące pole z różnymi typami pól (takimi jak Obraz, Pole znaczników itp.) Do profilu użytkownika:

  1. Włącz moduł Field UI .
  2. Przejdź do „ Administrator → Konfiguracja → Ludzie: Ustawienia konta ” w menu administratora, a następnie do „ Zarządzaj polami ” (druga zakładka).

    (Alternatywnie użyj bezpośredniej ścieżki w adresie URL:) /admin/config/people/accounts/fields.

  3. Wypełnij wiersz „Dodaj nowe pole” lub „Dodaj istniejące pole” u dołu formularza i kliknij „Zapisz”.
Chanuka Asanka
źródło
1

Jakie pola chcesz dodać?

  • Jeśli jest to serwis społecznościowy i dodajesz pola ustawień prywatności, użyj modułu Prywatność na użytkownika .
  • Jeśli chcesz dodać tabulatory lub pola akordeonu, użyj modułu field_group, aby dodać nowe grupy do pól kont użytkowników (URL: / admin / config / people / account / fields).
  • A jeśli chcesz mieć różne pola dla różnych ról, użyj modułu profile2 .
Druvision
źródło