[英]Get value of custom user field in Drupal 7 template?
我正在用drupal构建我的第一个站点。 我创建了一个自定义用户字段:全名。 现在,我想在模板中获取此fild的值,说“你好,%username%”。 我怎么做?
Clive的答案是正确的,除了您应该使用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));
}
根据您的设置/字段名称,在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
。
我知道这个问题是很久以前提出的,但是我想发布一个替代方案。 看来您想将$ variables数组中的字段$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)
(或者如果不使用devel则使用kpr($account)
),您将看到无需使用全局$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;
}
}
我们可以在模板文件中的任何位置添加以下代码。
<?php
global $user;
$user = user_load($user->uid);
print $user->name;
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.