Joomla getUser()不显示更新的用户数据

时间:2013-02-22 16:29:41

标签: php session joomla joomla2.5 joomla3.0

下面的代码允许我在用户的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会话中更新会话数据而不是手动执行它?

3 个答案:

答案 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交互的混乱方式。