无论如何在Joomla注册后重定向到以前的URL?

时间:2012-02-29 22:05:35

标签: joomla redirect joomla1.5 joomla-extensions

我正在开发一个需要在某个级别登录的组件,然后如果用户没有登录,我会放置一个登录链接,将用户带到登录页面,后面跟着查询字符串。

return=<?php echo base64_encode($_SERVER['REQUEST_URI']);?>

登录后,它会返回到该页面,但如果用户未注册且用户开始注册,是否有某种方法可以解决此问题?有没有办法做到这一点而不改变Joomla自己的一些东西?比如在cookie e.t.c中设置一些东西。或者我需要在Joomla注册组件或模块中更改一些内容。或者是否有一些插件?

任何回复都将不胜感激,请告诉您所知道的任何方式,以便它可以给我一些更好的线索。

2 个答案:

答案 0 :(得分:0)

在您的组件中,您可以尝试将引荐来源存储在Joomla中!会话 - 我不相信会话更改或在登录期间被替换。 我还没有时间尝试这个但它应该有效。

保存:

$session = JFactory::getSession();
$session->set('theReferrer', $_SERVER['HTTP_REFERER'], 'mycomponentname'); 

要检索:

$session = JFactory::getSession(); 
$redirectTo = $session->get('theReferrer', '', 'mycomponentname');

然后你可以在回来之前使用setRedirect

$this->setRedirect($redirectTo);

答案 1 :(得分:0)

你可以通过一个插件来实现这一点(至少在Joomla 3.x中 - 不确定这将在多远的时候起作用)。这里的关键是onUserAfterSave事件,它告诉您用户是新用户还是现有用户。

我之前写过下面的代码,所以无法回想起在onUserAfterSave事件处理程序中无法完成重定向的确切原因,但我认为重定向随后会在核心Joomla用户管理代码的其他地方被覆盖。你试着从那里开始,因此在会话中保存一个标志并在以后的事件处理程序中检查它。

class PlgUserSignupRedirect extends JPlugin
{
    public function onUserAfterSave($user, $isnew, $success, $msg)
    {
        $app = JFactory::getApplication();

        // If the user isn't new we don't act
        if (!$isnew) {
            return false;
        }

        $session = JFactory::getSession();
        $session->set('signupRedirect', 1);

        return true;
    }

    function onAfterRender() {
        $session = JFactory::getSession();
        if ($session->get('signupRedirect')) {
            JFactory::getApplication()->redirect($_SERVER['HTTP_REFERER']);
            $session->clear('signupRedirect');
        }
    }
}