4

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

4

3 回答 3

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);
于 2013-02-22T16:41:52.727 回答
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);

你不能简单地使用之前推荐的 set('user', new JUser($user->id)); 解决方案,因为您没有存储在 Joomla 会话用户对象(访问权限)中找到的所有数据。

于 2013-04-16T18:07:10.693 回答
0

它实际上比看起来更难,基本上你需要让它们重新认证。这是因为 JUser 和 JSession 交互的方式混乱。

于 2013-02-22T19:11:40.887 回答