基于国家/地区的 Magento 2 默认货币
Magento 2 default currency based on country
在我的网站上,我有 2 种货币,用户可以。一种是美元,另一种是里亚尔。默认货币为美元。在我们的徽标附近有一个下拉菜单,客户可以在其中将货币更改为里亚尔和美元。默认选项是美元
我想要的是,任何从沙特阿拉伯访问我们网站的客户,我们必须向他们展示所有其他国家/地区的里亚尔货币,我们必须向他们展示美元货币。
我该怎么做?请帮忙。
对于这项工作,您需要从 $_SERVER['REMOTE_ADDR'] 检查您的 ip,并从 MaxMind 的 GeoIP2 数据库中找到国家代码 (https://dev.maxmind.com/geoip/geoip2/geolite2/)。
参考:https://www.w3resource.com/php-exercises/php-basic-exercise-5.php
之后,您需要在 app/code/your_vendor/your_module/etc/frontend/events 中的模块中使用事件观察器 controller_action_predispatch。xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/events.xsd">
<event name="controller_action_predispatch">
<observer name="currency_init_for_country" instance="your_vendor\your_module\Observer\PreDispatchObserver" shared="false" />
</event>
</config>
在your_vendor\your_module\Observer\PreDispatchObserver.php文件中你需要添加:
<?php
namespace your_vendor\your_module\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class PreDispatchObserver implements ObserverInterface
{
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
private $storeManager;
public function __construct(
\Magento\Store\Model\StoreManagerInterface $storeManager
) {
$this->storeManager = $storeManager;
}
/**
* @inheritDoc
*/
public function execute(Observer $observer)
{
// logic for taking current country from $_SERVER['REMOTE_ADDR'] and checking from maxmind database and find the country code.then you can add a if else condition for currecny here based on country code.
$currency = 'USD';
if ($this->getStoreCurrency() !== $currency) {
$this->storeManager->getStore()->setCurrentCurrencyCode($currency);
}
}
private function getStoreCurrency()
{
return $this->storeManager->getStore()->getCurrentCurrencyCode();
}
}
在我的网站上,我有 2 种货币,用户可以。一种是美元,另一种是里亚尔。默认货币为美元。在我们的徽标附近有一个下拉菜单,客户可以在其中将货币更改为里亚尔和美元。默认选项是美元
我想要的是,任何从沙特阿拉伯访问我们网站的客户,我们必须向他们展示所有其他国家/地区的里亚尔货币,我们必须向他们展示美元货币。
我该怎么做?请帮忙。
对于这项工作,您需要从 $_SERVER['REMOTE_ADDR'] 检查您的 ip,并从 MaxMind 的 GeoIP2 数据库中找到国家代码 (https://dev.maxmind.com/geoip/geoip2/geolite2/)。
参考:https://www.w3resource.com/php-exercises/php-basic-exercise-5.php
之后,您需要在 app/code/your_vendor/your_module/etc/frontend/events 中的模块中使用事件观察器 controller_action_predispatch。xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/events.xsd">
<event name="controller_action_predispatch">
<observer name="currency_init_for_country" instance="your_vendor\your_module\Observer\PreDispatchObserver" shared="false" />
</event>
</config>
在your_vendor\your_module\Observer\PreDispatchObserver.php文件中你需要添加:
<?php
namespace your_vendor\your_module\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class PreDispatchObserver implements ObserverInterface
{
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
private $storeManager;
public function __construct(
\Magento\Store\Model\StoreManagerInterface $storeManager
) {
$this->storeManager = $storeManager;
}
/**
* @inheritDoc
*/
public function execute(Observer $observer)
{
// logic for taking current country from $_SERVER['REMOTE_ADDR'] and checking from maxmind database and find the country code.then you can add a if else condition for currecny here based on country code.
$currency = 'USD';
if ($this->getStoreCurrency() !== $currency) {
$this->storeManager->getStore()->setCurrentCurrencyCode($currency);
}
}
private function getStoreCurrency()
{
return $this->storeManager->getStore()->getCurrentCurrencyCode();
}
}