1

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

我使用该dsm($user)函数输出用户变量,它包含除profile_real_name数据之外的所有内容

我也跑dsm($vars)phptemplate_preprocess_user_profile,我可以看到它包含一个名为 account 的对象,它确实包含我需要的信息,但这个对象在 $user 变量中不可用。

非常感谢

4

3 回答 3

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

于 2010-02-19T19:30:21.473 回答
1

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

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

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

预处理函数并不难制作,在你的主题的 template.php 文件中,你只需phptemplate用你的主题名称替换定义的代码。在这种情况下,您不需要更改预处理功能,因为您已经拥有了所需的东西。

于 2010-02-17T20:45:31.687 回答
0

例如,如果您想在 user-profile.tpl.php 中执行此操作,您需要的所有信息都存在于$account数组中。

否则,您可以通过加载基于用户对象的用户对象来访问用户数据(即当前登录的人,或者如果您可以查询数据库并以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

希望能帮助到你!

于 2010-02-17T20:40:21.073 回答