我们正在将国际结账纳入Magento。客户可以使用当地货币查看产品。但问题是货币被缓存了。例如:如果有人从印度浏览,该页面将显示在INR中。如果有人从美国浏览同一页面,它应显示在$。但由于缓存,它将显示在INR中。我知道这可以使用缓存打孔来修复。你能告诉我们打孔需要哪个区块吗?感谢您是否可以指导我。
答案 0 :(得分:0)
你需要一个GeoIp模块。
可在此处找到一个好的资源:https://www.atwix.com/magento/geoip-magento-store-switcher/
首先,您必须安装GitHub模块:https://github.com/tim-bezhashvyly/Sandfox_GeoIP
然后,您必须在系统配置 - >常规 - >国家/地区选项
下同步IP数据库从那时起,您需要使用以下帮助程序创建自己的模块:
/* app/code/local/Atwix/Ipstoreswitcher/Helper/Data.php */
class Atwix_Ipstoreswitcher_Helper_Data extends Mage_Core_Helper_Abstract
{
const DEFAULT_STORE = 'English';
/**
* countries to store relation
* default is English
* @var array
*/
protected $_countryToStore = array(
'US' => 'sv2',
'IN' => 'sv1'
);
/**
* get store view name by country
* @param $country
* @return bool
*/
public function getStoreByCountry($country)
{
if (isset($this->_countryToStore[$country])) {
return $this->_countryToStore[$country];
}
return self::DEFAULT_STORE;
}
}
然后,您需要观察controller_action_postdipatch
事件以重定向您的客户:
<?xml version="1.0"?>
<!--app/code/local/Atwix/Ipstoreswitcher/etc/config.xml-->
<config>
...
<global>
...
</global>
<frontend>
<events>
<controller_action_postdispatch>
<observers>
<atwix_ipstoreswitcher>
<class>atwix_ipstoreswitcher/observer</class>
<method>controllerActionPostdispatch</method>
</atwix_ipstoreswitcher>
</observers>
</controller_action_postdispatch>
</events>
</frontend>
</config>
最后你的观察者:
/* app/code/local/Atwix/Ipstoreswitcher/Model/Observer.php */
class Atwix_Ipstoreswitcher_Model_Observer
{
/**
* redirects customer to store view based on GeoIP
* @param $event
*/
public function controllerActionPostdispatch($event)
{
$cookie = Mage::getSingleton('core/cookie');
if ($cookie->get('geoip_processed') != 1) {
$geoIPCountry = Mage::getSingleton('geoip/country');
$countryCode = $geoIPCountry->getCountry();
if ($countryCode) {
$storeName = Mage::helper('atwix_ipstoreswitcher')->getStoreByCountry($countryCode);
if ($storeName) {
$store = Mage::getModel('core/store')->load($storeName, 'code');
if ($store->getName() != Mage::app()->getStore()->getName()) {
$event->getControllerAction()->getResponse()->setRedirect($store->getCurrentUrl(false));
}
}
}
$cookie->set('geoip_processed', '1', time() + 86400, '/');
}
}
}
根据您的要求选择您的商店名称。