我打算创建一个新的奖励积分货币,所以我不想在我的Magento商店销售价值300美元的产品,而是希望它显示300个奖励积分。
我已经尝试过将其添加到lib / Zend / Locale / Data / en.xml中的currency部分的错误练习解决方案
<currency type="RWP">
<displayName>Reward Point</displayName>
<displayName count="one">Reward Point</displayName>
<displayName count="other">Reward Points</displayName>
<symbol>Reward Points</symbol>
</currency>
我可以通过以下线程在Magento中启用和使用它:
http://www.magentocommerce.com/boards/viewthread/56508/
但它仍然使用默认格式模式:¤ #,##0.00
所以看起来像奖励积分800.00
我的区域设置设置为 en_CA ,据我所知,我无法在不影响CDN和USD格式的情况下更改格式模式。
我尝试重写Mage_Core_Model_Store,这样如果当前货币代码是RWP,它将使用一系列格式化选项格式化价格,但是当我在产品视图中时这不起作用。更不用说这似乎是一种非常肮脏的方式来实现我想要的东西。
/**
* 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 :(得分:0)
货币体系是我唯一熟悉的货币体系,所以要把这一切都拿出来。 (另外,假设Magento 1.4.2)
一种方法是directory/currency
模型。这是所有货币格式化函数和方法最终调用的类。你会在整个源代码中看到这样的调用
Mage::getModel('directory/currency')
看起来没有办法说“将这种货币模型/类用于这种货币”,所以你将不得不在这里重写类重写。 formatPrecision
和formatTxt
方法是您追求的方法。
此外,看起来directory/currency
类包装了对Magento语言环境对象的调用(对getNumber
和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);
}
语言环境对象是core/locale
。你也可以重写这个类。如果那些是你追求的方法。
最后,因为这是Stack Overflow,所以Magento已经实施了许多奖励积分系统。检查这些问题以了解他们如何解决您遇到的问题可能是值得的。