0

我正在编写一个自定义模块来显示可以用 AJAX 加载的各种产品。

所以我正在调用我的控制器方法之一,然后回显由块填充的 html。这都很好...

当产品添加到比较链接 Magento 将我重定向回调用的最后一个控制器方法而不是添加我的模块的页面后,就会出现问题。

是否有任何巧妙的方法来解决此行为而不是覆盖 addAction()?

谢谢!

4

1 回答 1

1

您可以通过挂钩postDispatch比较控制器的观察者来做到这一点。创建自己的模块。Easylife_Compare让我们用以下文件来调用它:
app/etc/modules/Easylife_Compare.xml- 声明文件

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Compare>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
            </depends>
        </Easylife_Compare>
    </modules>
</config>

app/code/local/Easylife/Compare/etc/config.xml- 配置文件

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Compare>
            <version>0.0.1</version>
        </Easylife_Compare>
    </modules>
    <global>
        <models><!-- declar your own models-->
            <easylife_compare>
                <class>Easylife_Compare_Model</class>
            </easylife_compare>
        </models>
    </global>
    <frontend>
        <events>
            <controller_action_postdispatch_catalog_product_compare_add><!-- observe the post dispatch for adding to compare list -->
                <observers>
                    <easylife_compare>
                        <model>easylife_compare/observer</model>
                        <method>stopRedirect</method>
                    </easylife_compare>
                </observers>
            </controller_action_postdispatch_catalog_product_compare_add>
        </events>
    </frontend>
</config>

app/code/local/Easylife/Compare/Model/Observer.php- 你自己的观察者

<?php
class Easylife_Compare_Model_Observer{
    public function stopRedirect($observer){
        //get the real referrer from server var
        $referrer = Mage::app()->getRequest()->getServer('HTTP_REFERER');
        if ($referrer){
            //set your new redirect
            Mage::app()->getResponse()->setRedirect($referrer);
        }
        return $this;
    }
}

清除缓存并试一试。这应该适用于“正常”版本,没有通过 ajax 和您的情况检索的产品。

于 2013-07-24T14:09:30.010 回答