Zugriff auf zusätzliche Benutzerprofilfelder

9

Ich habe den Benutzerprofilen etwa ein Dutzend neue Felder (in Drupal 7) hinzugefügt, indem ich Folgendes verwendet habe:

Konfiguration -> Personen -> Kontoeinstellungen -> Felder verwalten (admin / config / Personen / Konten / Felder)

Wie kann ich auf diese Werte zugreifen? Sie scheinen nicht Teil von $ user zu sein

Versucht, ohne Erfolg:

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

Antworten:

13

Ich glaube ich habe es gefunden. Es scheint einen zusätzlichen Schritt zu geben.

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

Ich habe jetzt über $ user_full Zugriff auf meine benutzerdefinierten Profilfelder

Citricguy
quelle
1

Panels können dies auch ganz schmerzlos mit Beziehungen tun.

Matt
quelle
0

Ich poste meine Antwort von /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template hier neu, da ich denke, dass dies eine alternative Lösung ist. Dieses Beispiel zeigt, wie Sie so etwas wie field_real_name anstelle des Standardbenutzernamens verwenden.

Wenn Sie eine Vorverarbeitungsfunktion verwenden, muss das globale $userObjekt nicht abgerufen werden. Sie können das Feld im Array $ variables so ändern $variables['name'], wie Sie es in Ihrem benutzerdefinierten Feld haben, das ich aufgerufen habe field_real_name. Sie haben Zugriff auf das $variablesArray, sodass Sie die Benutzerinformationen damit abrufen können. Dadurch werden die mit der UID verknüpften Informationen geladen ( siehe template_preprocess_username ):

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

Wenn Sie dpm($account)(oder kpr($account)wenn Sie devel nicht verwenden), werden Sie feststellen, dass Sie Zugriff auf alle Benutzerinformationen haben, ohne das globale $userObjekt zu verwenden.

Dann können Sie die Ausgabe ändern $variables['name']Ihre sein , field_real_namewie folgt:

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

Aus irgendeinem seltsamen Grund sind die Profilfelder in Drupal 7 nicht mehr so, wie sie früher waren. Das Benutzerprofilobjekt macht die zusätzlichen Profilfelder jedoch als Array-Elemente zugänglich. Zum Beispiel:

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

ist nicht verfügbar, funktioniert aber, wenn es wie folgt umgeschrieben wird:

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

Also habe ich in meinem Code einfach Folgendes getan:

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

Nur eine andere Möglichkeit, Dinge zum Laufen zu bringen, anstatt das $userObjekt erneut aufzurufen .

abdulqadir028
quelle
0

Sie können Benutzerdaten (einschließlich benutzerdefinierter Felder) mit Drupal 7 Core laden

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

Weitere Informationen finden Sie unter Drupal 7> API> Entity Load

August
quelle