我正在开发一个组件,该组件需要在某个级别登录,如果用户没有登录,我会放置一个登录链接,将用户带到登录页面,查询字符串中包含以下内容。
return=<?php echo base64_encode($_SERVER['REQUEST_URI']);?>
登录后,它会回到那个页面,但如果用户没有注册,而用户开始注册,有没有办法解决这个问题?有没有办法做到这一点而不改变Joomla的某些东西?比如在cookie e.t.c.中设置一些东西,或者我需要在Joomla注册组件或模块中更改一些东西。或者有插件吗?
任何回复都将不胜感激,请告诉我你所知道的一切,以便给我一些更好的线索。
在您的组件中,您可以尝试将referrer存储在Joomla!会话-我不认为会话在登录过程中发生更改或被替换我还没有时间尝试这个,但它应该有效
保存:
$session = JFactory::getSession();
$session->set('theReferrer', $_SERVER['HTTP_REFERER'], 'mycomponentname');
检索:
$session = JFactory::getSession();
$redirectTo = $session->get('theReferrer', '', 'mycomponentname');
然后您可以在返回之前使用setRedirect
。
$this->setRedirect($redirectTo);
你可以用一个插件来实现这一点(至少在Joomla3.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');
}
}
}