Magento 2.1.9:国に基づいてストアを変更する


10

重要:GeoIP拡張機能を購入したくありません。マルチサイトおよびマルチストア設定のMagento 2.1.9 Webサイトを持っています。KSA、UAE、CHINA、EGYPTなどのウェブサイトをセットアップしました。各ウェブサイトの下に少なくとも2つのストアビューがあります。たとえば、KSAの場合、アラビア語と英語のストアビューがあります。

IPアドレスごとに、国に応じたWebサイトをユーザーに表示したい。たとえば、UAE(ar_uaeまたはen_uae)のユーザーと同様に、KSAからアクセスするユーザーの場合は、ar_sa(アラビア語-サウジアラビアのストアがデフォルトである必要があります)。

これまでに次のコーディングを行い、IPアドレスから国を取得しました。

これは私のetc/frontend/events.xmlファイルです:

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

そして、これは私の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();
    }
}

ただし、これによって変更されるのはストア名のみで、言語、通貨、レイアウトなど、その他のものは変更されません。


php-geoipまたはgeoip apacheモジュールのいずれかのwebstackで自由に提供されるgeoipを使用し、ユーザーをデフォルトのmagento MAGE_RUN_TYPE MAGE_RUN_CODE .... simple as 1 2 3
MagenX

カスタムモジュールのMAGE_RUN_TYPEとMAGE_RUN_CODEをどうにかして使用できますか
Abid Malik

以下の拡張機能が適している場合は、magedelight.com / magento-2-extensions / を試してみてください。問題なく機能することを願っています。
Himmat Paliwal

@AbidMalik解決策はありましたか?ここで共有してください。私も同じことが必要です
Ask Bytes

@AskBytes-いいえ、まださまよっています。
Abid Malik

回答:


0

Magentoのデフォルトのストアスイッチャーを調べると、{{url}}?___ store = {{store_code}}を呼び出していることがわかりました。したがって、ユーザーを同じURLにリダイレクトする必要がありますが、店舗コードを含むgetパラメータを追加します。https://www.my-store.com/sofas?__store=france

このPHPによる位置の検出とリダイレクトは、ワニスのようなキャッシュテクノロジーを使用する予定がある場合には機能しないことに注意してください。ワニスを使用する場合でも、ほとんどのコードを使用できますが、ページのロード後にAJAXリクエストから実行する必要があります。


カスタムモジュールのMAGE_RUN_TYPEとMAGE_RUN_CODEをどうにかして使用できますか
Abid Malik
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.