Magento 2.1.9: Ändern Sie das Geschäft je nach Land

10

Wichtig: Ich möchte keine GeoIP-Erweiterung kaufen. Ich habe eine Magento 2.1.9-Website mit Multi-Site- und Multi-Store-Setup. Ich habe eine Website für KSA, VAE, CHINA, ÄGYPTEN usw. eingerichtet und unter jeder Website befinden sich mindestens 2 Store-Ansichten, z. B. für KSA habe ich arabische und englische Store-Ansichten.

Ich möchte dem Benutzer die Website gemäß seinem Land gemäß IP-Adresse anzeigen. Beispiel: Für Benutzer, die über KSA zugreifen, ist der ar_sa (Arabisch - Saudi-Arabien-Store sollte Standard sein) ähnlich wie für Benutzer aus den VAE (ar_uae oder en_uae).

Ich habe bisher die folgende Codierung durchgeführt und das Land erfolgreich von der IP-Adresse erhalten.

Das ist meine etc/frontend/events.xmlDatei:

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

Und das ist mein 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();
    }
}

Dies ändert jedoch nur den Geschäftsnamen und keine anderen Dinge - wie Sprache / Währung oder Layout.

Abid Malik
quelle
verwenden geoip einfach frei in Ihrem webstack zur Verfügung gestellt, entweder php-geoip oder geoip Apache - Modul, dann nur Redirect Benutzer zu speichern Code, als Standard magento MAGE_RUN_TYPE MAGE_RUN_CODE .... einfach wie 1 2 3
MagenX
Kann ich irgendwie MAGE_RUN_TYPE und MAGE_RUN_CODE aus dem benutzerdefinierten Modul verwenden
Abid Malik
Sie können die folgende Erweiterung ausprobieren, wenn sie für Sie geeignet ist: magedelight.com/magento-2-extensions/… Ich hoffe, dass sie für Sie gut funktioniert.
Himmat Paliwal
@AbidMalik hast du irgendwelche Lösungen bekommen? Bitte teilen Sie es hier. Ich brauche auch das gleiche
Fragen Sie Bytes
@ AskBytes - nein, ich wandere immer noch herum.
Abid Malik

Antworten:

0

Beim Betrachten des Magento-Standardspeicherumschalters habe ich festgestellt, dass er {{url}}? ___ store = {{store_code}} aufruft. Sie müssten den Benutzer also zur gleichen URL umleiten, aber den get-Parameter hinzufügen, der den Geschäftscode enthält, zhttps://www.my-store.com/sofas?__store=france

Beachten Sie, dass diese PHP-Erkennung von Standort und Umleitung niemals funktionieren wird, wenn Sie eine Caching-Technologie wie Lack verwenden möchten, die Sie meiner Meinung nach sollten. Wenn Sie Lack verwenden, können Sie den größten Teil Ihres Codes weiterhin verwenden, dieser muss jedoch nach dem Laden der Seite aus einer AJAX-Anforderung ausgeführt werden.

デ リ エ ゴ く く
quelle
Kann ich irgendwie MAGE_RUN_TYPE und MAGE_RUN_CODE aus dem benutzerdefinierten Modul verwenden
Abid Malik