使用配置文件模块我创建了一个名为 profile_real_name 的文本字段,用户在注册时填写该文本字段。如何在node.tpl.php中访问此变量?
我使用dsm($user)
函数输出用户变量,它包含 profile_real_name
我还在dsm($vars)
上运行phptemplate_preprocess_user_profile
,我可以看到它包含一个名为account的对象,它确实包含了我需要的信息,但$ user变量中没有此对象。
非常感谢
答案 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
希望它有所帮助!