Получить значение настраиваемого поля пользователя в шаблоне Drupal 7?

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

4 ответов


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

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 возможно, потребуется изменить, если вы используете многоязычный сайт.


ответ Клайва правильный, за исключением того, что вы должны использовать 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


Я знаю, что этот вопрос был задан довольно давно, но я хотел опубликовать альтернативу. Похоже, вы хотите изменить поле в массиве $ variables, которое является $variables['name'] к тому, что у вас есть в пользовательском поле, которое я назвал field_real_name. Если вы используете функцию предварительной обработки, нет необходимости тянуть в глобальной


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

<?php
global $user;
$user = user_load($user->uid);
print $user->name;
?>