Автоматическое обновление курсов валют в интернет-магазине

#
Re: Автоматическое обновление курсов валют в интернет-магазине
Что делать когда белый экран при запуске скрипта? Права на файл 777. При запуске через shell «No syntax errors detected»

<?php
/*
Файл обновления валют на текущий день по курсу ЦБ.
Внимание!
Текущей валютой должен быть установлен рубль с коэффициентом пересчета 1.
*/

// Подключаем основные классы
require_once(dirname(__FILE__) . '/' . 'main_classes.php');

$GLOBALS['kernel']->LoadModules(); # Загрузка модулей

// Инициализация CURRENT_SITE и констант
$admin = new Admin();
$admin->admin_init();

/*
Массив идентификаторов валют магазна, укажите в данном массиве
перечень валют по приведенной схеме с их идентифкаторами.
*/
$CurrenciesID = array();
$CurrenciesID['EUR'] = 14;

// Локаль
setlocale(LC_NUMERIC, 'POSIX');

$parser = new XMLparser();

$link = 'http://www.cbr.ru/scripts/XML_daily.asp';

function GetCurrencyByName($valute_mas)
{
   $currencies = array();
   foreach ($valute_mas as $val)
   {
      if (floatval($val['value']['Nominal'][0]['value']) >= 1)
      {
         $val['value']['Value'][0]['value'] = str_replace(',', '.', $val['value']['Value'][0]['value']);
         $val['value']['Nominal'][0]['value'] = str_replace(',', '.', $val['value']['Nominal'][0]['value']);

         if ($val['value']['Value'][0]['value'] > 0)
         {
            $key_cur = $val['value']['CharCode'][0]['value'];
            $currencies[$key_cur] = $val['value']['Value'][0]['value'] / $val['value']['Nominal'][0]['value'];
         }
      }
   }

   return $currencies;
}

if (class_exists('shop'))
{
   $Shop = new shop();

   if ($xml = file_get_contents($link))
   {
      $tags = $parser->ParseValue($xml);
      $count = count($tags['ValCurs'][0]['value']['Valute']);
      $valute = $tags['ValCurs'][0]['value']['Valute'];
      $currencies = GetCurrencyByName($valute);

      // Просматриваем все полученные курсы валют
      foreach ($CurrenciesID as $key => $val)
      {
         // Если эту валюту нужно обновлять в нашем магазине
         if (isset($currencies[$key]))
         {
            $param = array();
            $param['id'] = $val;
            $param['value_in_basic_currency'] = $currencies[$key];

            // Обновляем валюту
            $Shop->UpdateCurrency($param);
         }
      }
   }
   else
   {
      show_error_message("Не удалось открыть файл" );
   }
}
else
{
   show_error_message("Модуль магазина не найден" );
}
?>
#
Re: Автоматическое обновление курсов валют в интернет-магазине
fingaz, значит все работает. Этот скрипт не должен ничего выдавать на экран, если нет ошибок.
Поставьте в магазине какой-нибудь неправильный курс доллара, и запустите скрипт. А потом проверьте, изменился ли курс?
Заказов не беру. Консультирую редко.
#
Re: Re: Автоматическое обновление курсов валют в интернет-магазине
Kotoff, спасибо! Напутал с идентификатором валюты, работает.
#
Re: Автоматическое обновление курсов валют в интернет-магазине
А для Украины нет готового решения?
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Добрый вечер.
Как установить валюту тенге KZT?
Netpro
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Netpro, ну как - так же как и любую другую: в админке в меню справа "Интернет-магазин", затем в выпадающем меню "Финансы" - "Валюты", на следующем экране в выпадающем меню "Валюты" - "Добавить", и в форме пишете
Название - Тенге
Курс - пишете текущий курс к базовой валюте (базовая это обычно рубль), я хз какой он,
Интернациональное название валюты - KZT

И жмете на "Применить".

Если вам нужно, чтобы базовой валютой был тенге, то перед тем как нажать кнопку "Применить" ставите галочку "Базовая", а курс тогда нужно задать равным 1.
Заказов не беру. Консультирую редко.
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Не судите строго. Только знакомлюсь с hostCMS. Решил опубликовать как я получаю курсы валют НБУ ( Украина ). Спасибо за предыдущие примеры решение базируется на них.
Тем более кто-то уже спрашивал про решение для Украины.


<?php

require_once('main_classes.php');

$GLOBALS['kernel']->LoadModules(); # Загрузка модулей

// intialize CURRENT_SITE & constants
$admin = new Admin();
$admin->admin_init();

if ( !class_exists('shop') ) {
    show_error_message("Shop not found" );
    exit;
}

setlocale(LC_NUMERIC, 'POSIX');

$link = 'http://bank-ua.com/export/currrate.xml';

// load currency rates from NBU
$xml = simplexml_load_file($link);
if ( $xml === false ) {
    show_error_message("Can't load currrate.xml from NBU" );
    exit;
}

$shop = & singleton('shop');

// get shop currencies
$currencies_row = $shop->GetAllCurrency();
$currencies     = array();
while ($currency_row = mysql_fetch_assoc($currencies_row)) {
    $currencies[$currency_row["shop_currency_id"]] =
        $currency_row["shop_currency_international_name"];
}

foreach($xml->children() as $item){
    $row = simplexml_load_string($item->asXML());
    foreach ( $currencies as $key => $currency ) {
        $found = $row->xpath('//char3[. ="' . $currency . '"]');
        if ( isset($found[0]) ) {
            $rate = array(
                'id'                      => $key,
                'value_in_basic_currency' =>
                    number_format($item->rate, 3, '.', '') / $item->size
            );
            // update shop currency
            $shop->UpdateCurrency($rate);
            
            unset($currencies[$key]);
        }
    }
}
echo "load complete";

?>
#
Re: Автоматическое обновление курсов валют в интернет-магазине
этот скрипт актуален для последних версий системы?
#
Re: Автоматическое обновление курсов валют в интернет-магазине
По поводу округления. А можно ли настроить скрипт обновления валют, что бы округлять сам курс валюты, до ближайшего целого значения вверх?
Например:
Текущий курс = 39.302800
Курс в разделе Валюты = 40
Версия: HostCMS Бизнес (www.outletfashion.ru)
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Добрый день, подскажите пожайлуста для версии 6.0.2 работает данный код?
Авторизация