Accès à des champs de profil utilisateur supplémentaires

9

J'ai ajouté une dizaine de nouveaux champs (dans Drupal 7) aux profils utilisateurs en utilisant:

Configuration -> Personnes -> Paramètres du compte -> Gérer les champs (admin / config / personnes / comptes / champs)

Comment puis-je accéder à ces valeurs? Ils ne semblent pas faire partie de $ user

Essayé, sans succès:

global $user;
var_dump($user);
Citricguy
la source

Réponses:

13

Je pense que je l'ai trouvé. Il semble qu'il y ait une étape supplémentaire.

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

J'ai maintenant accès à mes champs de profil personnalisés via $ user_full

Citricguy
la source
1

Les panels peuvent également le faire sans douleur avec les relations.

Mat
la source
0

Je republie ma réponse de /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template ici car je pense que c'est une solution alternative. Cet exemple montre comment utiliser quelque chose comme field_real_name au lieu du nom d'utilisateur par défaut.

Si vous utilisez une fonction de prétraitement, il n'est pas nécessaire d'extraire l' $userobjet global . Vous pouvez modifier le champ du tableau $ variables qui correspond $variables['name']à ce que vous avez dans votre champ personnalisé que j'ai appelé field_real_name. Vous avez accès au $variablestableau, vous pouvez donc obtenir les informations utilisateur avec cela - il chargera les informations associées à l'uid ( voir template_preprocess_username ):

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

Si vous dpm($account)(ou kpr($account)si vous n'utilisez pas devel), vous verrez que vous avez accès à toutes les informations utilisateur, sans utiliser l' $userobjet global .

Ensuite , vous pouvez changer la sortie $variables['name']être votre field_real_namesuit comme:

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
la source
0

Pour une raison étrange, les champs de profil dans Drupal 7 ne sont plus ce qu'ils étaient. Cependant, l'objet de profil utilisateur rend les champs de profil supplémentaires accessibles en tant qu'éléments de tableau. Par exemple:

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

n'est pas disponible mais cela fonctionnera quand il sera réécrit comme ceci:

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

J'ai donc simplement fait ce qui suit dans mon code:

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

Juste une autre façon de faire fonctionner les choses, au lieu d'appeler à nouveau l' $userobjet.

abdulqadir028
la source
0

Vous pouvez charger des données utilisateur (champs personnalisés inclus) avec Drupal 7 core

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

Plus de détails sur Drupal 7> API> Charge d'entité

août
la source