Magento收集定制产品价格

时间:2011-10-26 15:28:08

标签: magento

我根据每个客户设置自定义价格。使用网络服务我收到每个客户的具体价格,格式为:XX,DD

当我使用函数setprice来设置产品的新价格时:

$product->setFinalPrice($price);

Magento汇总价格,例如,如果$ price是38,50,那么它将产品价格设置为38.我已经尝试将','换成'。'使用str_replace,但在这种情况下,它似乎无法设置价格。

我如何告诉Magento也使用小数?

由于

4 个答案:

答案 0 :(得分:2)

首先,您应该将您的价格转换为十进制数字:

$value="38,50";
$amount = Zend_Locale_Format::getNumber($value,array('locale'=>'nl_NL'));
// or you can use str_replace

在Magento产品中有两种标准价格:

$product->getPrice();
$product->getSpecialPrice();

finalPrice - 它实际上不是产品价值,它将由Magento根据价格,special_price,等级价格等计算得出。您应该设置价格值并保存产品:

$value = "38,50"; //this decimalformat is used in nl_Nl locale
$amount = Zend_Locale_Format::getNumber($value,array('locale'=>'nl_NL'));
$amount = Mage::app()->getStore()->roundPrice($amount); //round price based on Magento logic
$product->setPrice($amount); //price - is actual value of product
// some extra code here
$product->save();

答案 1 :(得分:1)

我会投入你可以使用:

echo number_format($_product->getPrice(), 2)

它会给你几个小数位。

答案 2 :(得分:0)

我猜你不希望价格上涨。如果是这种情况,那么您的解决方案取决于您使用的PHP版本。

PHP 5.3你可以简单地使用round函数将它向下舍入:

round($price, 2, PHP_ROUND_HALF_DOWN);

如果您使用的是PHP 5.2,那么您没有PHP_ROUND_HALF_DOWN的luxary,因此您必须将以下函数放在某处(帮助程序对我来说最有意义)并调用它:

floor($line_item_price * 100) / 100;

这样做首先将值乘以100,然后将值置于最低值。这会给你一个向下舍入的值,精度为2.然后除以100得到正确的值。

数字100来自功率(10,所需精度)

我希望你使用的是PHP 5.3。我不喜欢非常喜欢PHP 5.2解决方案。

答案 3 :(得分:0)

要在magento中整理价格,您需要覆盖目录/货币模型方法convert。

Mage_Directory_Model_Currency::convert()

在这里你会发现这样的

return $price*$rate

需要像这样设置

 return round($price*$rate);