3

さらにロジックを実行するために、次のイベントをキャッチしています。

core_block_abstract_prepare_layout_before

そしてオブザーバークラスで私はこれをやっています:

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

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

しかし、これは例外をスローします:

Mage レジストリ キー "application_params" は既に存在します

基本的に私がやろうとしているのは、「現在の IP に従って言語 (ストア ビュー) を変更する」ことであり、magento カスタム モジュールを使用してこれを達成しようとしています。

プログラムでmagentoイベントオブザーバーを使用して、magentoのデフォルトのストアビューを変更できるようにしたいですか? 選択したストアにリダイレクトせずに、ページの読み込み前にストアビューの値を設定することは可能でしょうか?

4

2 に答える 2

6

これが私の問題を解決した方法です。GeoIP 拡張機能をインストールしました。これから、IP に基づいて国コードを取得できます。オブザーバーに関数を追加しました。これは、ページの読み込み時にイベントで 1 回だけトリガーされます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;
            }
       }
 }
于 2014-01-29T12:10:53.290 に答える
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;  
                 }  
于 2013-04-19T11:39:27.757 に答える