我正在抓住以下事件来做进一步的逻辑:
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的默认存储视图?并且可以在不重定向到所选商店的情况下这样做,我的意思是在页面加载之前设置商店视图的值吗?
这就是我解决问题的方法.我已经安装了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)
| 归档时间: |
|
| 查看次数: |
8576 次 |
| 最近记录: |