下面的代码允许我在用户的Joomla个人资料的个人资料页面中显示用户的姓名。鉴于我已经覆盖了模板以获得我想要的外观和感觉。
$user =& JFactory::getUser();
if (!$user->guest) {
echo 'You are logged in as:<br />';
echo 'Real name: ' . $user->name . '';
}
我的问题是我允许用户更新自己的个人资料。在更新了他的名字后,数据库会正确更新,但不会在个人资料页面中显示更新的名称。
当我浏览Joomla文档时,我发现用户数据存储在会话中(JFactory :: getUser())。如果我print_r($_SESSION)
我可以看到用户数据对象。此外,如果我退出,则再次登录更新的名称将显示在个人资料页面上。
如何在数据更新后在配置文件页面中显示更新详细信息?有没有办法在Joomla会话中更新会话数据而不是手动执行它?
答案 0 :(得分:7)
您应该使用JSession为用户的当前会话设置新数据
$user = JFactory::getUser();
$session = JFactory::getSession();
$session->set('user', new JUser($user->id));
//new data for your user after the update
$user = JFactory::getUser();
print_r($user);
答案 1 :(得分:1)
我知道在最新的Joomla 2.5.9中,这仍然是一个问题,临时解决方案是这样的,在成功保存用户记录后添加到components / com_users / controllers / profile.php编辑功能。
// Get session user object
$session = JFactory::getSession();
$tmpUser = $session->get('user');
// Update necessary fields
$tmpUser->name = $data['name'];
$tmpUser->email = $data['email1'];
// Update the session user object
$session->set('user', $tmpUser);
您不能简单地使用之前推荐的套装('用户',新的JUser($ user-&gt; id));解决方案,因为您没有存储在Joomla会话用户对象中找到的所有数据(访问权限)。
答案 2 :(得分:0)
它实际上比它看起来更难,基本上你需要让它们重新认识。这是因为JUser和JSession交互的混乱方式。