В данном способе в отличие от предложенного Виталием Обориным обновление валют производится агентами. И не используется xml2array.
Запуск данного агента я советовал бы повесить на крон (как это описывалМаксим Смирнов ).
И не забудте добавить агента AgentGetCurrencyRate(); на странице управления агентами в админке.
Запуск данного агента я советовал бы повесить на крон (как это описывал
// Обновление к function AgentGetCurrencyRate() { global $DB; // подключаем модуль "валют" if(!CModule::IncludeModule('currency')) return "AgentGetCurrencyRate();"; $arCurList = array('USD', 'EUR'); $bWarning = False; $rateDay = GetTime(time(), "SHORT", LANGUAGE_ID); $QUERY_STR = "date_req=".$DB->FormatDate($rateDay, CLang::GetDateFormat("SHORT", SITE_ID), "D.M.Y"); $strQueryText = QueryGetData("www.cbr.ru", 80, "/scripts/XML_daily.asp", $QUERY_STR, $errno, $errstr); // данная строка нужна только если у вас сайт в кодировке utf8 $strQueryText = iconv('windows-1251', 'utf-8', $strQueryText); if (strlen($strQueryText) <= 0) $bWarning = True; if (!$bWarning) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/xml.php"); $strQueryText = eregi_replace("<!DOCTYPE[^>]{1,}>", "", $strQueryText); $strQueryText = eregi_replace("<"."\?XML[^>]{1,}\?".">", "", $strQueryText); $objXML = new CDataXML(); $objXML->LoadString($strQueryText); $arData = $objXML->GetArray(); $arFields = array(); $arCurRate["CURRENCY_CBRF"] = array(); if (is_array($arData) && count($arData["ValCurs"]["#"]["Valute"])>0) { for ($j1 = 0; $j1<count($arData["ValCurs"]["#"]["Valute"]); $j1++) { if (in_array($arData["ValCurs"]["#"]["Valute"][$j1]["#"]["CharCode"][0]["#"], $arCurList)) { CCurrencyRates::Add(array( 'CURRENCY' => $arData["ValCurs"]["#"]["Valute"][$j1]["#"]["CharCode"][0]["#"], 'DATE_RATE' => $rateDay, 'RATE' => DoubleVal(str_replace(",", ".", $arData["ValCurs"]["#"]["Valute"][$j1]["#"]["Value"][0]["#"])), 'RATE_CNT' => IntVal($arData["ValCurs"]["#"]["Valute"][$j1]["#"]["Nominal"][0]["#"]), )); } } } } return "AgentGetCurrencyRate();"; } |
И не забудте добавить агента AgentGetCurrencyRate(); на странице управления агентами в админке.