繁体   English   中英

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

[英]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));
}

另请参阅在Drupal 7中编写使用字段的强大代码

根据您的设置/字段名称,在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM