Magento自定义价格值不通过更改货币进行转换

时间:2016-06-15 05:57:10

标签: php magento cart price

以下代码用于设置简单产品的自定义价格。根据需要在购物车中设置自定义价格,但是当我切换货币时,自定义价格值与当前货币符号保持一致。

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

有没有办法设置适用于货币转换的自定义价格。

2 个答案:

答案 0 :(得分: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);

第二步:

第二步是通过在模块

的config.xml文件中添加以下代码来创建控制器post dispatch observer
<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;
                }
            }
        }

这对我有用。希望这对有同样问题的人有所帮助。 如果有人有更好的解决方案我会更喜欢。 感谢。

答案 1 :(得分:1)

使用下面的代码希望它能帮到你......

第一步:

//you need to find base currency code and then find current currency code...
$baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode(); 
$currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
$price = $customPrice;

第二步:

//convert price from base currency to current currency
$customPrice = $Current_currency_price = Mage::helper('directory')->currencyConvert($price, $baseCurrencyCode, $currentCurrencyCode); 

第3步:

然后你可以使用你的代码:

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