2011-03-11 7 views
5

私は新しい報酬ポイントの通貨を作成したいと考えています。したがって、私のMagentoストアではドル値$ 300.00の商品を販売する代わりに、300ポイントの報酬ポイントを表示します。MagentoまたはZendでカスタム通貨タイプを作成するにはどうすればよいですか?

私はすでに私がでMagentoの中でこれを有効にして使用することができたのlib/Zendの/ロケール/データ/ 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> 

これを追加することによって、悪い習慣ソリューションを試してみましたこのスレッド次 http://www.magentocommerce.com/boards/viewthread/56508/ それはまだデフォルトのフォーマットパターン使用しています:¤ #,##0.00はそれが私のロケールがen_CA に設定されている

Points800.00報酬のように見えますが0と私がCDNとUSDの書式設定に影響を与えずに書式設定パターンを変更する方法がないと言うことができます。

現在の通貨コードがRWPの場合、書式設定オプションの配列を使用して価格を書式設定するようにMage_Core_Model_Storeをオーバーライドしようとしましたが、これは製品ビューでは機能しません。もちろん、これはまた、私が望むものを達成するための本当に汚い方法のように思えます。

+0

これでどこにいらっしゃいましたか?私はMagento 2でも同じことに取り組んでいます。新しい通貨を追加することは、ささいなことではないようです。 – floorz

+0

はい、私はやったと信じていますが、それは6年前のことでしたが、Magentoはほとんど同じ時間だけPHPに触れていません。ごめんなさい :( –

答えて

0

通貨システムは私が熟知しているだけなので、すべて塩の穀物でこれを取る。 (また、Magento 1.4.2を仮定)

1つのアプローチはdirectory/currencyモデルです。これは、すべての通貨書式関数とメソッドが最終的に呼び出すクラスです。あなたは、ソースコード

Mage::getModel('directory/currency') 

「この通貨は、この通貨モデル/クラスを使用する」と言う方法がありますようにあなたがクラスで立ち往生することがありますので、それは、見ていないを通じて、このような呼び出しが表示されますここに書き直してください。 formatPrecisionformatTxtメソッドは、あなたが後にしているメソッドです。

はまた、directory/currencyクラスは、Magentoののロケールオブジェクト(getNumbercurrencyへの呼び出し)

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

への呼び出しをラップのようなロケールオブジェクトがcore/localeで見えます。このクラスを書き直すこともできます。それらがあなたが後にした方法だったら。

最後に、これはスタックオーバーフローであるため、Magentoにはすでにいくつかの報酬ポイントシステムが実装されています。これらをチェックして、あなたが苦しんでいる問題をどのように解決したかを見てみる価値があります。

関連する問題