s vues en magasin changent une fois que nous avons changé de pag
-
30-09-2020 - |
Question
03Cp> Nous suivons 03Ca href="https://www.atwix.com/magento/geoip-magento-store-switcher/" rel="nofollow noreferrer">Ce lienu003C/a> pour afficher des vues de magasin basées sur le pays.u003C/
03Cp> Si quelqu'un visitent le site des États-Unis, il ouvrira us store view
, Canada => Canada store view
, ainsi de suite.u003C/
03Cp> Nous affichons le commutateur de vue en magasin sur le dessus en tant que 03Ca href="http://sbdev2.kidsdial.com/" rel="nofollow noreferrer">Iciu003C/. Quelqu'un des États-Unis a changé de vue sur la vue sur le magasin de Canada.u003C/
03Cp> Mais une fois qu'il clique sur une autre page (menu, catalogue, produit, CMS), il affichera à nouveau une vue en magasin ancienne (USA).u003C/
03Cp> Mais il devrait être de même vue sur la même valeur jusqu'à ce que nous le changions manuellement.u003C/
03Cp> u003Cstrong>Observateur.php:u003C/strong>u003C/
class Atwix_Ipstoreswitcher_Model_Observer
{
/**
* redirects customer to store view based on GeoIP
* @param $event
*/
public function controllerActionPostdispatch($event)
{
if (!empty($_GET['___from_store'])) {
Mage::app()->setCurrentStore($_GET['___store']);
} else {
$geoIP = Mage::getSingleton('geoip/country');
$cnCode = $geoIP->getCountry();
// echo $cnCode;
// echo $cnCode='IN';
switch ($cnCode) {
case "US": {
Mage::app()->setCurrentStore('usa');
break;
}
case "IN": {
Mage::app()->setCurrentStore('india');
break;
}
case "CA": {
Mage::app()->setCurrentStore('canada');
break;
}
case "UK": {
Mage::app()->setCurrentStore('europe');
break;
}
case "AU": {
Mage::app()->setCurrentStore('australia');
break;
}
}
}
}
}
La solution
03Cp> Je n'ai pas encore testé cette solution, mais je pense que cela devrait fonctionner:u003C/
class Atwix_Ipstoreswitcher_Model_Observer
{
/**
* redirects customer to store view based on GeoIP
* @param $event
*/
public function controllerActionPostdispatch($event)
{
/** @var Mage_Customer_Model_Session $session */
$session = Mage::getSingleton('customer/session');
if (!empty($_GET['___from_store'])) {
Mage::app()->setCurrentStore($_GET['___store']);
$session->setData('current_country', $_GET['___store']);
} else {
$geoIP = Mage::getSingleton('geoip/country');
$cnCode = $session->getData('current_country') ? $session->getData('current_country') : $geoIP->getCountry();
// echo $cnCode;
// echo $cnCode='IN';
switch ($cnCode) {
case "US": {
Mage::app()->setCurrentStore('usa');
break;
}
case "IN": {
Mage::app()->setCurrentStore('india');
break;
}
case "CA": {
Mage::app()->setCurrentStore('canada');
break;
}
case "UK": {
Mage::app()->setCurrentStore('europe');
break;
}
case "AU": {
Mage::app()->setCurrentStore('australia');
break;
}
}
}
}
}