2014-12-04 12 views
5

wszystko, co znalazłem w moich poszukiwaniach, to rozwiązanie do programowania tego. Wiem, że możemy zmodyfikować /lib/Zend/Locale/Data/en.xml dla angielskich sklepów. było w en.xml ta część:Jak usunąć dziesiętne z ceny Magento-1?

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

a cena była wyświetlając w tym formacie: 1,321.54 teraz usunąć część dziesiętną od ceny Myślę, że jedyną rzeczą, którą musisz zrobić, to zmiana en.xml być jak następuje:

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

problem jest po tej zmianie ceny są pożądane jako pokaz (1132 Format), ale bez symbolu waluty ($). czego tu brakuje? Z góry dzięki.


aktualizacja Wciąż próbuję, gdy wzór węzeł zmieniona na następujących

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

cen pochodzą z symbolem waluty ($ 1132), ale nie w pożądany pozycja O_O, warunkiem jest posiadanie symbolu waluty po prawej stronie, nie po lewej :(SO ..

+0

Spróbuj użyć tego rozszerzenia. http://www.magentocommerce.com/magento-connect/price-rounding.html Stosuje się go na ogół w przypadku wielu walut. – Harit

+0

Dziękuję za odpowiedź, nie zamierzam używać rozwiązania do programowania, rozwiązanie jest w en.xml, ale nie mogę wymyślić, jak – rramiii

Odpowiedz

4

W lub Aby zmienić dokładność ceny w magento, musisz nadpisać niektóre podstawowe pliki.

W poniższym przykładzie zmieniamy precyzję 0.

1) nadpisywania lib/Zend/Currency.php i zmienić precyzję wokół line:

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) nadpisywanie aplikacji /code/core/Mage/Core/Model/Store.php i zmiana funkcji roundPrice:

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

3) nadpisywania app/code/core/Mage/katalog/model/format zmiana Currency.php i funkcja:

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

Dziękuję, myślę, że to jedyny sposób .. ale czy mogę się upewnić, że wszystkie ceny są wartością pułapu w widoku i wszystkimi procesami kasowymi? – rramiii

+1

zamiast 4 musisz użyć 0 innych mądrych będzie mieć 4 cyfry dziesiętne. – rramiii

3

Aby usunąć część dziesiętną od ceny, trzeba zmodyfikować plik „kodu /core/Mage/Directory/Model/Currency.php”

po pierwsze, zamiast linii:

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

zastosowanie:

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

Aby zmienić położenie symbolu waluty, należy zmodyfikować plik „lib/Zend/locale/Dane/en.xml” z linii:

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

Gdy skończysz, nie zapomnij, aby wyczyścić pamięć podręczną .

P.S.Aby uniknąć problemów podczas aktualizacji, zdecydowanie zalecamy wprowadzenie wszystkich wyżej wymienionych zmian za pomocą rozszerzeń: (sprawdź narzędzia tutaj: 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

dziękuję .. Zrobiłem to. – rramiii

2

Aby usunąć część dziesiętną z ceny, musisz zmodyfikować plik:

1) Pierwszy to zmienić precyzję wokół linii

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

Zmień = 'precyzja' => 2, do 'precyzji' => 0,

2) Drugi plik (zmiana funkcji roundPrice :)

app/code/core/Mage/core/model /Store.php

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

do

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

3) Trzeci i ostatni jest zmiana funkcji format:

app/code/core/Mage/katalog/Model/Currency.php

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

TO

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

wszystkie odpowiedzi tutaj włącz zmieniając podstawowe pliki. To jest NOT co każdy powinien zrobić. Albo opracujesz moduł i wprowadzisz te zmiany, albo opuścisz takie podstawowe pliki i zmienisz ceny za pomocą str_replace.

Więc idź do theme/template/catalog/product/price.phtml oraz (w zależności od konfiguracji) wokół linii 209 to zmienić:

$_coreHelper->formatPrice($_price, true) 

do

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

Usuwa 0,00 od ceny. Dobrą rzeczą jest to, że ceny z innymi miejscami po przecinku są zachowane. Jeśli tego nie chcesz, możesz usunąć wszystko za kropką i zaokrąglić liczbę za pomocą funkcji round().

zależności od konfiguracji inne ceny mogą wymagać zmiany (jeśli są wyświetlane ceny bez podatków itp)

+0

Myślę, że to trochę nie tak, ponieważ nie chodzi tylko o cenę wyświetlania bez kropki dziesiętnej, jeśli podążę swoją drogą, magento sprawi, że zamówienie będzie miało cenę bez rundy, a na końcu będzie zaokrąglone. prawda? – rramiii

+0

@rramiii jeśli masz wartości inne niż 0 jako cyfry po przecinku, musisz wprowadzić tę zmianę również w ajax dodaj do koszyka, aby te ceny były takie same podczas kasie. Ale nie rozumiem, dlaczego ktoś wstawiłby cenę w wysokości 56,89 i chciałby, aby była wyświetlana na interfejsie jako 57. po prostu umieść ją w backendie jako 57. –

+0

Istnieje kilka powodów, dla których to nie zadziała. 1. Będzie działać tylko z cenami, które kończą się na .00. Tak więc nie będzie działać, gdy produkty będą w sprzedaży, a otrzymasz dziesiętne ceny. 2. Nie będzie działać w przypadku produktów konfigurowalnych. Podczas gdy ceny pochodzą od helpera, otrzymują javascript z zawartością tablicy JSON Product.OptionsPrice, która jest tworzona w getJsonConfig. – aeu

0

Można zrobić jeszcze jedną zmianę oprócz przede wszystkim.

Proszę przejść do PriceCurrency.php stronie następnie zmienić ostatni wiersz

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

potem na stronie PriceCurrencyInterface.php zrobić

const DEFAULT_PRECISION = 0; 

na szczycie.

To wszystko. Mam nadzieję, że to zadziała.

Powiązane problemy