使用magento事件观察器以编程方式更改存储视图

R T*_*R T 3 magento

我正在抓住以下事件来做进一步的逻辑:

core_block_abstract_prepare_layout_before
Run Code Online (Sandbox Code Playgroud)

在Observer类我这样做:

Mage::app()->setCurrentStore($storeView);

Mage::run($storeCode, "store");

但这引发了一个例外:

Mage注册表项"application_params"已经存在

基本上我想要做的是"根据当前的IP更改语言(商店视图)",我试图通过magento自定义模块实现这一点.

我希望能够使用magento事件观察器以编程方式更改magento的默认存储视图?并且可以在不重定向到所选商店的情况下这样做,我的意思是在页面加载之前设置商店视图的值吗?

Pav*_*mar 6

这就是我解决问题的方法.我已经安装了GeoIP扩展.由此我们可以获得基于IP的国家代码.我在观察者中添加了一个函数,这只会在页面加载事件时触发一次controller_action_predispatch,在观察者中,我使用一个switch case在商店之间切换.这是我的功能和开关案例.

public function getLocationInfoByIp($observer) {

        $geoIP = Mage::getSingleton('geoip/country');
        $cnCode =  $geoIP->getCountry(); 

        switch ($cnCode) {

            case "US": {
                  Mage::app()->setCurrentStore('en');
                  break;
            }
            case "IN": {
                Mage::app()->setCurrentStore('de');
                break;
            }
            default: {
                Mage::app()->setCurrentStore('en');
                break;
            }
       }
 }
Run Code Online (Sandbox Code Playgroud)