2011-11-14 93 views

回答

11

根据您的设置/字段名,这样的事情在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

您应该使用field_get_items。直接访问可以在多语言网站上打破,或者现场结构发生变化。 – gagarine

+0

@gagarine这是很久很久以前。字段结构不能改变FYI,它没有任何机制。 – Clive

+0

这只能在模板或模块中使用吗?当我用'$ account = user_load($ uid);'加载我的用户时,我只得到空数组而不是自定义字段:'$ account-> pwyw_balance'只是一个没有内容的数组()。自定义字段是否需要加载额外的代码?当我使用'$ wrapper = entity_metadata_wrapper('user',$ account) - > value()'加载用户时,会发生同样的事情。 '$ wrapper ['pwyw_balance']'是一个空数组。 – nerdoc

19

克莱夫的答案是正确的,除了你应该使用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)); 
} 

参见Writing robust code that uses fields, in Drupal 7

+1

'entity_metadata_wrapper()'调用中缺少'$'签名应该是'$ user'而不是'user' – FLY

+0

修正了,谢谢。 –

+0

嗨皮埃尔,下面的代码是没有得到任何数据。$ user = user_load('72'); $ first_name = field_get_items('user',$ user,'field_first_name');这里也有 – Ananth

0

我知道这个问题被问前一段,但我想发布一个替代方案。看起来你想将$ variables数组中的字段更改为$variables['name'],这与您在我的field_real_name调用的自定义字段中的字段相同。如果您正在使用预处理功能,则无需拉入全局对象$user。您可以访问$variables阵列,这样你就可以得到该用户的信息 - 这将加载有UID(see 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

我们可以在模板文件中的任意位置添加下面的代码。

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