Quan trọng: Tôi không muốn mua bất kỳ tiện ích mở rộng GeoIP nào. Tôi có một trang web Magento 2.1.9 với thiết lập nhiều trang web và nhiều cửa hàng. Tôi đã thiết lập trang web cho KSA, UAE, TRUNG QUỐC, EGYPT, v.v. và dưới mỗi trang web có ít nhất 2 lượt xem Cửa hàng, ví dụ: đối với KSA tôi có lượt xem cửa hàng tiếng Ả Rập và tiếng Anh.
Tôi muốn hiển thị cho người dùng trang web theo quốc gia của mình theo Địa chỉ IP. ví dụ: đối với người dùng truy cập từ KSA, ar_sa (cửa hàng Ả Rập - Ả Rập nên được mặc định) tương tự đối với người dùng từ UAE (ar_clus hoặc en_clus).
Tôi đã thực hiện mã hóa sau đây cho đến nay và có được quốc gia từ địa chỉ IP thành công.
Đây là etc/frontend/events.xml
tập tin của tôi :
<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='urn:magento:framework/Event/etc/events.xsd'>
<event name='controller_action_predispatch'>
<observer name='Asoft_GeoIP_Redirect' instance='Asoft\GeoIP\Observer\Redirect' />
</event>
</config>
Và đây là Observer/Redirect.php
:
namespace Asoft\GeoIP\Observer;
class Redirect implements \Magento\Framework\Event\ObserverInterface
{
protected $_objectManager;
protected $_storeManager;
protected $_curl;
public function __construct(
\Magento\Framework\ObjectManagerInterface $objectManager,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Framework\HTTP\Client\Curl $curl
) {
$this->_objectManager = $objectManager;
$this->_storeManager = $storeManager;
$this->_curl = $curl;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
//echo 'You are browsing from : '.$this->getCountryName();
switch ($this->getCountryName()){
case 'UAE':
$store_id = '11';
break;
default :
$store_id = '7';
}$this->_storeManager->setCurrentStore($store_id);
}
public function getCountryName()
{
$visitorIp = $this->getVisitorIp();
$url = "freegeoip.net/json/".$visitorIp;
$this->_curl->get($url);
$response = json_decode($this->_curl->getBody(), true);
//echo '<pre>';
//print_r($response);
$countryCode = $response['country_code'];
$countryName = $response['country_name'];
$stateName = $response['region_name'];
return $countryCode;
}
function getVisitorIp()
{
$remoteAddress = $this->_objectManager->create('Magento\Framework\HTTP\PhpEnvironment\RemoteAddress');
return $remoteAddress->getRemoteAddress();
}
}
Nhưng điều này chỉ thay đổi tên cửa hàng chứ không phải những thứ khác - như ngôn ngữ / tiền tệ hoặc bố cục.