Получить значение настраиваемого поля пользователя в шаблоне 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;
?>