2011-03-11 8 views
5

Chcę utworzyć nową walutę punktów, więc zamiast mojego sklepu Magento sprzedającego produkty o wartości $ 300,00, chcę, aby wyświetlała się 300 Punktów Nagród.Jak utworzyć niestandardowy typ waluty w Magento lub Zend?

Ja już próbowałem rozwiązanie złe praktyki dodając to do sekcji walut w lib/Zend/locale/Dane/en.xml

<currency type="RWP"> 
      <displayName>Reward Point</displayName> 
      <displayName count="one">Reward Point</displayName> 
      <displayName count="other">Reward Points</displayName> 
      <symbol>Reward Points</symbol> 
</currency> 

udało mi się włączyć i korzystać z tego w Magento przez po tym wątku: http://www.magentocommerce.com/boards/viewthread/56508/ ale nadal korzysta z domyślnego formatowania wzoru: ¤ #,##0.00 tak wygląda Nagroda Points800.00

Moja locale jest ustawione na en_CA i na tyle, na ile mogę powiedzieć, że nie ma możliwości zmiany wzorca formatowania bez wpływu na format CDN i USD.

Próbowałem przesłonić Mage_Core_Model_Store, więc jeśli aktualny kod waluty to RWP, to sformatuje cenę za pomocą tablicy opcji formatowania, ale to nie działa, gdy jestem w widoku produktu. Nie wspominając o tym, że wydaje się to również bardzo brudny sposób na osiągnięcie tego, co chcę.

/** 
* Format price with currency filter (taking rate into consideration) 
* 
* @param double $price 
* @param bool $includeContainer 
* @return string 
*/ 
public function formatPrice($price, $includeContainer = true) 
{ 
    if ($this->getCurrentCurrency()) { 
     /** 
     * Options array 
     * 
     * The following options are available 
     * 'position' => Position for the currency sign 
     * 'script' => Script for the output 
     * 'format' => Locale for numeric output 
     * 'display' => Currency detail to show 
     * 'precision' => Precision for the currency 
     * 'name'  => Name for this currency 
     * 'currency' => 3 lettered international abbreviation 
     * 'symbol' => Currency symbol 
     */ 
     $options = array(); 

     if ($this->getCurrentCurrencyCode() == 'RWP') { 
      $options = array(
       'position' => 16, 
       'precision' => 0, 
       'format'=> '#,##0.00 ' 
      ); 
     } 
     return $this->getCurrentCurrency()->format($price, $options, $includeContainer); 
    } 
    return $price; 
} 
+0

Czy zdarzyło Ci się kiedykolwiek to osiągnąć? Pracuję nad tym samym w Magento 2, a dodanie nowej waluty wydaje się nietrudnym zadaniem. – floorz

+0

Tak, wierzę, że zrobiłem, ale to było 6 lat temu i nie tknąłem PHP, nie mówiąc już o Magento przez prawie tyle samo czasu. Przepraszam :( –

Odpowiedz

0

System walutowy to taki, z którym jestem tylko obeznany, więc weź to wszystko z przymrużeniem oka. (także, zakładając, że Magento 1.4.2)

Jednym ze sposobów jest model directory/currency. Jest to klasa, do której ostatecznie odwołują się wszystkie funkcje i metody formatowania walut. Zobaczysz połączeń jak to w całym kodzie źródłowym

Mage::getModel('directory/currency') 

To nie wygląda istnieje sposób, aby powiedzieć „użyć tego modelu waluta/klasa dla tej waluty”, więc będziesz tkwić z klasą przepisz tutaj. Metody, do których się dążysz, to metody formatPrecision i formatTxt.

Również wygląda klasa directory/currency owija połączenia do obiektu locale Magento (nazywa się getNumber i currency)

public function formatTxt($price, $options=array()) 
{ 
    if (!is_numeric($price)) { 
     $price = Mage::app()->getLocale()->getNumber($price); 
    } 
    /** 
    * Fix problem with 12 000 000, 1 200 000 
    * 
    * %f - the argument is treated as a float, and presented as a floating-point number (locale aware). 
    * %F - the argument is treated as a float, and presented as a floating-point number (non-locale aware). 
    */ 
    $price = sprintf("%F", $price); 
    return Mage::app()->getLocale()->currency($this->getCode())->toCurrency($price, $options); 
} 

Przedmiotem Locale to core/locale. Możesz również przepisać tę klasę. jeśli to były metody, których szukałeś.

Wreszcie, ponieważ jest to Stack Overflow, istnieje wiele systemów punktów nagród już wdrożonych dla Magento. Sprawdzanie ich, aby zobaczyć, jak rozwiązali problemy, z którymi się borykasz, może być warte zachodu.