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

#
Автоматическое обновление курсов валют в интернет-магазине
Для реализации автоматического обновления курсов валют в интернет-магазине можно воспользоваться файлом обновления update_currency.php, который необходимо сохранить в корне директории htdocs. Код этой программы представлен ниже:

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

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

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

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

/*
Массив идентификаторов валют магазна, укажите в данном массиве
перечень валют по приведенной схеме с их идентифкаторами.
*/
$CurrenciesID = array();
$CurrenciesID['USD'] = 15;
$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("Модуль магазина не найден" );
}
?>

После запуска этой программы из браузера происходит автоматическое обновление валют в базе данных системы управления по курсу текущего дня. Перед использованием программы update_currency.php необходимо обновить модуль интернет-магазина.
#
Re: Автоматическое обновление курсов валют в интернет-магазине
RE: Перед использованием программы update_currency.php необходимо обновить модуль интернет-магазина.
Вопрос: Подскажите пожалуйста что это означает и как это можно осуществить, - обновить модуль интернет-магазина.
Обновить файл shop.php? А как это можно проделать? Как быть с Zend?

Заранее признателен.
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Обновить модуль интернет-магазина означает обновить файл shop.class.php. Это файл системы управления, и его просто нужно заменить новым в соответствующей директории.
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Здравствуйте Наташа!
Подскажите, обновление валют происходит автоматически ежедневно или необходимо каждый раз для обновления запускать update_currency.php?
yestravel
#
Re: Автоматическое обновление курсов валют в интернет-магазине
yestravel, доброе утро.
Обновление курсов валют с помощью данного скрипта НЕ происходит автоматически ежедневно, например.
Нужно самостоятельно запускать скрипт update_currency.php с требуемой периодичностью(либо настроить выполнение данного скрипта с помощью планировщика задач Cron).
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Здравствуйте Наташа!
Поставили скрипт в Cron - работает как часики, спасибо! Возникло несколько вопросов:
1. Данные по курсам валют не архивируются, значит возможны недоразумения с клиентами по поводу курса валют на данную дату (нет данных о дате курса, возможна ли привязка курса к конкретной дате и сохранение полученных курсов в базе данных?).
2. Есть ли возможность выводить на страницы сайта текущий курс с указанием даты (желательно и времени обновления, на Cron у нас например курс обновляется каждые 30 минут, у РБК каждые 15 минут).
3. Возможно ли создание информеров для экспорта на другие сайты (сторонние, базы разные).
Подскажите, что можно из этого реализовать, не важно если что-то за оплату...
Спасибо!
yestravel
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Добрый день.
1. архив валют не ведется по причине того, что курсы валют нужны исключительно для пересчета стоимости товаров, и в хранении истории обновлений курсов нет надобности. Кроме того, в базе данных структура таблицы для курсов валют не содержит поля для хранения даты добавления.
2. возможность вывода текущего курса есть, но дата в базе данных не хранится.
3. теоретически такая возможность есть(на стороннем сайте требуется разработка javascript-а, который будет запрашивать валюты на Вашем сайте).
#
Re: Автоматическое обновление курсов валют в интернет-магазине
При ручном запуске update_currency.php валюты обновляются и проблем нет, поставили выполнение скрипта в Cron - обновление не происходит, поступает сообщение об ошибке:
/httpdocs/update_currency.php: line 1: ?
: No such file or directory
/httpdocs/update_currency.php: line 2:
: command not found
/httpdocs/update_currency.php: line 3: /*
: No such file or directory
/httpdocs/update_currency.php: line 4: Файл: command not found
/httpdocs/update_currency.php: line 5: Внимание!
: command not found
/httpdocs/update_currency.php: line 6: Текущей: command not found
/httpdocs/update_currency.php: line 7: */
: No such file or directory
/httpdocs/update_currency.php: line 8:
: command not found
/httpdocs/update_currency.php: line 9: //: is a directory
/httpdocs/update_currency.php: line 10: syntax error near unexpected token `'main_classes.php''
/httpdocs/update_currency.php: line 10: `require_once('main_classes.php';
'
Подскажите, в чём может быть дело?
yestravel
Модератор
#
Re: Автоматическое обновление курсов валют в интернет-магазине
В указанном файле замените строку:
require_once('main_classes.php');

на
require_once(dirname(__FILE__) . '/' . 'main_classes.php');
#
Re: Автоматическое обновление курсов валют в интернет-магазине
Здравствуйте Наталья!

Строчку заменил, но ошибка осталась:

/httpdocs/update_currency.php: line 10: syntax error near unexpected token `dirname'
/httpdocs/update_currency.php: line 10: `require_once(dirname(__FILE__) . '/' . 'main_classes.php';
yestravel
Авторизация