Получить значение пользовательского поля в шаблоне Drupal 7? - PullRequest
7 голосов
/ 14 ноября 2011

Я создаю свой первый сайт с Drupal. И я сделал пользовательское поле пользователя: полное имя. Теперь я хочу получить значение этого файла в моем шаблоне, чтобы сказать «Привет,% username%». Как мне это сделать?

Ответы [ 4 ]

19 голосов
/ 07 декабря 2011

Ответ Клайва верен, за исключением того, что вы должны использовать field_get_items, чтобы получить значения для поля.Это будет обрабатывать язык для вас.Вам также следует санировать значение.

function THEME_preprocess_page() {
  global $user;
  $user = user_load($user->uid); // Make sure the user object is fully loaded
  $full_names = field_get_items('user', $user, 'field_full_name');
  if ($full_names) {
    $vars['full_name'] = check_plain($full_names[0]['value']);
  }
}

Если на вашем сайте используется модуль Entity API , вы также можете использовать оболочку метаданных объекта, например,

function THEME_preprocess_page() {
  global $user;
  $user = user_load($user->uid); // Make sure the user object is fully loaded
  $wrapper = entity_metadata_wrapper('user', $user);
  $vars['full_name'] = $wrapper->field_full_name->get(0)->value(array('sanitize' => TRUE));
}

См. Также Написание надежного кода с использованием полей в Drupal 7

11 голосов
/ 14 ноября 2011

В зависимости от вашей настройки / имени поля, что-то вроде этого в template.php (функция предварительной обработки для файла шаблона):

function mytheme_preprocess_page() {
  global $user;
  $user = user_load($user->uid); // Make sure the user object is fully loaded

  $vars['full_name'] = $user->field_full_name[LANGUAGE_NONE][0]['value'];
}

Затем что-то вроде этого в page.tpl.php:

if (isset($full_name) && !empty($full_name)) :
  echo 'Hello ' . $full_name;
endif;

Обратите внимание, что LANGUAGE_NONE может потребоваться изменить, если вы работаете на многоязычном сайте.

0 голосов
/ 05 января 2016

Мы можем добавить приведенный ниже код в любом месте файла шаблона.

<?php
global $user;
$user = user_load($user->uid);
print $user->name;
?>
0 голосов
/ 15 августа 2015

Я знаю, что этот вопрос задавали довольно давно, но я хотел опубликовать альтернативу. Похоже, что вы хотите изменить поле в массиве $ variable, равное $variables['name'], на то, что вы имеете в своем настраиваемом поле, которое я назвал field_real_name. Если вы используете функцию предварительной обработки, нет необходимости использовать глобальный объект $user. У вас есть доступ к массиву $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;
  }
}
...