首页 文章

如何在Magento上处理多种货币和自定义报价项目价格?

提问于
浏览
5

我有一个有两种货币的洋红色商店,我在购物车中的商品有动态价格 . 我用观察者和setCustomPrice以及setOriginalCustom价格成功计算了我的quote_item价格

$quote_item->setCustomPrice($price);
 $quote_item->setOriginalCustomPrice($price);

我的观察者:

<sales_quote_add_item>

但我有一个问题,当我更改我的商店的货币时,小计不是更新 . 如何处理多种货币和自定义报价项目的价格?

3 回答

  • -3

    通过观察者处理它

    <sales_quote_item_set_product>

    $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
    $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
    if($currentCurrencyCode!=$baseCurrencyCode)
        $price= Mage::helper('directory')->currencyConvert($baseprice, $baseCurrencyCode, $currentCurrencyCode); 
    else
        $price = $baseprice;
    
    $item->setPrice($baseprice);
    $item->setRowTotal($item->getQty() * $price);
    
  • 1

    我在上周遇到了同样的问题 . 使用 - > setOriginalCustomPrice方法适用于单一货币站点,但是通过货币切换,其刚性意味着您需要在每次切换货币时更新购物车项目和清单价格,这在我看来效率非常低 .

    我想出了一个更优雅的解决方案 . 创建一个模块,并在配置的模型部分添加此项;

    <models>
            <catalog>
                <rewrite>
                    <product>PixieMedia_CustomPrice_Model_Product</product>
                </rewrite>
            </catalog>
    </models>
    

    直观地说,主要的 - > getFinalPrice函数在产品模型中,而不是价格模型 .

    现在在/app/code/local/Namespace/Module/Model/Product.php中创建新的Product.php模型

    class PixieMedia_CustomPrice_Model_Product extends Mage_Catalog_Model_Product {
    
    public function getFinalPrice($qty=null)
    // REWRITTEN FUNCTION TO RETURN THE SPECIAL PRICE AND ENSURE CURRENCY CONVERSION
    {
        $qBreak = false;
        $customPrice = Mage::Helper('pixiemedia_customprice')->getCustomerPrice($this);
    
        if($qty) { 
            $qBreak = $this->getQtyBreakPrice($this->getSku(),$qty,$customPrice[0]); 
            }
    
        if($qBreak) { return $qBreak; } else { return $customPrice[0]; }
    
    }
    
    }
    

    在我正在进行的特定项目中,客户使用多个价格表来进行客户特定定价,其范围将使Magento的指数定价变得非常缓慢 . 因此,我们已将所有数据加载到自定义表格并执行查找以返回客户的正确价格或数量中断 .

    将你自己的逻辑挂钩并返回你想要的价格是很容易的 . 这完全支持货币转换,因此无需扭转重新转换价格 .

    希望这有助于某人 . 请享用 :)

  • 1

    你可能错过了一个电话:

    $quote->collectTotals()->save();
    

相关问题