注销后Magento重定向

tur*_*bod 3 magento magento-1.7

如何在注销后将客户重定向到magento中的默认商店视图?在注销时,我将其重定向到另一个商店视图.

phi*_*kle 7

我知道它不优雅,但我发现最简单的方法是将模板文件复制并修改app/design/frontend/base/default/template/customer/logout.phtml到您自己的主题目录.

特别是这一行:

<p><?php echo Mage::helper('customer')->__('You have logged out and will be redirected to our homepage in 5 seconds.') ?></p>
<script type="text/javascript">
//<![CDATA[
    setTimeout(function(){ location.href = '<?php echo $this->getUrl() ?>'},5000);
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)

通过修改location.href url甚至超时,您可以将用户指向注销后的任何位置.例如:

<script type="text/javascript">
//<![CDATA[
    setTimeout(function(){ location.href = '<?php echo $this->getUrl('*/*/login') ?>'},500);
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)

同样,它并不优雅,但它应该是足够快的重定向,然后页面上的快速跳转将它们推送到另一个URL,在上面的示例中,返回到登录屏幕.


ben*_*rks 6

不幸的是,操作注销重定向位置没有方便的事件挂钩.

Mage_Customer_AccountController::logoutAction()设置一个重定向到::logoutSuccessAction()的响应对象后,customer_logout事件被分派,并且它的的渲染客户/ logout.phtml模板,使用PHP来设定回声一个javascript参数去重定向到没有OOB可能性主页传递一个这样的Arg替代基于JS的重定向.

我认为最干净的解决方案是观察controller_action_postdispatch_customer_account_logout,获取控制器对象,并使用响应对象的setRedirectWithCookieCheck()方法覆盖位置标头:

public function logoutRedirect($obs)
{
    $obs->getControllerAction()
        ->setRedirectWithCookieCheck(/* your URL param(s) */);
}
Run Code Online (Sandbox Code Playgroud)