Acceso a campos de perfil de usuario adicionales

9

Agregué una docena de nuevos campos (en Drupal 7) a los perfiles de usuario usando:

Configuración -> Personas -> Configuración de la cuenta -> Administrar campos (admin / config / people / accounts / fields)

¿Cómo puedo acceder a estos valores? No parecen ser parte de $ user

Probado, sin éxito:

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

Respuestas:

13

Creo que lo encontré. Parece que hay un paso adicional.

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

Ahora tengo acceso a mis campos de perfil personalizados a través de $ user_full

Citricguy
fuente
1

Los paneles también pueden hacer esto sin dolor con las relaciones.

Mate
fuente
0

Estoy volviendo a publicar mi respuesta de /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template aquí, ya que creo que esta es una solución alternativa. Este ejemplo muestra cómo usar algo como field_real_name en lugar del nombre de usuario predeterminado.

Si está utilizando una función de preproceso, no es necesario extraer el $userobjeto global . Puede cambiar el campo en la matriz $ variables que es $variables['name']lo que tiene en su campo personalizado que he llamado field_real_name. Tiene acceso a la $variablesmatriz, por lo que puede obtener la información del usuario con esto: cargará la información asociada con el uid ( consulte template_preprocess_username ):

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

Si usted dpm($account)(o kpr($account)si no está usando desarrollo) verá que tiene acceso a toda la información del usuario, sin usar el $userobjeto global .

Entonces puede cambiar la salida de $variables['name']ser su field_real_namecomo sigue:

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

Por alguna extraña razón, los campos de perfil en Drupal 7 ya no son lo que solían ser. Sin embargo, el objeto de perfil de usuario hace que los campos de perfil adicionales sean accesibles como elementos de matriz. Por ejemplo:

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

no está disponible, pero funcionará cuando se reescriba así:

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

Así que simplemente hice lo siguiente en mi 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'];

Solo otra forma de hacer que las cosas funcionen, en lugar de llamar al $userobjeto una vez más.

abdulqadir028
fuente
0

Puede cargar datos de usuario (campos personalizados incluidos) con Drupal 7 core

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

Más detalles en Drupal 7> API> Carga de entidad

augusto
fuente