访问Drupal 7中节点上的用户字段

时间:2011-12-12 19:34:23

标签: drupal drupal-7

我在用户注册表单中添加了一些自定义字段。即名字和姓氏。

注册用户可以撰写文章,我已经为这些文章和节点创建了内容类型 - article.tpl.php。

我想要做的是从文章标题下面的用户注册表单(名字,姓氏)中提取两个字段。我似乎无法访问此数据。 我想要用户提供的具体名称,而不是login..n提供的用户名。这可能是完全随机的。

我是如何在node.tpl上呈现这些字段的?

干杯。

2 个答案:

答案 0 :(得分:0)

请记住,您可以根据他们的uid加载任何用户的个人资料数据,而不是$account = user_load($user->uid);,而是user_load($authors_uid)

更具体地说,这是我使用的通用的,通用的函数,它收集firstname和lastname用户字段并以空格分隔它们。根据我的用户的要求,返回是大写的,但是你明白了。我仍然在将D6转换为D7,因此可能没有必要进行语言检查。如果我发现它不是,我会编辑此回复。

/**
 * This will return the user's name (first last in caps)
 * @uses user_load()
 * @param int $user_id optional user id to look for
 * @return string
 */
function get_user_name($user_id = 0) {
  global $user;
  $active_user = user_load((($user_id > 0)? $user_id : $user->uid));
  $first_name = $active_user->field_firstname[(($active_user->language == '')? 'und' :    $active_user->language)][0]['value'];
  $last_name = $active_user->field_lastname[(($active_user->language == '')? 'und' : $active_user->language)][0]['value'];    
  return strtoupper($first_name . ' ' . $last_name);
}

答案 1 :(得分:-1)

当用户登录Drupal时,该用户已加载,以便您可以在请求期间访问“username”和“email”等字段。但是,默认情况下不会加载您定义的自定义字段。

您可以做的是在主题中实现预处理功能。也就是说,在主题文件夹中创建/编辑文件'template.php',并添加以下代码:

function [mythemename]_preprocess_node(&$vars, $hook) {

  global $user;
  $account = user_load($user->uid);

  $vars['firstname'] = $account['path']['to']['field'];
  $vars['lastname'] = $account['path']['to']['field'];

}

现在发生的是每次Drupal即将显示节点时,它会通过您的函数运行所有节点变量(例如$ title和$ content),以便您可以更改所需内容。但是,您还可以添加更多变量。因此,我们所做的是让用户获取请求(可能是匿名的'uid'设置为0)并加载该用户的帐户,该帐户包含您定义的所有字段。

请注意,我无法记住这些字段是如何存储在您的帐户中的。你需要看一下。