it-swarm.it

Accesso a campi del profilo utente aggiuntivi

Ho aggiunto una dozzina di nuovi campi (in Drupal 7) ai profili utente usando:

Configurazione -> Persone -> Impostazioni account -> Gestisci campi (admin/config/persone/account/campi)

Come posso accedere a questi valori? Non sembrano far parte di $ user

Provato, senza successo:

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

Penso di averlo trovato. Sembra che ci sia un ulteriore passaggio.

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

Ora ho accesso ai campi del mio profilo personalizzato tramite $ user_full

13
Citricguy

I pannelli possono anche farlo in modo abbastanza indolore con le relazioni.

1
Matt

Puoi caricare i dati utente (campi personalizzati inclusi) con Drupal 7 core

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

Maggiori dettagli su Drupal 7> API> Caricamento entità

0
augusto

Sto ripubblicando la mia risposta da https://stackoverflow.com/questions/8124089/get-value-of-custom-user-field-in-drupal-7-template qui poiché penso che questo è una soluzione alternativa. Questo esempio mostra come usare qualcosa come field_real_name invece del nome utente predefinito.

Se si utilizza una funzione di preelaborazione, non è necessario inserire l'oggetto globale $user. Puoi cambiare il campo nell'array $ variabili che è $variables['name'] In quello che hai nel tuo campo personalizzato che ho chiamato field_real_name. Hai accesso all'array $variables, Quindi puoi ottenere le informazioni dell'utente con questo - caricherà le informazioni associate all'UID ( vedi template_preprocess_username ):

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

Se dpm($account) (o kpr($account) se non stai usando devel) vedrai che hai accesso a tutte le informazioni dell'utente, senza usare il globale $user oggetto.

Quindi puoi modificare l'output di $variables['name'] In modo che diventi il ​​tuo field_real_name Come segue:

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

Per qualche strana ragione, i campi del profilo in Drupal 7 non sono più quelli di una volta. Tuttavia, l'oggetto del profilo utente rende accessibili i campi del profilo aggiuntivo come elementi dell'array. Ad esempio:

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

non è disponibile ma funzionerà quando riscritto in questo modo:

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

Quindi ho semplicemente fatto quanto segue nel mio codice:

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

Solo un altro modo per far funzionare le cose, invece di chiamare il $user oggetto ancora una volta.

0
abdulqadir028