2013-04-19 2 views
3

я ловя следующее событие, чтобы сделать дополнительную логику:Изменить магазин просмотр ими программного использование наблюдателя Magento событий

core_block_abstract_prepare_layout_before 

и в классе Observer я делаю это:

Mage::app()->setCurrentStore($storeView);

Mage::run($storeCode, "store");

, но это исключает исключение:

Mage ключ реестра «application_params» уже существует

в основном то, что я пытаюсь сделать, это «изменение языка (вид магазина) в соответствии с текущим IP» и я пытаюсь добиться этого через Magento обычая модуль.

Я хочу, чтобы иметь возможность изменять вид хранилища по умолчанию magento, программно используя magento event observer? и можно ли сделать это без перенаправления на выбранное хранилище, я имею в виду, задав значения для представления хранилища перед загрузкой страницы?

+0

Было ли у вас решение для этого? Каковы шаги, которые вы выполнили? Я ударил в ту же точку с последних 4 дней. Я тоже создал событие и вызвал и тот же метод case switch, а также ту же ошибку? пожалуйста, дай мне знать. –

+0

К сожалению, мне пришлось перенаправить страницу после установки хранилища, я оставил ее там, но сохранил в своем списке изменений, но я не смог вернуться к ней. надеюсь, скоро это обойдется и зафиксирует это. –

+1

пока что этот код работает для меня, но я не думаю, что это хороший подход .'Mage :: app() -> getCookie() -> set (Mage_Core_Model_Store :: COOKIE_NAME, $ storeCode, TRUE); Mage :: app() -> setCurrentStore ($ storeCode); $ _baseurl = Mage :: getBaseUrl(); echo ""; ' –

ответ

6

Вот как я решил свою проблему. Я установил расширение GeoIP. Из этого мы можем получить код страны на основе IP. Я добавил функцию в наблюдателя, и это будет срабатывать только один раз на странице, загружается с событием controller_action_predispatch, а в наблюдателе я использую коммутатор для переключения между магазинами. Вот моя функция & корпус переключателя.

public function getLocationInfoByIp($observer) { 

     $geoIP = Mage::getSingleton('geoip/country'); 
     $cnCode = $geoIP->getCountry(); 

     switch ($cnCode) { 

      case "US": { 
        Mage::app()->setCurrentStore('en'); 
        break; 
      } 
      case "IN": { 
       Mage::app()->setCurrentStore('de'); 
       break; 
      } 
      default: { 
       Mage::app()->setCurrentStore('en'); 
       break; 
      } 
     } 
} 
+0

это выглядит многообещающим, я должен проверить это и вернуться сюда, чтобы надеяться на принятие ответа. –

+0

@MadMax Да .. Он отлично работает как в сообществе, так и в корпоративных версиях. Примите свое время, чтобы принять мой ответ ..;) –

+0

Да, это сработало, отсутствовал правильный наблюдатель. –

0

U может перенаправить на вид магазина с помощью ip. Не нужно использовать Mage :: run

switch(trim($countryCode)) 
       { 
         case 'CH': 
           $url = $siteurl . '?___store=german'; 
           header('Location:' . $url);die; 
         break; 
         case 'DE': 
            $url = $siteurl . '?___store=german'; 
            header('Location:' . $url);die; 
         break; 
         case 'IN': 
           $url = $siteurl . '?___store=english'; 
           header('Location:' . $url);die; 
         break; 
         default: 
         $url = $siteurl . '?___store=usa'; 
           header('Location:' . $url);die; 
         break; 
       } 
+0

это возможно сделать с нарушением? –

+0

Его возможный, но сложный процесс По умолчанию magento имеет возможность интернационализации и обработки магазинов. Поэтому использовать его было бы намного проще – Sandeep

+0

У меня такая же ошибка, как упоминалось выше. Поэтому я последовал твоему решению. Но теперь перенаправление не работает, и загрузка страницы слишком медленная, и одно и то же событие запускается почти в 64 раза в моем приложении. Итак, как я могу решить эту проблему? –

Смежные вопросы