Доступ до додаткових полів профілю користувача


9

Я додав десяток або більше нових полів (в Drupal 7) до профілів користувачів, використовуючи:

Конфігурація -> Люди -> Налаштування облікового запису -> Керування полями (адміністратор / конфігурація / люди / акаунти / поля)

Як я можу отримати доступ до цих значень? Вони, схоже, не є частиною користувача $

Спробував, без успіху:

global $user;
var_dump($user);

Відповіді:


13

Я думаю, що знайшов. Здається, є ще один додатковий крок.

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

Тепер у мене є доступ до моїх спеціальних полів профілю через $ user_full


1

Панелі також можуть зробити це досить безболісно у стосунках.


0

Я надсилаю свою відповідь з /programming/8124089/get-value-of-custom-user-field-in-drupal-7-template тут, оскільки вважаю, що це альтернативне рішення. Цей приклад показує, як використовувати щось на зразок field_real_name замість імені користувача за замовчуванням.

Якщо ви використовуєте функцію попередньої обробки, не потрібно втягувати глобальний $userоб'єкт. Ви можете змінити поле в масиві $ змінних, тобто $variables['name']на те, що у вашому користувальницькому полі, яке я викликав field_real_name. У вас є доступ до $variablesмасиву, тому ви можете отримати інформацію про користувача за допомогою цього - він завантажить інформацію, пов'язану з uid ( див. Template_preprocess_username ):

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

Якщо ви dpm($account)(або kpr($account)якщо ви не використовуєте devel), ви побачите, що у вас є доступ до всієї інформації користувача, без використання глобального $userоб'єкта.

Тоді ви можете змінити результат, $variables['name']щоб бути вашим field_real_nameтаким:

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

З якоїсь дивної причини поля профілів у Drupal 7 - це не те, чим раніше. Однак об’єкт профілю користувача робить додаткові поля профілю доступними як елементи масиву. Наприклад:

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

недоступний, але він буде працювати, коли переписаний так:

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

Тому я просто зробив наступне у своєму коді:

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

Просто ще один спосіб роботи, замість того, щоб $userзнову викликати об'єкт.


0

Ви можете завантажити дані користувачів (включені спеціальні поля) за допомогою ядра Drupal 7

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

Детальніше на Drupal 7> API> Entity load

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.