Php 在Drupal 7模板中获取自定义用户字段的值?

Php 在Drupal 7模板中获取自定义用户字段的值?,php,drupal,user-interface,drupal-7,custom-fields,Php,Drupal,User Interface,Drupal 7,Custom Fields,我正在用drupal构建我的第一个站点。我创建了一个自定义用户字段:全名。 现在我想在我的模板中得到这个fild的值,并说“Hello,%username%”。 如何操作?根据您的设置/字段名,类似于template.php中的内容(模板文件的预处理函数): 然后在page.tpl.php中类似这样的内容: if (isset($full_name) && !empty($full_name)) : echo 'Hello ' . $full_name; endif; 请注

我正在用drupal构建我的第一个站点。我创建了一个自定义用户字段:全名。 现在我想在我的模板中得到这个fild的值,并说“Hello,%username%”。
如何操作?

根据您的设置/字段名,类似于
template.php中的内容(模板文件的预处理函数):

然后在
page.tpl.php
中类似这样的内容:

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

请注意,如果您运行的是多语言网站,则可能需要更改
语言\u NONE

克莱夫的回答是正确的,只是您应该使用它来获取字段的值。它将为您处理语言。您还应该清理该值

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']);
  }
}
如果您的站点使用该模块,您还可以使用如下实体元数据包装器

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));
}

另请参见

我知道这个问题很久以前就被问到了,但我想发布一个替代方案。看起来您想将$variables数组中的字段
$variables['name']
更改为我调用的自定义字段中的字段
field\u real\u name
。如果使用的是预处理函数,则无需拉入全局
$user
对象。您可以访问
$variables
数组,因此可以通过该数组获取用户信息-它将加载与uid()关联的信息:

如果您
dpm($account)
(或者
kpr($account)
如果您不使用devel),您将看到您可以访问所有用户信息,而无需使用全局
$user
对象

然后您可以将
$variables['name']
的输出更改为您的
字段\u real\u 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;
?>


您应该使用字段获取项目。在多语言网站上或字段结构发生变化时,直接访问可能会中断。@gagarine这是很久很久以前的事了。字段结构不能更改FYI,没有相应的机制。这仅在模板中有效,还是在模块中也有效?当我用
$account=user\u load($uid)加载我的用户时
,我只得到空数组而不是自定义字段:
$account->pwyw\u balance
只是一个数组(),没有内容。自定义字段是否需要加载额外的代码?当我使用
$wrapper=entity\u metadata\u wrapper('user',$account)->value()加载用户时,也会发生同样的情况
$wrapper['pwyw\u balance']
是一个空数组。
entity\u metadata\u wrapper()
调用中缺少的
$
符号应该是
$user
而不是
user
您好,下面的代码无法获取任何数据$用户=用户负载('72')$first_name=字段_get_items('user',$user,'field_first_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;
?>