Magento 2.1.9: Thay đổi cửa hàng dựa trên quốc gia


10

Quan trọng: Tôi không muốn mua bất kỳ tiện ích mở rộng GeoIP nào. Tôi có một trang web Magento 2.1.9 với thiết lập nhiều trang web và nhiều cửa hàng. Tôi đã thiết lập trang web cho KSA, UAE, TRUNG QUỐC, EGYPT, v.v. và dưới mỗi trang web có ít nhất 2 lượt xem Cửa hàng, ví dụ: đối với KSA tôi có lượt xem cửa hàng tiếng Ả Rập và tiếng Anh.

Tôi muốn hiển thị cho người dùng trang web theo quốc gia của mình theo Địa chỉ IP. ví dụ: đối với người dùng truy cập từ KSA, ar_sa (cửa hàng Ả Rập - Ả Rập nên được mặc định) tương tự đối với người dùng từ UAE (ar_clus hoặc en_clus).

Tôi đã thực hiện mã hóa sau đây cho đến nay và có được quốc gia từ địa chỉ IP thành công.

Đây là etc/frontend/events.xmltập tin của tôi :

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

Và đây là 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();
    }
}

Nhưng điều này chỉ thay đổi tên cửa hàng chứ không phải những thứ khác - như ngôn ngữ / tiền tệ hoặc bố cục.


chỉ cần sử dụng Geoip miễn phí được cung cấp trong webstack của bạn, hoặc mô-đun apache php-Geoip hoặc Geoip, sau đó chỉ cần chuyển hướng người dùng để lưu trữ mã, như magento mặc định MAGE_RUN_TYPE MAGE_RUN_CODE .... đơn giản như 1 2 3
MagenX

Tôi có thể bằng cách nào đó sử dụng MAGE_RUN_TYPE và MAGE_RUN_CODE từ mô-đun tùy chỉnh
Abid Malik

Bạn có thể thử tiện ích mở rộng bên dưới nếu nó phù hợp với bạn: magedelight.com/magento-2-extensions/ Đổi Tôi hy vọng nó sẽ hoạt động tốt cho bạn.
Himmat Paliwal

@AbidMalik bạn có nhận được giải pháp nào không? Hãy chia sẻ nó ở đây. Tôi cũng cần điều tương tự
Hỏi Byte

@AskBytes - không tôi vẫn đang lang thang.
Abid Malik

Câu trả lời:


0

Tôi đã tìm thấy bằng cách nhìn vào trình chuyển đổi cửa hàng mặc định Magento mà nó gọi là {{url}}? ___ store = {{store_code}}. Vì vậy, bạn sẽ phải chuyển hướng người dùng đến cùng một url nhưng thêm tham số get chứa mã cửa hàng, ví dụ:https://www.my-store.com/sofas?__store=france

Lưu ý rằng việc phát hiện vị trí và chuyển hướng PHP này sẽ không bao giờ hoạt động nếu bạn đang dự định sử dụng một công nghệ bộ đệm như vecni mà tôi nghĩ bạn nên làm. Nếu bạn sử dụng véc ni, thì bạn vẫn có thể sử dụng hầu hết mã của mình nhưng nó cần được thực thi từ yêu cầu AJAX sau khi tải trang.


Tôi có thể bằng cách nào đó sử dụng MAGE_RUN_TYPE và MAGE_RUN_CODE từ mô-đun tùy chỉnh
Abid Malik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.