【问题标题】:Joomla getUser() does not show the updated user dataJoomla getUser() 不显示更新的用户数据
【发布时间】:2013-02-08 08:16:09
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您应该使用 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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 哦,如果您只想为自己做这件事,即确定更改您自己的名字。不过,这不会改变其他用户的会话。
      【解决方案3】:

      我知道在最新的 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-01-14
        • 2023-03-09
        • 2020-09-06
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 2015-10-15
        • 2023-04-06
        • 1970-01-01
        相关资源
        最近更新 更多