Yêu cầu của tôi là nếu một khách hàng truy cập trang web từ quốc gia Ấn Độ, họ nên được chuyển hướng đến trang web Ấn Độ www.example.com/in/ . Trong tất cả các trường hợp khác, nó chỉ là trang web mặc định.
Tôi đang sử dụng geoip
thư viện PHP. Tôi đã sử dụng sự kiện frontend controller_action_predispatch
và đây là mã người quan sát của tôi:
namespace Amit\Geoip\Observer;
require_once 'lib/geoip.inc';
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Controller\ResultFactory;
use Magento\Store\Model\StoreManager;
class ControllerActionPredispatch implements ObserverInterface {
protected $resultRedirectFactory;
public function __construct(
ResultFactory $resultFactory,
StoreManager $storeManager
) {
$this->resultFactory = $resultFactory;
$this->storeManager = $storeManager;
}
public function execute(\Magento\Framework\Event\Observer $observer) {
$baseUrl = $this->storeManager->getStore()->getBaseUrl();
$gi = geoip_open(getcwd()."/app/code/Amit/Geoip/Observer/lib/GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
$country_code = geoip_country_code_by_addr($gi, $ip);
if((strtoupper($country_code) == "IN")){
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$resultRedirect->setUrl($baseUrl . '/in/' . $_SERVER['REQUEST_URI']);
}
}
}
Các vấn đề:
- Chức năng quan sát viên của tôi đang được thực thi và tôi nhận được quốc gia của khách hàng từ IP của họ nhưng nó không được chuyển hướng đến trang web www.example.com/in/* . Cách thích hợp để chuyển hướng đến url tùy chỉnh của tôi là gì?
- Tôi nghĩ rằng sự kiện
controller_action_predispatch
sẽ gọi chức năng quan sát viên trên mỗi lượt truy cập của khách hàng. Sự kiện nào tôi nên sử dụng để nó sẽ chỉ được thực hiện cho lần đầu tiên khách hàng truy cập trang web? - Tôi thấy một trong các tùy chọn có thể là đặt cookie cho nó nhưng tôi không chắc chắn nên đặt cookie ở đâu trong mô-đun của mình (sự kiện? Sự kiện nào?) Và tôi nên thực hiện quy trình nào để định hướng lại chúng.