Уважаемые посетители портала Kamensk.NET! Напоминаем вам, что будучи зарегистрированным пользователем вы получаете возможность оставлять комментарии к новостям на сайте и к топикам на форуме, иметь доступ к скрытым разделам и много других благ и привелегий. Пожалуйста заполните регистрационную форму, это отнимет у вас всего лишь несколько минут вашего времени.
osCommerce: корректный вывод курса валют ЦБРФ
osCommerce (ОСК, OSC) - самая известная CMS для интернет-магазина, распространяется по лицензии GPL.
Широко используемая в российских магазинах функция quote_cbr_currency для синхронизации курсов валют с ЦБРФ некорректно обрабатывает курс таких валют как белорусские рубли, тенге, юани и других валют, курс которых указан не за единицу (как доллар или евро) а за большее кол-во денег.
Например, курс белорусского рубля, выдаваемый сервером ЦБ нужно делить на 1000, тенге - на 100, юаня на 10 и т.п.
Порядок курса находится в поле <Nominal> XML-файла (http://www.cbr.ru/scripts/XML_daily.asp).
Ниже приведено исправление для этой функции, которое учитывает Nominal.
В файле /catalog/admin/includes/functions/localization.php ищем функцию quote_cbr_currency.
Если функции нет, можно добавить её в конец файла (см. ниже весь код).
После строки:
preg_match_all("|<Value>(.*?)</Value>|is", $page, $c);
ДОБАВИТЬ новую строку:
preg_match_all("|<Nominal>(.*?)</Nominal>|is", $page, $nom);
Далее найти строку:
$quote_cbr_cash[$mv]=ereg_replace(',', '.', $c[1][$kv]);
И ЗАМЕНИТЬ её на эту:
$quote_cbr_cash[$mv]=ereg_replace(',', '.', $c[1][$kv]/$nom[1][$kv]);
Вот код исправленной функции полностью:
// Синхронизация курса валют с текущим курсом Центрального банка России
function quote_cbr_currency($code, $base = DEFAULT_CURRENCY) {
global $quote_cbr_cashed;
if (sizeof($quote_cbr_cash)==0){
$quote_cbr_cash = array();
$quote_cbr_cash['RUB'] = 1.00;
$quote_cbr_cash['RUR'] = 1.00;
$page = file('http://www.cbr.ru/scripts/XML_daily.asp');
if (!is_array($page)){ // Что-то не так у нас с ЦБР
return false;
}
$page = implode('', $page);
preg_match_all("|<CharCode>(.*?)</CharCode>|is", $page, $m);
preg_match_all("|<Value>(.*?)</Value>|is", $page, $c);
// UPD ADD 2009-02-12
preg_match_all("|<Nominal>(.*?)</Nominal>|is", $page, $nom);
// END OF UPD ADD 2009-02-12
foreach ($m[1] as $kv => $mv){
// UPD CHANGE 2009-02-12
// $quote_cbr_cash[$mv]=ereg_replace(',', '.', $c[1][$kv]);
$quote_cbr_cash[$mv]=ereg_replace(',', '.', $c[1][$kv]/$nom[1][$kv]);
// END OF UPD CHANGE 2009-02-12
}
}
if (isset($quote_cbr_cash[$code]) && isset($quote_cbr_cash[$base])) {
$retval = round($quote_cbr_cash[$base]/$quote_cbr_cash[$code],4);
settype($retval,"string");
return $retval;
} else {
return false;
}
}
Примечание:
Для того чтобы включить эту функцию, нужно в файле /catalog/admin/includes/application_top.php найти строку:
define('CURRENCY_SERVER_PRIMARY', 'oanda');
и ЗАМЕНИТЬ её на:
define('CURRENCY_SERVER_PRIMARY', 'cbr');
Последние комментарии