использую для конверта валют такой convertECB (курс берется с ЦБР) (где то в нете нашел):
<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
class convertECB {
function convert( $amountA, $currA='', $currB='' ) {
global $mosConfig_cachepath, $mosConfig_live_site, $mosConfig_absolute_path,
$mosConfig_offset, $vendor_currency, $vmLogger;
// global $vendor_currency is DEFAULT!
if( !$currA ) {
$currA = $vendor_currency;
}
if( !$currB ) {
$currB = $GLOBALS['product_currency'];
}
// If both currency codes match, do nothing
if( $currA == $currB ) {
return $amountA;
}
# File: usd2.php, v.1.0/20010803
# Скрипт для вывода ... курса доллара, установленного ЦБР
# (c) 2001, Mikhail Turenko, http://www.turenko.net, <mikhail@turenko.net>
# строка "dd/mm/yyyy: 1USD=29.30RUR (+0.02)"
# модифицировано: Сергей Прудников 2009 для VirtuMart
# Базовый URL скрипта на cbr.ru
$scripturl = 'http://www.cbr.ru/scripts/XML_dynamic.asp';
# Начальная дата для запроса (сегодня - 2 дня)
$date_1=date('d/m/Y', time()-172800);
# Конечная дата (чтобы учитывать завтра добавьте параметр time()+86400)
$date_2=date('d/m/Y');
# Таким образом, мы получим данные либо за 2, либо за 3 последних дня.
# За 2 - если на "сегодня" курс еще не выставили, иначе - за 3
# Код валюты в архиве данных cbr.ru
$currency_code='R01235';
# URL для запроса данных
$requrl = "{$scripturl}?date_req1={$date_1}&date_req2={$date_2}&VAL_NM_RQ={$currency_code}";
#локальный файл на хосте, в котором кешируется курс
if( is_writable($mosConfig_cachepath) ) {
$file_curse = $mosConfig_cachepath;
}
else {
$file_curse = $mosConfig_absolute_path."/media";
}
$file_curse .= "/curs_CBRF.txt";
#echo($file_curse.'<BR>');
$date_now_local = gmdate('Ymd', $now); // локальное время хостинга
if(file_exists($file_curse) && filesize( $file_curse ) > 0 ) {
$file_datestamp = date('Ymd', filemtime($file_curse)); // timestamp for the Filename
#echo(date('Ymd:i:s', filemtime($file_curse)).' -- файл сущ <BR>');
}
else {
$file_datestamp = date('Ymd', 0);
#echo(date('Ymd:i:s', 0).'-- файл НЕ сущ <BR>');
};
$date_now_local = gmdate('Ymd', time());
#echo( $date_now_local."__".$file_datestamp."__дата локальная <BR>");
if( $date_now_local > $file_datestamp ) { // время кеш-файла больше даты на хосте более чем на день - получить новый из ЦБ
$doc = file($requrl);
$doc = implode($doc, '');
# инициализируем массив
$r = array();
# ищем <ValCurs>...</ValCurs>
if(preg_match("/<ValCurs.*?>(.*?)<\/ValCurs>/is", $doc, $m))
# а потом ищем все вхождения <Record>...</Record>
preg_match_all("/<Record(.*?)>(.*?)<\/Record>/is", $m[1], $r, PREG_SET_ORDER);
$m = array(); # его уже использовали, реинициализируем
$d = array(); # этот тоже проинициализируем
# Сканируем на предмет самых нужных цифр
for($i=0; $i<count($r); $i++) {
if(preg_match("/Date=\"(\d{2})\.(\d{2})\.(\d{4})\"/is", $r[$i][1],$m)) {
$dv = "{$m[1]}/{$m[2]}/{$m[3]}"; # Приводим дату в норм. вид
if(preg_match("/<Nominal>(.*?)<\/Nominal>.*?<Value>(.*?)<\/Value>/is", $r[$i][2], $m)) {
$m[2] = preg_replace("/,/",".",$m[2]);
$d[] = array($dv, $m[1], $m[2]);
}
}
}
$last = array_pop($d); # последний известный день
$prev = array_pop($d); # предпосл. известный день
$date = $last[0]; # отображаемая дата
$rate = sprintf("%.2f",$last[2]); # отображаемый курс
# отображаемое изменение курса, например, "+0.02"
$delta = (($last[2]>$prev[2])?"+":"").sprintf("%.2f",$last[2]-$prev[2]);
$handle1 = fopen($file_curse, "w");
#fwrite($handle1, "{$date}: 1 USD = {$rate} RUR\n"); # ({$delta})
fwrite($handle1, "{$date} {$rate}\n");
#fclose($handle);
#echo('! получили из ЦБ, запиали в кеш-файл<BR>');
} // получили с сайта ЦБ и записали в файл. иначе читаем из локального файла
else {
//echo("CBRF - {$date}: 1 USD = {$rate} RUR ({$delta})<BR>");
$fp = fopen($file_curse,"r");
$userinfo = fscanf($fp, "%s %f");
list ($date, $rate) = $userinfo;
#$contents = fread($fp, filesize ($file_curse));
fclose($fp);
#echo ("Курс взят из кеш-файла <BR>");
}
#echo ("ЦБ РФ дата: {$date} курс: {$rate}<BR>");
$val = $amountA * $rate;
return $val;
}
}
?>
Все было хорошо когда я в настройках товара вводил цену в долларах, и при конвертации все конвертилось нормально, туда и обратно(рубль и доллар)
Но сейчас появились товары у которых цена указана только в рублях, так вот когда ввожу цену товара в рублях, то при конвертации в доллары на сайте, конвертиться неправильно. Например товар стоит 1000 р, при конвертации в доллары цена должны быть примерно 34 доллара (по курсу 29 р), а получается наоборот 29000 тыс, т.е. надо делить в данном случае на 29, а конвертер умножает.
Подскажите кто знает где нужно подправить код, чтобы было все правильно. Т.е. надо сделать так чтобы при вводе разной валюты в цене товара, конвертилось правильно и в рубли и в доллары. Надо именно чтобы курс брался с ЦБР, ввод конкретного курса не нужен.