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

2019-08-17 02:57发布

下面的代码可以让我的用户的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会话的会话数据,而不是做手工?

Answer 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);


Answer 2:

我知道在最新的Joomla 2.5.9这仍是一个问题,而且治标不治本是这样添加到组件/ com_users /控制器/ 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与($用户> ID)); 解决方案,因为你没有存储所有在的Joomla会话的用户对象(访问权限)中发现的数据。



Answer 3:

它实际上比看起来难,基本上你需要让他们reauthenicate。 这是因为JUser与和JSession互动混乱的方式。



文章来源: Joomla getUser() does not show the updated user data