Meine Anforderung ist, dass ein Kunde, der eine Website aus dem indischen Land besucht, auf die indische Website www.example.com/in/ weitergeleitet wird . In allen anderen Fällen sollte es sich nur um eine Standardwebsite handeln.
Ich benutze die geoip
PHP-Bibliothek. Ich habe das Frontend-Ereignis verwendet controller_action_predispatch
und hier ist mein Beobachtercode:
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']);
}
}
}
Probleme:
- Meine Beobachterfunktion wird ausgeführt und ich erhalte das Land des Kunden von seiner IP, aber es wird nicht auf die Website www.example.com/in/* weitergeleitet . Was ist der richtige Weg, um zu meiner benutzerdefinierten URL umzuleiten?
- Ich denke, das Ereignis
controller_action_predispatch
wird die Beobachterfunktion auf jeder Seite des Kundenbesuchs aufrufen. Welches Ereignis sollte ich verwenden, damit es nur zum ersten Mal ausgeführt wird, wenn der Kunde die Website besucht? - Ich sehe, dass eine der möglichen Optionen darin besteht, ein Cookie dafür zu setzen, aber ich bin nicht sicher, wo ich das Cookie in meinem Modul setzen soll (Ereignisse? Welches Ereignis?) Und welchen Prozess ich befolgen sollte, um sie umzuleiten.