Валютная система - это та, с которой я знаком лишь немного, так что возьмите все это с крошкой соли. (также, предполагая, что 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
. Вы также можете переписать этот класс. если бы это были методы, которые вы использовали.
Наконец, поскольку это переполнение стека, для Magento уже реализован ряд систем бонусных баллов. Изучите их, чтобы увидеть, как они решают проблемы, с которыми вы сталкиваетесь, возможно, стоит.