我正在开发一个需要在某个级别登录的组件,然后如果用户没有登录,我会放置一个登录链接,将用户带到登录页面,后面跟着查询字符串。
return=<?php echo base64_encode($_SERVER['REQUEST_URI']);?>
登录后,它会返回到该页面,但如果用户未注册且用户开始注册,是否有某种方法可以解决此问题?有没有办法做到这一点而不改变Joomla自己的一些东西?比如在cookie e.t.c中设置一些东西。或者我需要在Joomla注册组件或模块中更改一些内容。或者是否有一些插件?
任何回复都将不胜感激,请告诉您所知道的任何方式,以便它可以给我一些更好的线索。
答案 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');
}
}
}