私の要件は、顧客がインドの国のウェブサイトにアクセスした場合、インドのウェブサイトwww.example.com/in/にリダイレクトされることです。それ以外の場合はすべて、デフォルトのWebサイトのみにする必要があります。
geoip
PHPライブラリを使用しています。私はフロントエンドイベントcontroller_action_predispatch
を使用しましたが、これが私のオブザーバーコードです。
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']);
}
}
}
問題:
- オブザーバー機能が実行されており、お客様のIPから国を取得していますが、ウェブサイトwww.example.com/in/*にリダイレクトしていません 。カスタムURLにリダイレクトする適切な方法は何ですか?
- イベント
controller_action_predispatch
は、顧客が訪問するすべてのページでオブザーバー関数を呼び出すと思います。顧客がWebサイトに初めてアクセスしたときにのみ実行されるように、どのイベントを使用する必要がありますか? - 可能なオプションの1つにCookieの設定がありますが、モジュールのどこにCookieを設定する必要があるか(イベント?どのイベント?)と、それらをリダイレクトするために従う必要があるプロセスがわかりません。