如何从Magento-1价格中删除十进制?

时间:2014-12-04 07:52:49

标签: php xml magento

我在搜索中找到的只是一个编程解决方案。 我知道我们可以为英文商店修改/lib/Zend/Locale/Data/en.xml。 en.xml中有这一部分:

       <currencyFormats>
            <currencyFormatLength>
                <currencyFormat>
                    <pattern>#,##0.00 ¤</pattern>
                </currencyFormat>
            </currencyFormatLength>
        </currencyFormats>

价格以这种格式显示:1,321.54 现在要从价格中删除小数部分我认为我唯一要做的就是将en.xml更改为如下所示:

<currencyFormats>
            <currencyFormatLength>
                <currencyFormat>
                    <pattern>#,##0 ¤</pattern>
                </currencyFormat>
            </currencyFormatLength>
        </currencyFormats>

问题是在此更改后,价格显示为所需(1,132格式),但没有货币符号($)。 我在这里失踪了什么? 提前谢谢。


更新 模式 节点更改为以下内容时,我仍在尝试

<pattern>¤ #,##0</pattern>

价格随货币符号($ 1,132)而来,但不是在期望的位置O_O,要求是在右侧有货币符号没有左边:( SO ..

5 个答案:

答案 0 :(得分:7)

此处的所有答案都涉及更改核心文件。这是任何人应该做的事情。您可以开发模块并进行更改,也可以保留这些核心文件并使用str_replace更改价格。

所以进入theme/template/catalog/product/price.phtml并且(取决于配置)围绕第209行更改:

$_coreHelper->formatPrice($_price, true)

进入

$without_decimals = $_coreHelper->formatPrice($_price, true); echo str_replace(".00", "", $without_decimals); 

这会从价格中移除.00。好处是保留其他小数的价格。如果您不想要这个,可以删除点后的所有内容,并使用round()函数将数字向上舍入。

根据配置,其他价格可能需要更改(如果您显示不含税的价格等)。

答案 1 :(得分:5)

为了改变magento的价格精度,您需要覆盖一些核心文件。

在下面的示例中,我们将精度更改为0。

1)覆盖lib / Zend / Currency.php并改变线条周围的精度:

 69     protected $_options = array(
 70         'position'  => self::STANDARD,
 71         'script'    => null,
 72         'format'    => null,
 73         'display'   => self::NO_SYMBOL,
 74         'precision' => 0,    /*CHANGE*/
 75         'name'      => null,
 76         'currency'  => null,
 77         'symbol'    => null,
 78         'locale'    => null,
 79         'value'     => 0,
 80         'service'   => null,
 81         'tag'       => 'Zend_Locale'
 82     );

2)覆盖app / code / core / Mage / Core / Model / Store.php并更改roundPrice函数:

public function roundPrice($price)
{    
    return round($price, 4);
}

3)覆盖app / code / core / Mage / Directory / Model / Currency.php并更改格式功能:

public function format($price,
                            $options=array(),
                            $includeContainer = true,
                            $addBrackets = false)
{   
  return $this->formatPrecision( $price,
                                      4,
                                      $options,
                                      $includeContainer,
                                      $addBrackets);
}

答案 2 :(得分:4)

要从价格中删除小数部分,您需要修改该文件 &#34;代码/核心/法师/目录/型号/ Currency.php&#34;

首先,而不是行:

return $this->formatPrecision($price, 2, $options, $includeContainer, $addBrackets);

使用:

return $this->formatPrecision($price, 0, $options, $includeContainer, $addBrackets);

要更改货币符号的位置,请修改文件&#34; lib / Zend / Locale / Data / en.xml&#34;与行:

<pattern>#,##0.00 ¤;(#,##0.00 ¤)</pattern>

完成后,不要忘记清除缓存。

P.S。为避免升级过程中出现任何问题,我们强烈建议您通过扩展程序实施上述所有更改: (查看此处的工具:http://www.magentocommerce.com/magento-connect/catalogsearch/result/?id=&s=7&pl=0&eb=0&hp=0&q=currency|position&t=1&p=1

答案 3 :(得分:2)

要从价格中删除小数部分,您需要修改文件:

1)首先是改变线周围的精度

LIB / Zend的/ Currency.php

protected $_options = array(
    'position'  => self::STANDARD,
    'script'    => null,
    'format'    => null,
    'display'   => self::NO_SYMBOL,
    'precision' => 2,
    'name'      => null,
    'currency'  => null,
    'symbol'    => null,
    'locale'    => null,
    'value'     => 0,
    'service'   => null,
    'tag'       => 'Zend_Locale'
);

更改= &#39;精确度&#39; =&GT; 2,精确度&#39; =&GT; 0,

2)第二个文件(更改roundPrice函数:)

应用程序/代码/核心/法师/核心/型号/ Store.php

public function roundPrice($price)
{
    return round($price, 2);
}

public function roundPrice($price)
{
    return round($price, 0);
}

3)第三个也是最后一个是更改格式功能:

应用程序/代码/核心/法师/目录/型号/ Currency.php

public function format($price,
                        $options=array(),
                        $includeContainer = true,
                        $addBrackets = false)
{   
 return $this->formatPrecision( $price,
                                  2,
                                  $options,
                                  $includeContainer,
                                  $addBrackets);
}

public function format($price,
                        $options=array(),
                        $includeContainer = true,
                        $addBrackets = false)
 {   
 return $this->formatPrecision( $price,
                                  0,
                                  $options,
                                  $includeContainer,
                                  $addBrackets);
 }

答案 4 :(得分:0)

除此之外,您还可以再添加一项更改。

请转到PriceCurrency.php页面 然后将最后一行更改为

public function round($price)
{
    return round($price, 0);
}

之后在PriceCurrencyInterface.php页面制作

const DEFAULT_PRECISION = 0;

在顶部。

这就是全部。希望它能奏效。