Magento 2.1.9: Ganti toko berdasarkan negara

10

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.xmlfile 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.

Abid Malik
sumber
cukup gunakan geoip yang disediakan secara bebas di webstack Anda, baik modul php-geoip atau geoip apache, maka cukup arahkan pengguna untuk menyimpan kode, sebagai magento default MAGE_RUN_TYPE MAGE_RUN_CODE .... sesederhana 1 2 3
MagenX
bisakah saya bisa menggunakan MAGE_RUN_TYPE dan MAGE_RUN_CODE dari modul khusus
Abid Malik
Anda dapat mencoba ekstensi di bawah ini jika cocok untuk Anda: magedelight.com/magento-2-extensions/… Saya harap ini akan bekerja dengan baik untuk Anda.
Himmat Paliwal
@AbidMalik apakah Anda mendapatkan solusi.? Silakan bagikan di sini. Saya juga membutuhkan yang sama
Tanyakan Bytes
@AskBytes - tidak, saya masih berkeliaran.
Abid Malik

Jawaban:

0

Saya menemukan dengan melihat switcher toko Magento default yang dipanggil {{url}}? ___ store = {{store_code}}. Jadi, Anda harus mengarahkan ulang pengguna ke url yang sama tetapi menambahkan parameter get yang berisi kode toko, mishttps://www.my-store.com/sofas?__store=france

Perhatikan bahwa deteksi lokasi dan pengarahan ulang PHP ini tidak akan berfungsi jika Anda berencana menggunakan teknologi caching seperti pernis yang saya pikir Anda harus. Jika Anda menggunakan pernis, maka Anda masih dapat menggunakan sebagian besar kode Anda tetapi harus dijalankan dari permintaan AJAX setelah halaman dimuat.

デ リ エ ゴ く ん
sumber
bisakah saya bisa menggunakan MAGE_RUN_TYPE dan MAGE_RUN_CODE dari modul khusus
Abid Malik