2011-03-11 9 views
5

Estoy buscando crear una nueva moneda de puntos de recompensa, así que en lugar de mi tienda Magento que vende productos con un valor en dólares de $ 300.00, quiero que muestre 300 puntos de recompensa.¿Cómo creo un tipo de moneda personalizado en Magento o Zend?

ya he intentado una solución práctica mala añadiendo esto a la sección de monedas en lib/Zend/Local/Datos/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> 

yo era capaz de activar y utilizar esto en Magento por siguiendo este hilo: http://www.magentocommerce.com/boards/viewthread/56508/ pero todavía utiliza el patrón de formato por defecto: ¤ #,##0.00 por lo que parece Recompensa Points800.00

Mi configuración regional se establece en en_CA y hasta donde puedo decir que no hay forma de que cambie el patrón de formateo sin afectar el formato CDN y USD también.

Intenté sobreescribir Mage_Core_Model_Store para que si el código de moneda actual es RWP formateará el precio usando una matriz de opciones de formato, pero esto no funciona cuando estoy en la vista del producto. Sin mencionar que esto también parece ser una manera muy sucia de lograr lo que quiero.

/** 
* 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

¿Alguna vez has llegado a algún lado con esto? Estoy trabajando en lo mismo en Magento 2, y agregar una nueva moneda parece ser una tarea no trivial. – floorz

+0

Sí, creo que sí, pero eso fue hace 6 años y no he tocado PHP, y mucho menos Magento durante casi la misma cantidad de tiempo. Lo siento :( –

Respuesta

0

El sistema monetario es uno que sólo estoy de pasada familiarizado con, por lo tomo todo esto con un grano de sal. (también, asumiendo Magento 1.4.2)

Un enfoque es el modelo directory/currency. Esta es una clase que todas las funciones y métodos de formato de moneda llaman en última instancia. Usted verá las llamadas de este tipo en todo el código fuente

Mage::getModel('directory/currency') 

No parece que haya una manera de decir "utilizar este modelo moneda/clase para esta moneda", por lo que tendremos que aguantar con una clase reescribe aquí. Los métodos formatPrecision y formatTxt son los que buscas.

Además, parece que la clase directory/currency envuelve llamadas a la configuración regional del objeto Magento (llamadas a getNumber y 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); 
} 

El objeto Locale es un core/locale. También podría reescribir esta clase. si esos eran los métodos que estabas buscando.

Finalmente, como se trata de Stack Overflow, ya hay varios sistemas de puntos de recompensa implementados para Magento. Verificando esto para ver cómo resolvieron los problemas que te encuentras podría valer la pena.

Cuestiones relacionadas