Magento多货币缓存问题

时间:2016-05-06 12:46:46

标签: magento

我们正在将国际结账纳入Magento。客户可以使用当地货币查看产品。但问题是货币被缓存了。例如:如果有人从印度浏览,该页面将显示在INR中。如果有人从美国浏览同一页面,它应显示在$。但由于缓存,它将显示在INR中。我知道这可以使用缓存打孔来修复。你能告诉我们打孔需要哪个区块吗?感谢您是否可以指导我。

1 个答案:

答案 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, '/');
        }
    }
}

根据您的要求选择您的商店名称。