Dostęp do dodatkowych pól profilu użytkownika

9

Dodałem kilkanaście nowych pól (w Drupal 7) do profili użytkowników, używając:

Konfiguracja -> Ludzie -> Ustawienia konta -> Zarządzaj polami (admin / config / people / account / fields)

Jak mogę uzyskać dostęp do tych wartości? Nie wydają się być częścią $ user

Próbowałem, bez powodzenia:

global $user;
var_dump($user);
Citricguy
źródło

Odpowiedzi:

13

Myślę, że to znalazłem. Wydaje się, że jest jeszcze jeden krok.

global $user;
$user_full = user_load($user->uid); // user_load(uid) returns the complete array
var_dump($user_full);

Mam teraz dostęp do moich niestandardowych pól profilu przez $ user_full

Citricguy
źródło
1

Panele mogą to również robić bezboleśnie z relacjami.

Matt
źródło
0

Ponownie publikuję moją odpowiedź z /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template tutaj, ponieważ uważam, że jest to alternatywne rozwiązanie. Ten przykład pokazuje, jak użyć czegoś takiego jak nazwa_pola_realizacyjna zamiast domyślnej nazwy użytkownika.

Jeśli używasz funkcji wstępnego przetwarzania, nie ma potrzeby pobierania $userobiektu globalnego . Możesz zmienić pole w tablicy $ zmiennych, czyli $variables['name']na to, co masz w polu niestandardowym, które nazwałem field_real_name. Masz dostęp do $variablestablicy, dzięki czemu możesz uzyskać w ten sposób informacje o użytkowniku - załaduje to informacje powiązane z identyfikatorem użytkownika ( patrz nazwa_użytkownika_procesu szablonu ):

function mythemename_preprocess_username(&$variables) {
    $account = user_load($variables['account']->uid);
    ...more code will go here in a moment
}

Jeśli ty dpm($account)(lub kpr($account)jeśli nie używasz devel) zobaczysz, że masz dostęp do wszystkich informacji o użytkowniku, bez użycia $userobiektu globalnego .

Następnie możesz zmienić dane wyjściowe $variables['name']na be field_real_namew następujący sposób:

function mythemename_preprocess_username(&$variables) {

  // Load user information with user fields
  $account = user_load($variables['account']->uid);

  // See if user has real_name set, if so use that as the name instead
  $real_name = $account->field_real_name[LANGUAGE_NONE][0]['safe_value'];
  if (isset($real_name)) {
    $variables['name'] = $real_name;
  }
}
kbrinner
źródło
0

Z jakiegoś dziwnego powodu pola profilu w Drupal 7 nie są już takie, jak kiedyś. Jednak obiekt profilu użytkownika udostępnia dodatkowe pola profilu jako elementy tablicy. Na przykład:

$profile->field_fieldname['und'][0]['value']

nie jest dostępny, ale będzie działał po przepisaniu w następujący sposób:

$user_profile['field_fieldname']['#object']->field_fieldname['und'][0]['value'];

Więc po prostu zrobiłem następujące w moim kodzie:

/*
 * Create simplified variables as shortcuts for all fields.
 * Use these variables for read access lateron.
 */
$firstname = $user_profile['field_first_name']['#object']
  ->field_first_name['und'][0]['value'];

$middlename = $user_profile['field_middle_name']['#object']
  ->field_middle_name['und'][0]['value'];

$surname = $user_profile['field_surname']['#object']
  ->field_surname['und'][0]['value'];

$image = $user_profile['field_user_picture']['#object']
  ->field_user_picture['und'][0]['uri'];

To kolejny sposób na uruchomienie rzeczy, zamiast wywoływania $userobiektu jeszcze raz.

abdulqadir028
źródło
0

Możesz załadować dane użytkownika (w tym pola niestandardowe) za pomocą rdzenia Drupal 7

$user = entity_load($entity_type = "user", $ids = Array($user->uid), $conditions = array(), $reset = FALSE);

Więcej szczegółów w Drupal 7> API> Ładowanie encji

augusto
źródło