5

我有一家使用两种货币的 magento 商店,我在购物车中的商品有一个动态价格。我成功计算了我的 quote_item 价格,使用观察者和 setCustomPrice 和 setOriginalCustom 价格

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

我的观察者:

<sales_quote_add_item>

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

4

3 回答 3

1

通过观察者处理

<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);
于 2015-11-25T02:53:43.643 回答
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 索引定价的速度非常缓慢。因此,我们已将所有数据加载到自定义表中并执行查找以返回客户的正确价格或数量中断。

将您自己的逻辑挂钩并返回您想要的任何价格非常容易。这完全支持货币转换,因此无需折腾重新转换价格。

希望这可以帮助某人。享受 :)

于 2016-05-09T15:34:31.147 回答
-3

您可能错过了以下电话:

$quote->collectTotals()->save();
于 2014-02-03T14:28:41.797 回答