1

次のコードは、単純な製品のカスタム価格を設定するために使用されます。必要に応じてカートに設定されたカスタム価格ですが、通貨を切り替えると、カスタム価格の値は現在の通貨記号と同じままです。

 $item->setCustomPrice($customPrice);
            $item->setOriginalCustomPrice($customPrice);
            $item->getProduct()->setIsSuperMode(true);

通貨の切り替えで機能するカスタム価格を設定する方法はありますか?

4

2 に答える 2

3

これを行うための解決策を見つけました。

最初の一歩:

@Ashish Raj が提案する次のコードを使用して、カスタム価格でアイテムを見積もりに追加します

$baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode(); 
$currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
$price = $customPrice;

$customPrice = $Current_currency_price = Mage::helper('directory')->currencyConvert($price, $baseCurrencyCode, $currentCurrencyCode);

$item->setCustomPrice($customPrice);
$item->setOriginalCustomPrice($customPrice);
$item->getProduct()->setIsSuperMode(true);

第二段階:

2 番目のステップは、モジュールの config.xml ファイルに次のコードを追加して、コントローラー ポスト ディスパッチ オブザーバーを作成することです。

<events>
        <controller_action_postdispatch>
            <observers>
                <frontend_currency_change>
                    <class>modulename/observer</class>
                    <method>hookToControllerActionPostDispatch</method>
                </frontend_currency_change>
            </observers>
        </controller_action_postdispatch>
    </events>

そして、オブザーバークラスに次のコードを追加します

    public function hookToControllerActionPostDispatch($observer) {
            if ($observer->getEvent()->getControllerAction()->getFullActionName() == 'directory_currency_switch') {
                $quote = Mage::getSingleton('checkout/session')->getQuote();
                if ($quote && $quote->hasItems()) {
                    foreach ($quote->getAllVisibleItems() as $item):
                        //add condition for target item
                        $customPrice = 23;//use custom price logic
                        $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
                        $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
                        $customPrice = Mage::helper('directory')->currencyConvert($customPrice, $baseCurrencyCode, $currentCurrencyCode);
                        $item->setCustomPrice($customPrice);
                        $item->setOriginalCustomPrice($customPrice);
                        $item->getProduct()->setIsSuperMode(true);
                        $quote->collectTotals()->save();
                    endforeach;
                }
            }
        }

これは私のために働いています。これが同じ問題を抱えている人に役立つことを願っています。誰かがより良い解決策を持っているなら、私は好むでしょう。ありがとう。

于 2016-07-07T11:06:40.150 に答える