[EVO] Курс валют


<?php
$xmlURL = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y');
$tpl = isset($tpl) ? $modx->getChunk($tpl) : '€ = [+euro+] Р, $ = [+usd+] Р';

//кэширование 6 часов
$filename = MODX_BASE_PATH.'assets/cache/kurs.xml';
if (!file_exists($filename) || (file_exists($filename) && time() > filemtime($filename) + 60*60*6)) {
	$file = file_get_contents($xmlURL);
	if ($file) {
		file_put_contents($filename, $file);
		@chmod($filename, 0666);
	}
}

$xml = simplexml_load_file($filename); 
if ($xml != false){
	$usd = $xml->xpath('Valute[@ID="R01235"]/Value');
	$usd = round(str_replace(',','.',$usd[0]),1);
	$euro = $xml->xpath('Valute[@ID="R01239"]/Value');
	$euro = round(str_replace(',','.',$euro[0]),1);
	$output = str_replace(array('[+usd+]','[+euro+]'),array($usd,$euro),$tpl);
	return $output;
}
?>

18 комментариев

avatar
А как их в div обернуть? И можно ли как то прибавить 2%?
Чтобы автоматом выходили…
avatar
по div понял
а на счет 2% подскажите плиз…
avatar
На 1.02 просто умножить:

$usd = round(1.02*str_replace(',','.',$usd[0]),1);
avatar
Спасибо
avatar
А как сделать такой же скрипт для Revo?
А также очень важен момент — как сделать, чтобы так же отображались курсы валют на завтра? Как на Яндексе.
Комментарий отредактирован 2014-05-30 06:47:51 пользователем Batyabest
avatar
Расскажите как этим пользоваться?
avatar
А в чем сложность? Это сниппет.
avatar
Спасибо, большое!
avatar
Temus, а как вывести цену перемноженную на курс доллара?

[!kurs? &is=`[*price*]`!]

выводит просто курс двух валют
avatar
Как-то так:
if (isset($is)) return $usd*$is;
avatar
Спасибо, но… не выходит что-то:

<?php
$xmlURL = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y');
$tpl = isset($tpl) ? $modx->getChunk($tpl) : '€ = [+euro+] Р, $ = [+usd+] Р';

//кэширование 6 часов
$filename = MODX_BASE_PATH.'assets/cache/kurs.xml';
if (!file_exists($filename) || (file_exists($filename) && time() > filemtime($filename) + 60*60*6)) {
        $file = file_get_contents($xmlURL);
        if ($file) {
                file_put_contents($filename, $file);
                @chmod($filename, 0666);
        }
}

$xml = simplexml_load_file($filename); 
if ($xml != false){
        $usd = $xml->xpath('Valute[@ID="R01235"]/Value');
        $usd = round(str_replace(',','.',$usd[0]),1);
        $euro = $xml->xpath('Valute[@ID="R01239"]/Value');
        $euro = round(str_replace(',','.',$euro[0]),1);
        $output = str_replace(array('[+usd+]','[+euro+]'),array($usd,$euro),$tpl);
        return $output;
}
if (isset($is)) return $usd*$is;
?>


Так выводит просто курс валют, а если поставить перед $xml = simplexml_load_file($filename);

то выводит просто 0 руб.

Подскажие пожалуйста!
avatar
Получилось… только в корзину цена другая передается..:(
avatar
Чтобы в корзину цена нужная передавалась, пишите плагин на событие OnSHKgetProductPrice, в форме добавления товара в корзину строчку:
<input type="hidden" name="shk-price" value="[*price*]">

А в плагине что то типа:

  if ($e->name == 'OnSHKgetProductPrice') {
	
  $price = $_POST['shk-price'];	
	
  $output = $price * $euro;
	
  $e->output($output);
	
}

Где переменная euro это ваш курс валюты, соответственно курсы нужно получать в плагине, нужно немного код из приведённого выше сниппета переделать.
avatar
понимаю, что это основы, но их-то и не хватает: подскажите, пожалуйста, как в сниппете в переменную euro курс записать? Спасибо заранее.
avatar
Не совсем понятно что вы хотите сделать =)
Вот задание переменной euro из сниппета выше:
$euro = $xml->xpath('Valute[@ID="R01239"]/Value');
avatar
спасибо за ответ
Я хочу получить окончательный код сниппета и плагина, чтобы и цена в карточках товара и при добавлении в корзину по курсу пересчитывалась. Вы писали
соответственно курсы нужно получать в плагине, нужно немного код из приведённого выше сниппета переделать.
Вот как именно надо переделать код сниппета, чтобы курс получать в плагине?
Что-то мне подсказывает, что дописать
return $euro;
в конце сниппета будет недостаточно. Подскажите, пожалуйста, код готового варианта.
Комментарий отредактирован 2015-12-23 04:21:31 пользователем uh0gorl0nos
avatar
а! вот я тупой! понял смысл фразы «курс получать в плагине»))))

Получилось. Уверен, что сделал все через одно место, но работает:
в html формы добавил поле
<input type="hidden" name="shk-price" value="[*price*]">

сниппет оставил без изменений, а плагин у меня такой:
$e = &$modx->Event;
$output = "";
$is = isset($is) ? $is : '';    
$xmlURL = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y');

//кэширование 6 часов
$filename = MODX_BASE_PATH.'assets/cache/kurs.xml';
if (!file_exists($filename) || (file_exists($filename) && time() > filemtime($filename) + 60*60*6)) {
        $file = file_get_contents($xmlURL);
        if ($file) {
                file_put_contents($filename, $file);
                @chmod($filename, 0666);
        }
}

$xml = simplexml_load_file($filename); 
if ($xml != false){
        $usd = $xml->xpath('Valute[@ID="R01235"]/Value');
        $usd = round(str_replace(',','.',$usd[0]),1); 
}
if ($modx->Event->name == 'OnSHKgetProductPrice') {
	$price = $_POST['shk-price'];
	$output = $price * $usd;
    $e->output($output);
}
avatar
Пару дней назад заметил, что сниппет не работает. У всех так или это у меня что-то не так?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.