+380(66)433-69-36 | |
+380(66)433-69-36 | |
+380(66)433-69-36 |
- BitLocker с GUI под linux
- Ищем вирус elTest
- Работаем с бесплатным SSL сертификатом Letsencrypt с помощью certbot
- Синхронизация ресурсов с удаленного сервера локально
- Применение нестандартного SEO и статус 404
- MySQL синхронизируем права с разных серверов
- IPSec VPN соединение между офисами.
- "Зеркало" сайта на стороне. Донастраиваем nginx
- Дефрагментация таблиц всех баз MySQL
- Месяц в родительном падеже strftime PHP
- INIT скрипт для Dropbox
- osCommerce VAM Edition 226. Ошибки
- PositiveSSL порядок сертификатов
- osCommerce. Создаем модуль доставки
- Восстановление mySQL баз данных
- osCommerce.Перенос магазина в другой домен
- osCommerce.Прячем адмику
- osCommerce. Продление жизни сессий
- osCommerce. Создаем платежный модуль
- 10 причин выбрать нас
- GRUB2 восстановление
- osCommerce не пересчитывает общую сумму заказа
- Список потенциально опасных скриптов
- Отправка файлов из Dropbox по e-mail
- "Черный список" почтовых доменов
- Боремся с назойливыми иностранцами
- Яндекс-Диск, и стоит ли им пользоваться.
- Обновление модуля Интеркассы для osCommerce
- Веб-почта на сайте хостинга
- Подключение Outlook Express к хостингу
Анатомия osCommerce (localization.php)
( 0 Votes )
/admin/includes/functions/localization.php
Данный модуль содержит в себе функции, благодаря которым осуществляется обновление курсов валют в магазине. Как правило, обновление производится в ручном режиме по нажатию кнопки в панели администратора: Локализация:Курсы валют:Обновить курсы валют. Впрочем, модуль можно использовать и для автоматизированного обновления курсов.
При этом необходимо учитывать следующее:
Функции, содержащиеся в модуле возвращают коэффициент, на которые нужно УМНОЖИТЬ текущую цену товара в магазине, выраженную в валюте по-умолчанию. Например, если основная валюта магазина - российские рубли, а необходимо выразить цену в долларах, то возвращается коэффициент 0,0333 (по состоянию на сегодня), что соответствует примерно 30 рублям за доллар. Кстати, в базу данных заносится значение, соответствующее обратному от этого коэффициента: 1/0.033., поэтому тоже нужно быть внимательным. Для организации автоматического обновления курсов валют, необходимо знать структуру таблицы, в которой хранятся курсы:
CREATE TABLE IF NOT EXISTS `currencies` (
`currencies_id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`code` char(3) NOT NULL,
`symbol_left` varchar(12) default NULL,
`symbol_right` varchar(12) default NULL,
`decimal_point` char(1) default NULL,
`thousands_point` char(1) default NULL,
`decimal_places` char(1) default NULL,
`value` float(13,8) default NULL,
`last_updated` datetime default NULL
)
Нас интересуют поля: "code" и "value". В первом поле хранится символьное выражение валюты:RUB,USD,EUR и т.д., а во втором - коэффициент, обратный тому, который возвращают функции.
В подробности процесса обновления полей вдаваться не будем, просто опишем функции, входящие в состав модуля.
function quote_oanda_currency($code, $base = DEFAULT_CURRENCY);
Функция не используется в текущей версии магазина. По всей видимости она оставлена для совместимости кода.
function quote_cbr_currency($code, $base = DEFAULT_CURRENCY);
Основная функция, которая позволяет определять требуемый курс. Функция производит запрос в Центробанк России для получения курсов валют относительно рубля. При пересчете других валют - производится конвертация через рубль - соответственно результат может несколько различаться от реального курса, но отличие незначительное. В качестве параметров в йункцию передается код валюты, для которой нужно получить курс и код валюты, установленной в магазине по-умолчанию (когда параметр не задается - код валюты по-умолчанию подставляется автоматически).
function quote_xe_currency($to, $from = DEFAULT_CURRENCY);
Функция используется в том случае, если Центробанк России недоступен. При этом курсы загружаются с сайта http://www.xe.com. Здесь производится прямая конверсия валюты в валюту - но по какому курсу сказать сложно.
В любом случае есть смысл использовать для получения курсов валют именно функцию Центробанка, впрочем - я не припомню случаев, чтобы она не срабатывала. Файт Центробанка работает достаточно стабильно.
Например, запрос: quote_cbr_currency('USD','RUB') выдаст 0,0333. Если в магазине в качестве основной валюты установлен российский рубль, то запрос quote_cbr_currency('USD') выдаст такой же результат.
Дополнительно хотелось бы отметить, что вплоть до версии 1.218 модуль работает некорректно вследствие того, что не учитывается случай, когда в качестве основной валюты используется валюта, которая при перерасчете в рубли не рассчитывается как 1:1.Например украинская гривна к рублю считается как одна гривна к 10 рублям. Не знаю, будет ли это исправлено в дальнейшем - на всякий случай для всех желающих выкладываю исправления, которые нужно сделать в функции:
// Синхронизация курса валют с текущим курсом Центрального банка России
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;
$quote_cbr_nom=array();
$quote_cbr_nom['RUR']=1;
$quote_cbr_nom['RUB']=1;
$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);
preg_match_all("|<Nominal>(.*?)</Nominal>|is", $page, $n);
foreach ($m[1] as $kv => $mv){
$quote_cbr_cash[$mv]=preg_replace('/,/', '.', $c[1][$kv]);
$quote_cbr_nom[$mv]=$n[1][$kv];
}
}
if (isset($quote_cbr_cash[$code]) && isset($quote_cbr_cash[$base])) {
$retval = round(($quote_cbr_nom[$code]/$quote_cbr_cash[$code])*($quote_cbr_cash[$base]/$quote_cbr_nom[$base]),8);
settype($retval,"string");
return $retval;
} else {
return false;
}
}