我需要將URL傳遞給Magento,它應在完成註銷後重定向用戶。要存儲它,我執行以下操作:Magento - 將會話變量傳遞到通過_redirect()調用的頁面
$BackTo = Mage::app()->getRequest()->getParam('backto');
if(!empty($BackTo)) {
Mage::getSingleton('core/session')->setBackTo($BackTo);
}
需要時,我使用Mage::getSingleton('core/session')->getBackTo()
檢索URL。問題是,雖然這在登錄時效果很好,但它不適用於註銷(最需要的地方)。我可以存儲會話變量,我也可以立即檢索它,但是,當我處於重定向JavaScript所在的logout.phtml
時,此類變量設置爲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
}
}
}
Logout.phtml
// The following command returns null
$redirectURL = Mage::getSingleton('core/session')->getBackTo();
在此先感謝您的幫助。
更新25年12月9日 - 找到一個解決辦法
因爲我無法找到一個方法來傳遞一個會話變量被重定向打開登出頁面,我選擇了另一種方式:我通過URL傳遞它。具體來說,我實施了logoutAction()
,其中調用$this->_redirect('*/*/logoutSuccess', array('myvar' => $MyValue));
。
在模板中,我必須做重定向,我只需使用Mage::helper('core')->urlDecode(Mage::app()->getRequest()->getParam('myvar'));
來讀取這樣的參數。
我知道有可能有更好的方法來實現整個事情,但我需要一個錯誤修復解決方案,這是做這項工作。感謝所有回答的人。
謝謝,但是,當我回答benmark時,攔截註銷並重定向到其他地方不是問題。整個插件已經完成了這項工作,它只是在將目標URL存儲到會話變量中並將其傳遞給新的logout.phtml時失敗,該新的logout.phtml將執行重定向。我想到了數據庫,但創建一個表,一個模型和整個(慢)ORM的東西只是爲了將一個字符串從一個頁面傳遞到另一個頁面,因此這種路由不可行。無論如何感謝您的建議。 – Diego