Penting: Saya tidak ingin membeli ekstensi GeoIP. Saya memiliki situs web Magento 2.1.9 dengan pengaturan multi-situs dan multi-store. Saya memiliki situs web pengaturan untuk KSA, UEA, CHINA, MESIR dll. Dan di bawah setiap situs web setidaknya ada 2 tampilan Toko, misalnya, untuk KSA saya memiliki tampilan toko Arab dan Inggris.
Saya ingin menunjukkan kepada pengguna situs web menurut negaranya sesuai Alamat IP. mis., untuk pengguna yang mengakses dari KSA ar_sa (toko Arab - Arab Saudi harusnya default) serupa untuk pengguna dari UEA (ar_uae atau en_uae).
Saya telah melakukan pengkodean berikut sejauh ini dan berhasil mendapatkan negara dari alamat IP.
Ini etc/frontend/events.xml
file saya :
<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>
Dan ini milik saya 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();
}
}
Tetapi ini hanya mengubah nama toko dan bukan hal lain - seperti bahasa / mata uang atau tata letak.