访问用户配置文件变量

时间:2010-02-17 18:44:07

标签: php drupal templates preprocessor

使用配置文件模块我创建了一个名为 profile_real_name 的文本字段,用户在注册时填写该文本字段。如何在node.tpl.php中访问此变量?

我使用dsm($user)函数输出用户变量,它包含 profile_real_name

的数据以外的所有内容

我还在dsm($vars)上运行phptemplate_preprocess_user_profile,我可以看到它包含一个名为account的对象,它确实包含了我需要的信息,但$ user变量中没有此对象。

非常感谢

3 个答案:

答案 0 :(得分:3)

如果要在node.tpl.php中访问作者的配置文件信息,那么您希望使用phptemplate_preprocess_node函数而不是user_profile函数。默认情况下,节点预处理功能没有$ account对象,因此您必须将其加载到:

这可以在template.php文件中的phptemplate_preprocess_node函数中找到:

if ($vars['uid']) {
  $vars['account'] = user_load(array('uid' => $vars['uid']));
}

然后您就可以在node.tpl.php中访问作者的个人资料值。您具体询问的价值是:

print($account->profile_real_name);

但是,听起来您可能希望节点作者的名称显示为profile_real_name值而不是其帐户名称?

如果是这样,那么更有效的方法是覆盖theme_username函数。

这不是你直接提到的问题所以我不会在这里讨论,但drupal.org论坛上的这篇文章将是Drupal 5或6开始的好地方: http://drupal.org/node/122303#comment-204277

答案 1 :(得分:1)

$account是您通常称为非全局用户的用户,以避免意外覆盖全局用户,从而导致用户以该用户身份登录。

我只是做了一些检查,解决问题的最简单方法是在模板中使用$ account而不是$ user。

在模板中使用$user或者像WmasterJ那样建议是错误的。您将发布错误的数据。您将发布登录用户的数据,而不是正在观看个人资料的用户的数据。当您查看所有其他用户的个人资料而不是您自己的个人资料时,就会发生此错误。

预处理功能并不难,在主题的template.php文件中,只需将phptemplate替换为主题名称定义的代码即可。在这种情况下,您不需要改变预处理功能,因为您已经拥有了所需的功能。

答案 2 :(得分:0)

如果你想在例如user-profile.tpl.php中这样做,你需要的所有信息都存在于$account数组中。

否则,您可以通过基于用户对象的id(当前登录的用户对象,或者如果您可以查询数据库并以uid的方式)加载用户对象来访问用户数据。

首先获取当前用户的uid

$uid = $user->uid;

然后加载用户对象:

// Create user objets based on uid ()
$user_obj = user_load($user->uid);

然后加载用户个人资料变量:

// Load profile
profile_load_profile($user_obj);

现在$user_obj变量(通过引用profile_load_profile传递)有一个对象,其中包含可以像这样访问的配置文件信息:

$user_obj->profile_real_name

希望它有所帮助!