我需要将一个 URL 传递给 Magento,它应该在完成注销后重定向用户。为了存储它,我执行以下操作:
$BackTo = Mage::app()->getRequest()->getParam('backto');
if(!empty($BackTo)) {
Mage::getSingleton('core/session')->setBackTo($BackTo);
}
需要时,我使用Mage::getSingleton('core/session')->getBackTo()
. 问题是,虽然这在登录时效果很好,但在注销时不起作用(最需要它的地方)。我可以存储会话变量,也可以立即检索它,但是,当我在logout.phtml
重定向 JavaScript 所在的位置时,此类变量设置为null
.
我怀疑 Magento 在注销时执行的重定向与这个“消失”的会话变量有关,但我不能肯定地说。
为了完整起见,这里是相关代码(代码比这更多,但它们主要是辅助功能,不会在注销时调用)。
帐户控制器
class MyPackage_Redirectplugin_AccountController extends Mage_Customer_AccountController {
/**
* @see AccountController:logoutAction()
*/
public function logoutAction() {
$this->_getSession()
->logout()
->setBeforeAuthUrl(Mage::getUrl());
// Store the "back to" URL in a session variable
$this->StoreBackToURL();
$this->_redirect('*/*/logoutSuccess');
}
protected function StoreBackToURL() {
// Store the value of the "backto" argument, if it was passed
$BackTo = Mage::app()->getRequest()->getParam('backto');
if(!empty($BackTo)) {
Mage::getSingleton('core/session')->setBackTo($BackTo);
// At this point I can see the correct value stored in the session variable
}
}
}
注销.phtml
// The following command returns null
$redirectURL = Mage::getSingleton('core/session')->getBackTo();
在此先感谢您的帮助。
25 年 12 月 9 日更新 - 找到了解决方法
由于我找不到将会话变量传递给重定向打开的注销页面的方法,因此我选择了另一种方法:我通过 URL 传递它。具体来说,我实现了一个logoutAction()
which calls $this->_redirect('*/*/logoutSuccess', array('myvar' => $MyValue));
。
在模板中,我必须进行重定向,我只是使用Mage::helper('core')->urlDecode(Mage::app()->getRequest()->getParam('myvar'));
.
我知道可能有更好的方法来实现整个事情,但我需要一个错误修复解决方案,这可以完成工作。感谢所有回答的人。