2014-12-04 3 views
5

все, что я нашел в моем поиске, является программным решением для этого. Я знаю, что мы можем изменить /lib/Zend/Locale/Data/en.xml для английских магазинов. был в en.xml эта часть:Как удалить десятичную цену от Magento-1?

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

И цена показывало в этом формате: 1,321.54 теперь удалить дробную часть от цены я думаю, единственное, что я должен сделать, это изменить en.xml быть как следующее:

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

проблема после этого изменения цены показывают, как требуется (1132 Format), но без символа валюты ($). что мне здесь не хватает ??? Спасибо заранее.


обновление Я все еще пытаюсь, когда шаблон узел изменен следующим

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

цены идут с символом валюты ($ 1132), но не в желании позиции O_O, требование состоит в том, чтобы иметь символ валюты с правой стороны, не осталось: (SO ..

+0

Попробуйте использовать это расширение. http://www.magentocommerce.com/magento-connect/price-rounding.html Обычно используется при работе с несколькими валютами. – Harit

+0

Спасибо за ваш ответ, я не хочу использовать решение для программирования, решение находится в en.xml, но не может понять, как – rramiii

ответ

4

В или Чтобы изменить точность цены в 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) перезапись приложение /code/core/Mage/Core/Model/Store.php и изменение roundPrice функции:

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

3) перезаписи приложения/код/​​ядро ​​/ Mage/Каталог/Модель/Currency.php и формат изменение функции:

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

Спасибо, я думаю, что это единственный способ. Но я могу убедиться, что все цены - это стоимость потолка и все процедуры оформления заказа? – rramiii

+1

вместо 4 вы должны использовать 0 другой мудрый будет иметь 4 десятичных цифры. – rramiii

3

Чтобы удалить дробную часть от цены, вы должны изменить файл «кода /core/Mage/Directory/Model/Currency.php»

Во-первых, вместо строки:

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

использование:

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

Чтобы изменить положение символа валюты, измените файл «Библиотека/Zend/Locale/Data/en.xml» с линией:

<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)

+0

спасибо .. Я сделал это – rramiii

2

Чтобы удалить десятичную часть из цены, вам необходимо изменить файл:

1) Во-первых, это изменить точность вокруг линии

Библиотека/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' 
); 

Изменение = 'точность' => 2, к 'точности' => 0,

2) Второй файл (изменение roundPrice функции :)

приложение/код/​​ядро ​​/ Mage/Core/модели /Store.php

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

К

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

3) Третий и последний является изменение функции Формат:

приложение/код/​​ядро ​​/ Mage/Каталог/Модель/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); 
} 
6

Все ответы здесь включают , изменяя основные файлы. Это NOT, что кто-то должен делать. Либо вы разрабатываете модуль и вносите эти изменения, либо оставляете такие основные файлы и меняете цены с 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); 

Извлекает +0,00 от цены. Хорошо, что цены с другими десятичными знаками сохраняются. Если вы этого не хотите, вы можете удалить все после точки и округлить номер с помощью функции round().

В зависимости от конфигурации других цен, возможно, потребуется изменение (если вы показываете цены без налогов и т.д.)

+0

Я думаю, что это немного неправильно, потому что речь идет не только о цене просмотра без десятичной суммы, если я следую вашему пути, magento сделает заказную цену без раунда, а на лицевой стороне будет округленная цена. не так ли? – rramiii

+0

@rramiii, если у вас есть значения, отличные от 0, как десятичные знаки, вам придется реализовать это изменение также в ajax в корзину, чтобы эти цены сохранялись одинаково во время проверки. Но я не понимаю, почему кто-то вложил бы цену в 56,89 и хотел бы, чтобы она отображалась на лицевой стороне 57. Просто сделайте ее в бэкэнде 57. –

+0

Существует несколько причин, по которым это не сработает. 1. Он будет работать только с ценами, которые заканчиваются на .00. Таким образом, он не будет работать, когда товары продаются, и вы получите десятичные значения для цен. 2. Он не будет работать для конфигурируемых продуктов. В то время как цены на прибыль от помощника, они заменяются javascript содержимым массива JSON Product.OptionsPrice, который создается в getJsonConfig. – aeu

0

Вы можете сделать еще одно изменение дополнение к выше всех.

Пожалуйста, перейдите на страницу PriceCurrency.php измените последнюю строку на

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

после этого в PriceCurrencyInterface.php страницы сделать

const DEFAULT_PRECISION = 0; 

в верхней части.

Это все. Надеюсь, он сработает.

Смежные вопросы