ログアウトの完了後にユーザーをリダイレクトする必要がある URL を Magento に渡す必要があります。それを保存するには、次のようにします。
$BackTo = Mage::app()->getRequest()->getParam('backto');
if(!empty($BackTo)) {
Mage::getSingleton('core/session')->setBackTo($BackTo);
}
必要に応じて、 を使用して URL を取得します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();
助けてくれてありがとう。
12/09/25 更新 - 回避策を発見
リダイレクトによって開かれたログアウト ページにセッション変数を渡す方法が見つからなかったため、別の方法を選択しました。URL 経由で渡しています。具体的には、logoutAction()
which を呼び出すを実装しました$this->_redirect('*/*/logoutSuccess', array('myvar' => $MyValue));
。
リダイレクトを行う必要があるテンプレートでは、Mage::helper('core')->urlDecode(Mage::app()->getRequest()->getParam('myvar'));
.
全体を実装するためのより良い方法があったかもしれないことは承知していますが、バグ修正ソリューションが必要であり、これでうまくいきます。答えてくれたすべての人に感謝します。