Текущие курсы доллара и евро на страницах сайта

Нередко на коммерческом сайте необходимо не только выводить текущие курсы валют, но и использовать их в различных расчетах. Основываясь на некоторых особенностях MODx, предлагаемый подход позволяет легко получать актуальные курсы, обращаясь к сайту Центрального Банка Российской Федерации всего один раз в день.

Для получения курсов валют создается плагин, который должен быть связан с событием OnParseDocument. При генерации каждой страницы сайта устанавливаются соответствующие курсы. При этом с сайта ЦБ РФ берутся данные в формате XML, производится их разбор и сохранение полученных результатов в кэше. До тех пор, пока не изменится дата, информация будет браться из кэша, а обращение к сайту ЦБ и разбор повторно выполняться не будут. Ниже приведен код соответствующего плагина.

$e = &$modx->Event;
if ($e->name == 'OnParseDocument' &&
  !isset($GLOBALS['currentUSDrate'])) {
$cburl='http://www.cbr.ru/scripts/'.
  'XML_daily.asp?date_req=';
$cbfile = "assets/cache/usdeuro.php";
$nocbFile=false;
if (file_exists($cbfile))
  include_once ($cbfile);
else
  $nocbFile=true;
if ($nocbFile OR
  date("d/m/Y",$currentFileDate)!=date("d/m/Y")) {
  $currentFileDate=time();
  $data = file_get_contents ($cburl.date("d/m/Y",
    $currentFileDate));
  $xml = new SimpleXMLElement($data);
  foreach ($xml->Valute as $Valute) {
    if ((integer)$Valute->NumCode==840)
      $currentUSD=floatval(str_replace(
	    ",",".",(string)$Valute->Value));
    if ((integer)$Valute->NumCode==978)
      $currentEURO=floatval(str_replace(
	    ",",".",(string)$Valute->Value));
  }
  $fileContent='<?php
$currentFileDate='.$currentFileDate.';
$currentUSD='.number_format($currentUSD,4,'.','').';
$currentEURO='.number_format($currentEURO,4,'.','').';
? >';
  file_put_contents ($cbfile, $fileContent);
}
$GLOBALS['currentUSDrate']=$currentUSD;
$GLOBALS['currentEUROrate']=$currentEURO;
$modx->setPlaceholder('USD',number_format(
  $GLOBALS['currentUSDrate'], 4, '.', ''));
$modx->setPlaceholder('EURO',number_format(
  $GLOBALS['currentEUROrate'], 4, '.', ''));
}

Следует отметить, что в плагине используется библиотека SimpleXML, которая должна быть установлена на хостинге. При необходимости можно получать курсы и других валют, внеся незначительные исправления. Также можно добавить в плагин дополнительные проверки на наличие ошибок, но для большинства сайтов достаточно имеющихся возможностей. Если требуется вывести курсы валют на некэшируемых страницах, достаточно добавить на них плэйсхолдеры [+USD+] и [+EURO+], а для кэшируемых страниц необходимо использовать дополнительный сниппет, примерно такой:

<?php
return ('Доллар: '.
  number_format($GLOBALS['currentUSDrate'],4,'.','').
  '<br />Евро: '.
  number_format($GLOBALS['currentEUROrate'],4,'.',''));
?>

При этом вызов сниппета должен быть некэшируемым, например, [!USDEURO!]. Аналогично можно использовать переменные $GLOBALS['currentUSDrate'] и $GLOBALS['currentEUROrate'] в любых других сниппетах, где требуются выполнение вычислений с использованием текущих курсов валют.

 

Реклама

Поиск на сайте

Введите ваш запрос для начала поиска.