gpt4 book ai didi

zend-framework - 如何在 Magento 或 Zend 中创建自定义货币类型?

转载 作者:行者123 更新时间:2023-12-03 17:59:19 25 4
gpt4 key购买 nike

我希望创建一种新的奖励积分货币,因此我希望它显示 300 奖励积分,而不是我的 Magento 商店销售值(value) 300.00 美元的产品。

我已经尝试通过将其添加到 lib/Zend/Locale/Data/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>

我可以通过以下线程在 Magento 中启用和使用它:
http://www.magentocommerce.com/boards/viewthread/56508/
但它仍然使用默认格式模式: ¤ #,##0.00所以它看起来像 奖励积分800.00

我的语言环境设置为 en_CA 据我所知,我无法在不影响 CDN 和 USD 格式的情况下更改格式模式。

我尝试覆盖 Mage_Core_Model_Store,以便如果当前货币代码是 RWP,它将使用一组格式化选项来格式化价格,但是当我在产品 View 中时这不起作用。更不用说这似乎也是实现我想要的一种非常肮脏的方式。
 /**
* 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;
}

最佳答案

货币系统是一个我只是暂时熟悉的系统,所以对这一切持保留态度。 (另外,假设 Magento 1.4.2)

一种方法是 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 .你也可以重写这个类。如果这些是您所追求的方法。

最后,因为这是 Stack Overflow,已经为 Magento 实现了许多奖励积分系统。检查这些以查看它们如何解决您遇到的问题可能是值得的。

关于zend-framework - 如何在 Magento 或 Zend 中创建自定义货币类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5275815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com