Magento 2.1.9: cambia negozio in base al paese


10

Importante: non desidero acquistare alcuna estensione GeoIP. Ho un sito Web Magento 2.1.9 con installazione multi-sito e multi-negozio. Ho un sito Web di configurazione per KSA, Emirati Arabi Uniti, CINA, EGITTO ecc. E sotto ogni sito Web sono presenti almeno 2 visualizzazioni Store, ad es. Per KSA ho visualizzazioni Store arabo e inglese.

Voglio mostrare all'utente il sito web in base al suo paese come da indirizzo IP. ad esempio, per gli utenti che accedono da KSA, l'ar_sa (archivio arabo-saudita dovrebbe essere predefinito) allo stesso modo per gli utenti degli Emirati Arabi Uniti (ar_uae o en_uae).

Finora ho fatto la seguente codifica e ho ottenuto il paese dall'indirizzo IP con successo.

Questo è il mio etc/frontend/events.xmlfile:

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

E questo è il mio 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();
    }
}

Ma questo cambia solo il nome del negozio e non altre cose - come lingua / valuta o layout.


usa semplicemente geoip fornito gratuitamente nel tuo webstack, o php-geoip o modulo geoip apache, quindi reindirizza gli utenti per archiviare il codice, come magento predefinito MAGE_RUN_TYPE MAGE_RUN_CODE .... semplice come 1 2 3
MagenX

posso in qualche modo usare MAGE_RUN_TYPE e MAGE_RUN_CODE dal modulo personalizzato
Abid Malik,

Puoi provare sotto l'estensione se è adatto a te: magedelight.com/magento-2-extensions/… Spero che funzionerà bene per te.
Himmat Paliwal,

@AbidMalik hai trovato delle soluzioni.? Per favore, condividilo qui. Ho anche bisogno dello stesso
chiedi a Bytes il

@AskBytes - no, sto ancora girovagando.
Abid Malik,

Risposte:


0

Ho scoperto guardando il commutatore di archivio predefinito Magento che chiama {{url}}? ___ store = {{store_code}}. Quindi dovresti reindirizzare l'utente allo stesso URL ma aggiungendo il parametro get contenente il codice negozio, ad eshttps://www.my-store.com/sofas?__store=france

Nota che questo rilevamento PHP di posizione e reindirizzamento non funzionerà mai se stai pianificando di utilizzare una tecnologia di memorizzazione nella cache come la vernice che penso che dovresti. Se usi la vernice, puoi comunque usare la maggior parte del tuo codice ma deve essere eseguito da una richiesta AJAX dopo il caricamento della pagina.


posso in qualche modo usare MAGE_RUN_TYPE e MAGE_RUN_CODE dal modulo personalizzato
Abid Malik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.