我正在抓住以下事件来做进一步的逻辑:
core_block_abstract_prepare_layout_before
在Observer类中我这样做:
Mage::app()->setCurrentStore($storeView);
Mage::run($storeCode, "store");
但这会引发异常:
Mage注册表项“application_params”已经存在
基本上我要做的是“根据当前的IP更改语言(商店视图)”,我试图通过magento自定义模块来实现这一点。
我希望能够使用magento event observer以编程方式更改magento的默认商店视图?并且可以在不重定向到所选商店的情况下这样做,我的意思是在页面加载之前设置商店视图的值吗?
答案 0 :(得分:6)
这就是我解决问题的方法。我已经安装了GeoIP扩展。由此我们可以获得基于IP的国家代码。我在观察者中添加了一个函数,这只会在页面加载时触发一次事件controller_action_predispatch
,在观察者中,我使用一个开关案例在商店之间切换。这是我的功能&切换案例。
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;
}
}
}
答案 1 :(得分:0)
U可以使用ip重定向到商店视图。无需使用Mage :: run
switch(trim($countryCode))
{
case 'CH':
$url = $siteurl . '?___store=german';
header( 'Location:' . $url);die;
break;
case 'DE':
$url = $siteurl . '?___store=german';
header( 'Location:' . $url);die;
break;
case 'IN':
$url = $siteurl . '?___store=english';
header( 'Location:' . $url);die;
break;
default:
$url = $siteurl . '?___store=usa';
header( 'Location:' . $url);die;
break;
}