Acessando campos adicionais de perfil de usuário

9

Adicionei uma dúzia de novos campos (no Drupal 7) aos perfis de usuário usando:

Configuração -> Pessoas -> Configurações da conta -> Gerenciar campos (admin / config / people / accounts / fields)

Como posso acessar esses valores? Eles não parecem fazer parte de $ user

Tentei, sem sucesso:

global $user;
var_dump($user);
Citricguy
fonte

Respostas:

13

Eu acho que encontrei. Parece haver um passo adicional.

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

Agora tenho acesso aos meus campos de perfil personalizados através de $ user_full

Citricguy
fonte
1

Os painéis também podem fazer isso de maneira bastante simples com os relacionamentos.

Matt
fonte
0

Estou reposicionando minha resposta em /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template aqui, pois acho que essa é uma solução alternativa. Este exemplo mostra como usar algo como field_real_name em vez do nome de usuário padrão.

Se você estiver usando uma função de pré-processo, não há necessidade de puxar o $userobjeto global . Você pode alterar o campo na matriz $ variable que é o $variables['name']que você tem no seu campo personalizado que eu chamei field_real_name. Você tem acesso ao $variablesarray, para obter as informações do usuário com isso - ele carregará as informações associadas ao uid ( consulte template_preprocess_username ):

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

Se você dpm($account)(ou kpr($account)se não estiver usando o devel), verá que tem acesso a todas as informações do usuário, sem usar o $userobjeto global .

Em seguida, você pode alterar a saída de $variables['name']para sua field_real_namecomo a seguir:

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
fonte
0

Por alguma razão estranha, os campos de perfil no Drupal 7 não são mais o que costumavam ser. No entanto, o objeto de perfil do usuário torna os campos de perfil adicionais acessíveis como elementos da matriz. Por exemplo:

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

não está disponível, mas funcionará quando reescrito assim:

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

Então, eu simplesmente fiz o seguinte no meu código:

/*
 * 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'];

Apenas outra maneira de fazer as coisas funcionarem, em vez de chamar o $userobjeto novamente.

abdulqadir028
fonte
0

Você pode carregar dados do usuário (campos personalizados incluídos) com o Drupal 7 core

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

Mais detalhes em Drupal 7> API> Carregamento de entidade

augusto
fonte