Accesso a campi del profilo utente aggiuntivi


9

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

Risposte:


13

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


1

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


0

Sto ripubblicando la mia risposta da /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template qui poiché penso che questa sia 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 estrarre l' $useroggetto globale . Puoi cambiare il campo nell'array $ variabili che è $variables['name']quello che hai chiamato nel tuo campo personalizzato field_real_name. Hai accesso $variablesall'array, 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 tu dpm($account)(o kpr($account)se non stai usando devel) vedrai che hai accesso a tutte le informazioni dell'utente, senza usare l' $useroggetto globale .

Quindi puoi modificare l'output di $variables['name']essere tuo field_real_namecome 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

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 i campi del profilo aggiuntivi accessibili come elementi dell'array. Per 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 richiamare $usernuovamente l' oggetto.


0

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à

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.