[CurrencyRate] - курс валют

Хочу представить вам компонент [CurrencyRate] — информация о курсах иностранных валют по отношению к рублю, опубликованная на официальном сайте Банка России в сети Интернет.


По моему тут все просто и понятно. Установили компонент — запросили список валют. Для регулярного обновления в комплекте скрипт для cron.
Все курсы валют доступны по плейсходеру [[++код_валюты]]
например:
[[++USD]]
Так же есть поправочный коэф-т — можно самостоятельно корректировать курс валюты.
В комплекте еще сниппет для расчета цен в указанной валюте относительно значения заданного в админке.

пример
Сниппет CRcalc
Вкратце — это Конвертер валют.
Параметры (Название — Формат ввода — Описание):
input — Числовое значение — Входное значение, т.е. то которое нужно конвертировать (перевести) в нужную валюту.
multiplier — Код валюты (например, USD), обязательно большими буквами — Этот параметр нужно использовать для перевода из какой-либо валюты в РУБЛИ (например, USD в RUB).
divider — Код валюты (например, USD), обязательно большими буквами — Этот параметр нужно использовать для перевода РУБЛЕЙ в любую другую валют (например, RUB в USD).
format — [a,«b»,«c»] (обязательно двойные кавычки ") — формат для вывода цены, где a — число знаков после запятой (числовое значение, по-умолчанию — 2), b — разделитель дробной части (строковое значение, по-умолчанию ", "), c — разделитель тысяч (строковое значение, по-умолчанию " " (пробел)).
noZeros — 0 или false — Убрать лишние нули в цене. Например, если цена равна 1000.00, то в результате получим 1000.

Пример:
Перевод USD в RUB
[[!CRcalc?
	&input 		= `1`
	&multiplier 	= `USD`
	&format 	= `[2, ".", " "]`
	&noZeros 	= `0`
]]
Результат — 61.15
(1$ равен 61.15 руб)

Перевод RUB в USD
[[!CRcalc?
	&input 		= `1`
	÷r 	= `USD`
	&format 	= `[2, ".", " "]`
	&noZeros 	= `0`
]]
Результат — 0.02
(1руб равен 0.02$)

Спасибо за внимание.
Пакет доступен в репо modstore на бесплатной основе.
проект на гитхаб — github.com/vgrish/currencyrate
Володя
Володя
21 декабря 2014, 11:42
modx.pro
15 950
Поблагодарить автора Отправить деньги

Комментарии: 150

Aртур Чикин
21 декабря 2014, 15:14
[[++USD]]
почему так? ведь обычно с двойным плюсом вызываются системные параметры.
    Василий Наумкин
    21 декабря 2014, 15:54
    Предположу, что компонент добавляет данные в системную настройку.
      Володя
      21 декабря 2014, 17:23
      у меня на одном сайте был велосипед и он выставлял валюты в [[+USD]] и я подумал что возможно у кого то тоже так… ну и чтоб не затереть решил использовать ++ и все…
      Павел Левин
      22 декабря 2014, 14:32
      Актуально =)
      Волна пока идёт… вспомним «Интерстеллар»
        Александр
        24 декабря 2014, 17:15
        А как cron`ом здесь воспользоваться? Просто обращаться по пути где он лежит (в core/components/currencyrate/cron/get_cr.php) или нужно код переносить?
          Володя
          24 декабря 2014, 17:17
          как лежит, так и вызывайте…
          Можете перенести если вам так удобнее, поправьте только путь к index.php
            Александр
            24 декабря 2014, 17:23
            А можете уточнить какая команда для крона получается?
            Что то типо этого?
            curl -s mysite.ru/core/components/currencyrate/cron/get_cr.php
              Володя
              24 декабря 2014, 18:25
              через curl cron не пользуюсь, но думаю так у вас не будет работать.
              Чтоб через curl работало нужно в assets файлик положить.

                Александр
                25 декабря 2014, 09:37
                А как правильно крон прописать тогда? Можно пример команды?
                Василий Наумкин
                25 декабря 2014, 10:32
                Если на хостинге не закрыта директория core, то можно так:
                whet http://mysite.com/core/components/currencyrate/cron/get_cr.php -O /dev/null

                Но эту директорию принято закрывать, да и выполняться скрипт может долго, если удалённый сервер не отвечает, так что лучше прописать его в cron.

                Конфиг крона вызывается в консоли сервера так:
                crontab -e
                  Александр
                  25 декабря 2014, 17:00
                  У меня VPS. Стоит VestaCP контрольная панелька. Там есть раздел крон где я могу указать команду и время. Что в этом случае туда стоит написать? И папка core закрыта.
                    Володя
                    25 декабря 2014, 17:33
                    сейчас добавлю скрипт для обновления цен с фронта…
                      Володя
                      25 декабря 2014, 17:37
                      вызывать так
                      http://sitename.ru/assets/components/currencyrate/web-connector.php?password=12345
                      пароль выставляете в настройках компонента. Сделал на всякий случай чтоб вас кто-то посторонний не «мучал»…
                        Александр
                        26 декабря 2014, 12:12
                        А где взять этот файл? Или вы еще не обновили?
                          Володя
                          26 декабря 2014, 12:14
                          компонент обновил и передал в SD. Так что скоро выложат.
            Володя
            25 декабря 2014, 19:34
            У кого выдает
            Call to undefined function  lcfirst() /cache/includes/elements/modplugin/8.include.cache.php on line 7.
            заменяем в плагине строчку
            $eventName = lcfirst($eventName);
            на
            $eventName = mb_strtolower(mb_substr($eventName, 0, 1)).mb_substr($eventName,1);
              Илья
              28 декабря 2014, 16:35
              я новичок.
              добавил в cron, не работает.
              через консоль на убунте попробовал — говорит такое:
              my@server:~$ wget http://мойсайт.ru/assets/components/currencyrate/web-connector.php?password=пароль
              --2014-12-28 16:31:31--  http://мойсайт.ru/assets/components/currencyrate/web-connector.php?password=пароль
              Resolving мойсайт.ru (мойсайт.ru)... ip_сервера
              Connecting to мойсайт.ru (мойсайт.ru)|ip_сервера|:80... connected.
              HTTP request sent, awaiting response... 401 Not Authorized
              Authorization failed.
              подскажите.
                Володя
                28 декабря 2014, 17:32
                а статус сайта? Опубликован? потому как вам выдает 401 Not Authorized
                  Илья
                  28 декабря 2014, 17:35
                  сайт работает, через браузер открываю эту ссылку — в настройках меняется дата обновления.
                  Сейчас попробовал выйти из админки и открыть заново эту ссыль и получил в браузере:
                  {"success":false,"code":401}
                    Володя
                    28 декабря 2014, 17:43
                    ага. понял свой косяк.
                    завтра поправлю, а пока руками вставь в начало assets/components/currencyrate/web-connector.php

                    if(!isset($_REQUEST['ctx']) OR !in_array($_REQUEST['ctx'], array('web'))){
                        $_REQUEST['ctx'] = 'web';
                    }
                      Илья
                      28 декабря 2014, 17:51
                      вставил перед
                      // For debug
                      , все завелось.

                      Теперь буду разбираться, работает ли у меня на ISPConfig cron или нет =)

                      Спасибо;)
              Александр
              29 декабря 2014, 14:09
              У меня крон не работает. Выдает
              Fatal error: Undefined class constant 'LOG_LEVEL_ERROR' in /home/..../public_html/core/model/modx/error/moderrorhandler.class.php on line 111
                Володя
                29 декабря 2014, 14:22
                стукни в скайп если есть возможность vgrish_vgrish
                Илья
                31 декабря 2014, 12:48
                Подскажите, как решить проблему, постоянно нужно очищать кэш всего сайта, что бы изменились данные.
                Чанк добавляю в шаблон таким образом:
                [[!название_чанка]]
                А вот содержание чанка:
                <div>Курсы валют
                <span>Доллар: [[++USD]]</span>
                <span>Евро: [[++EUR]]</span>
                </div>
                  Володя
                  31 декабря 2014, 15:11
                  да, я понял про что ты. Нужно доработать будет кэширование.
                  В следующем году поправлю. Раньше не получится...)))
                    Илья
                    31 декабря 2014, 15:28
                    Спасибо :)

                    Подскажите ваш e-mail, хотел бы предложить вам идею для нового модуля под modx, он чем-то похож на данный модуль :)
                  Володя
                  02 января 2015, 09:47
                  Исправил, ждите в репо…
                    An Si
                    29 апреля 2015, 11:26
                    Я создал плагин для обновления раз в день и в нём после обновления очищаю кэш так:
                    $cacheOptions = array(xPDO::OPT_CACHE_KEY => 'crlist');
                    $modx->getCacheManager()->delete('crlist', $cacheOptions);
                  Воеводский Михаил
                  02 января 2015, 17:48
                  Г
                    Гриборий
                    24 января 2015, 19:37
                    Есть сайт на первом минишопе и с оплатой через робокассу. Подскажите, где нужно подставить умножение на глобальную переменную, чтобы в робокассу передавалась правильная цена при оплате.
                      Володя
                      24 января 2015, 20:39
                      скорее всего можно написать плагин на событие msOnOrderCreate
                      в нем получаете корзину->сумму покупки и умножаете на текущий курс и сохраняете…
                    Алексей
                    08 февраля 2015, 17:49
                    как включить плейсхолдеры в чанках отправляемых писем minishop2 ??
                    вызываю такой сниппет:
                    $currencyrate = $modx->getService('currencyrate', 'currencyrate', $modx->getOption('currencyrate_core_path', null, $modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/', $scriptProperties);
                    if (!($currencyrate instanceof currencyrate)) return '';
                    
                    $eventName = 'OnHandleRequest';
                    if (method_exists($currencyrate, $eventName) && $currencyrate->active) {
                    	$eventName = lcfirst($eventName);
                    	$currencyrate->$eventName($scriptProperties);
                    }
                    и всеравно не вставляет [[++USD]]
                      Володя
                      08 февраля 2015, 21:12
                      зачем так мудрить?
                      есть сниппет CRcalc
                      просто вставьте в чанк например
                      [[!CRcalc? &input=`1` &multiplier=`USD`]]
                      Инна
                      11 февраля 2015, 08:06
                      Подскажите пожалуйста!!! Есть tv поле price, где указана цена в рублях. Вызываю сниппет [[!CRcalc? &divider=`USD` &input=`[[*price]]`]], но цену не пересчитывает. Что делаю не так?
                        Володя
                        11 февраля 2015, 08:42
                        а что то выводит вообще? или пусто?
                        возможно вы TV не так получаете…
                          Инна
                          11 февраля 2015, 23:57
                          Спасибо. Разобралась уже
                        Василий Столейков
                        16 апреля 2015, 20:28
                        А можно использовать это дополнение для вытягивания курса не с российского банка, а с национального банка другой страны, например Молдовы?
                        Нужно использовать настройку Адрес сервиса — url для запроса курса валют?
                          Володя
                          16 апреля 2015, 21:41
                          нет, настройка только для возможной корректировки текущего адреса центробанка…
                          структура xml другого банка думаю совершенно другая.
                          вы можете сделать по аналогии…
                          An Si
                          17 апреля 2015, 10:05
                          Подскажи пожалуйста, как можно обновить курс валют из сниппета. Хочу сделать обновление курса раз в день без использования крона.
                            Володя
                            17 апреля 2015, 10:21
                            достаточно посмотреть в файлик крона
                            $currencyrate = $modx->getService('currencyrate', 'currencyrate', $modx->getOption('currencyrate_core_path', null, $modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/');
                            if (!($currencyrate instanceof currencyrate)) return '';
                            
                            $currencyrate->rateIntoDb();
                              An Si
                              17 апреля 2015, 11:02
                              мда, логично… затупил с утра. В общем, чтобы обновлять раз в день без крона можно создать плагин на событие OnLoadWebDocument. В плагине просто сравнивать день последнего обновления и сегодняшний день. Если они отличаются, то обновляем, иначе нет.

                              $lastDayUpdate = strftime('%d',strtotime($modx->getOption('currencyrate_last_date')));
                              if ($lastDayUpdate!=date('d')) {
                                  $currencyrate = $modx->getService('currencyrate', 'currencyrate', $modx->getOption('currencyrate_core_path', null, $modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/');
                                  if (!($currencyrate instanceof currencyrate)) return '';
                                  $currencyrate->rateIntoDb();
                              }
                              return;
                                Володя
                                17 апреля 2015, 11:07
                                совершенно верно
                                  Сергей Шлоков
                                  17 апреля 2015, 11:20
                                  Потенциальная ошибка. Лучше сравнивать полную дату.
                                    An Si
                                    17 апреля 2015, 11:28
                                    Ты про то, что если в течении месяца на сайте не будет посетителя, а потом бац и кто-то зашел в день последнего обновления месяц назад? Поправить не сложно, хотя имхо вероятность такого события очень мала. Даже если постетителей на сайте действительно не бывает, то поисковые боты постоянно будут заходить ;)
                              Наумов Алексей
                              19 мая 2015, 15:26
                              Привет!

                              Поставил компонент, зашел в меню Приложения — таблица со списком валют пустая.

                              Нажал кнопку «Обновить курс», все зависло. Открыл консоль — там вот так:
                              {«success»:false,«message»:«pas_save_setting_err»,«total»:1,«data»:[],«object»:[]}
                              В таблице modx_currency_rate_list пусто.

                              Попробовал туда руками добавить строчку — все равно зависает при обновлении списка в админке.

                              Некоторое время назад ставил на другом сайте — все работало, в списке валют прям после установки компонента было несколько строк.

                              ЧЯДНТ?
                                Володя
                                19 мая 2015, 15:37
                                www.cbr.ru/ не отвечал возможно.
                                Попробуй еще раз
                                  Наумов Алексей
                                  19 мая 2015, 15:41
                                  Неа, сейчас все тоже самое… Может я что-то упустил?..
                                    Володя
                                    19 мая 2015, 15:50
                                    Нет, там нечему ломаться, кроме как цбрф… Он не хочет тебе отвечать… Может тебя забанили? )))
                                      Наумов Алексей
                                      19 мая 2015, 15:51
                                      Блин, он походу правда не работал)) вот ведь жеж бывает. Заработало. Спасибо, хороший компонент)
                              Сергей Лим
                              24 мая 2015, 10:45
                              Подскажите:
                              * как сделать округление до сотых, десятых\
                              * как реализовать пункт изменение курса по сравнению с предыдущим днем?
                                Володя
                                24 мая 2015, 17:15
                                — непонятно где именно вы хотите округлить?
                                — писать историю изменений валюты

                              Володя
                              24 мая 2015, 17:17
                              — добавил Российскую валюту — Рубль
                              — добавил статус активна/ неактивна
                              — добавил rank и сортировку
                              — добавил сниппет для вывода select c валютами

                              проект на гитхаб — github.com/vgrish/currencyrate
                                Богдан
                                21 июня 2015, 13:45
                                Пробую сделать мультиязычность по твоей инструкции. В каталоге цены меняются при переключении валюты, но в плейсхолдер [[+old_price]] выводится цена в основной валюте… Это можно как нибудь исправить? Так как поле со старой ценой используется и его отключить нельзя.
                                  Евгений Дубровин
                                  07 февраля 2019, 15:42
                                  Добрый день.
                                  а как вывести селект с валютами?
                                  ну или вообще переключить валюту на сайте с фронтенда?
                                  Михаил
                                  31 мая 2015, 14:27
                                  Здравствуйте, было бы не плохо, если бы можно было выводить на сайт дату обновления в нужном формате. Сейчас работает [[++currencyrate_last_date]] такая конструкция, но выдается в виде 2015-05-31 13:18:27. Не знаю, закладывалось ли это разработчиками для фронтэнда по умолчанию. Было бы хорошо, если бы можно было комбинировать дату в виде [[++currencyrate_last_date &format=`d.m.Y`]]
                                    Сергей Лим
                                    25 июня 2015, 01:57
                                    К сожалению у этого компонента нету истории изменения курса. На данный момент пользуюсь вот этим скриптом

                                    function get_rate($currency) {
                                    
                                    $date = getdate();  // получаем ассоциативный массив с данными по дате
                                    
                                    $day_of_the_week = $date['wday']; // день недели
                                    
                                        //расчет коэффициента смещения
                                        switch ($day_of_the_week) {
                                        case 0:  $k1 = 2 ;  $k2 = 1;  break;   // воскресенье
                                        case 1:  $k1 = 3 ;  $k2 = 2;  break;   // понедельник
                                        case 2:  $k1 = 3 ;  $k2 = 0;  break;  // вторник
                                        default: $k1 = 1 ;  $k2 = 0;  break;   // среда, четверг, пятница, суббота
                                        }
                                    
                                    $month = $date['mon'] ;    // месяц
                                    $day = $date['mday'] ;     // число сегодня
                                    $yesterday = $day - $k1 ;  // число для получения курса на предыдущий день
                                    $today = $day - $k2 ;      // число для получения курса на сегодня
                                    $year = $date['year'] ;    // год
                                    
                                    
                                    $date_yesterday = date("d/m/Y", mktime(0, 0, 0, $month, $yesterday, $year )); // Генерация даты для курса предыдущего дня
                                    $date_today = date("d/m/Y", mktime(0, 0, 0, $month, $today, $year )); // Генерация даты для курса на сегодня
                                    
                                    $rate = array() ;
                                    
                                    foreach($currency as $key => $value) {
                                    $url = 'http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.$date_yesterday.'&date_req2='.$date_today.'&VAL_NM_RQ='.$value ;
                                    $xml = simplexml_load_file($url);
                                    $rate_today = round(str_replace(',','.',$xml->Record[1]->Value), 2);
                                    $rate_yesterday = round(str_replace(',','.',$xml->Record[0]->Value), 2);
                                    $range = round($rate_today - $rate_yesterday, 2) ;
                                    
                                    if ($range > 0) {
                                    $range = '+' . $range;
                                    $img = 'up' ;
                                    } elseif ($range == 0) {
                                    $range = 0 ;
                                    $img = 0 ;
                                    } else {
                                    $img = 'down' ;
                                    }
                                    
                                    $rate[$key] = array(
                                     'today' => $rate_today,
                                     'change' => $range,
                                     'img' => $img
                                    );
                                    
                                    }
                                    
                                    return $rate ;
                                    
                                    }
                                    
                                    
                                    
                                    $currency = array(
                                    'dollar' => 'R01235',
                                    'euro' => 'R01239'
                                    );
                                    
                                    $rate = get_rate($currency);
                                    
                                    foreach ($rate as $key => $value) { ?>
                                    
                                    <div class="valuta-logo"><img src="/assets/images/valuta/<?php echo $key; ?>.png" alt="" /></div>
                                    
                                    <strong><?php echo $value['today']; ?></strong>
                                    
                                    <?php if($value['change']) { ?>
                                    
                                    <img src="/assets/images/valuta/<?php echo $value['img']; ?>.png" alt="" /> <?php echo $value['change']; ?>
                                    
                                    <?php } ?>
                                    
                                    <div style="clear: both"></div>
                                    
                                    <?php }

                                    Скажите, насколько он кривой? И я так понимаю, что надо сделать кэшируемость + крон? Я просто в пхп только начинаю разбираться. Автор если направишь меня в нужное направление, то хотел бы помочь усовершенствовать твой компонент на основе этого. Я знаю, что ты это сам можешь, но я хотел бы научиться)
                                      Володя
                                      25 июня 2015, 09:41
                                      смотриш тут github.com/vgrish/currencyrate
                                      делаешь нужные тебе изменения/улучшения…
                                      Разбирайся самостоятельно и все получится.
                                      Павел
                                      21 июля 2015, 17:01
                                      [[CRcalc? &input=`[[+total_cost]]` &multiplier=`USD`]]
                                      Почему когда [[+total_cost]] больше 1000$ отображается курс долара а не расчет формулы?
                                        Денис
                                        07 ноября 2015, 00:14
                                        Сам не мог понять в чем причина. Просто надо изменить формат вывода цен в системных настройках minishop2 -> Товар (в поле «Формат цен» убрать разделитель тысяч)
                                        Алексей Марченко
                                        05 августа 2015, 10:04
                                        Всем привет. Поставил currencyrate при попытке обновить курс из админки зависание с надписью «загружается» и
                                        в логе ошибка
                                        (ERROR @ /assets/components/currencyrate/connector.php) [CR:Error] NO loadRate()
                                        Куда посмотреть?
                                          Алексей Марченко
                                          07 августа 2015, 12:47
                                          Блин третий день не могу получить курсы!!!
                                          {"success":false,"message":"pas_save_setting_err","total":1,"data":[],"object":[]}

                                          Может в бане? где посмотреть?
                                          ck
                                          ck
                                          28 сентября 2015, 22:46
                                          День добрый!
                                          Можно ли добавить свою валюту в список (например, BYR)? Просто, без обновления её значения с сайта ЦБР.

                                          UPD: Вопрос снимается сразу же после установки компонента. Список валют впечатляет.
                                            ck
                                            ck
                                            02 октября 2015, 02:49
                                            Для пересчёта цены в зависимости от выбранной валюты автор добавил в сборку плагин crMSprice. К сожалению по-умолчанию на него не навешено вообще никакого события.
                                            Подскажите, как заставить его пересчитывать цену при выборе валюты из списка, выводимого сниппетом CRlist?
                                              ck
                                              ck
                                              08 октября 2015, 14:01
                                              Володя подсказал, что необходимо плагин crMSprice должен срабатывать на событие msOnGetProductPrice.
                                              Володя
                                              21 октября 2015, 10:31
                                              версия 1.0.5
                                              Добавлено окно создания и редактирования курса. Теперь можно создавать свои валюты.
                                                Сергей
                                                27 ноября 2015, 11:46
                                                Добрый день! Не могу найти в репозитории данный компонент(
                                                  Володя
                                                  27 ноября 2015, 12:02
                                                  Добрый день.
                                                  modstore.pro/search?query=currencyrate

                                                  ps. возможно у вас старая версия MODX?
                                                    Сергей
                                                    27 ноября 2015, 12:04
                                                    MODX Revolution 2.2.15-pl (traditional)
                                                      Володя
                                                      27 ноября 2015, 12:10
                                                      Версия MODX от 2.3
                                                        Сергей
                                                        27 ноября 2015, 12:10
                                                        Ок спасибо
                                                          Федор
                                                          20 января 2016, 20:14
                                                          Здравствуйте! Подскажите пожалуйста, курс валют в админке нужно в ручную обновлять?
                                                            Володя
                                                            20 января 2016, 20:57
                                                            Добрый вечер.
                                                            Для регулярного обновления в комплекте скрипт для cron.
                                                            а можно и вручную в админке.
                                                              Федор
                                                              20 января 2016, 21:04
                                                              ммм… понятно, видимо не разобрался, у меня не обновляется автоматически… спасибо!
                                                    Сергей Лим
                                                    10 марта 2016, 02:21
                                                    — Add active combo — Что это?
                                                    Паша Палиенко
                                                    01 апреля 2016, 16:12
                                                    Добрый день использую ваш модуль.
                                                    В магазине реализовано не сколько валют и переключение между ними, работает все отлично, но столкнулся с проблемой оплаты. При оплате товара цену берет правильно, но валюту берет ту которая у меня выставлена в настройках «Предлагаемая валюта платежа». Вообщем вопрос такой, можно передать в «Предлагаемая валюта платежа» валюту которую выбрал пользователь
                                                      Паша Палиенко
                                                      01 апреля 2016, 16:56
                                                      Этот код я как понимаю берет валюту
                                                      $row['selected'] = $row['charcode'] == $selected ? 'selected' : '';
                                                      Этот код из системы оплаты который берет валюту из настроек.
                                                      ,'currency' => $this->modx->getOption('ms2_payment_paypal_currency', null, 'USD')
                                                      Вообщем каким методом мне передавать в массив «currency» валюту которая включена сейчас у пользователя??
                                                      Паша Палиенко
                                                      17 мая 2016, 18:09
                                                      Володя, подскажи как сделать фильтр из CRlist. К примеру:
                                                      [[!CRlist:is=`RUB`:then=`[[+price]] руб`:else=``]]
                                                        Enegry
                                                        26 июня 2016, 19:53
                                                        а можно как-то брать курсы с сайта? currencyrate.today
                                                          Андрей
                                                          22 августа 2016, 15:25
                                                          Доброго времени суток! у меня есть три поля с ценой одно поле для дулера, второе для евро а третье с рублями, каким образом можно реализовать добавление товара в корзину с этими тремя ценами, причем может быть заполнена только одна и пересчет должен идти в рубли
                                                            Андрей
                                                            26 августа 2016, 15:57
                                                            вот я слепой) сделал все
                                                            Юрий
                                                            09 ноября 2016, 15:20
                                                            Что-то стали валиться ошибки при попытке обновления курса:

                                                            [2016-11-09 15:14:28] (ERROR @ /home/s2190/www/core/components/currencyrate/model/currencyrate/currencyrate.class.php : 177) [CR:Error] not cyrrency for url - http://www.cbr.ru/scripts/XML_daily.asp?date_req=09/11/2016
                                                            [2016-11-09 15:14:28] (ERROR @ /home/s2190/www/core/components/currencyrate/model/currencyrate/currencyrate.class.php : 221) [CR:Error] NO loadRate()
                                                            Хотя url http://www.cbr.ru/scripts/XML_daily.asp?date_req=09/11/2016 доступен.
                                                              Володя
                                                              09 ноября 2016, 15:24
                                                              у них бывает такое, отдают xml через редирект. В последней версии я просто добавил вывод ошибки. Ато можно было нажимать обновить а обновления и нет.
                                                              Александр
                                                              26 ноября 2016, 15:03
                                                              Добрый день!

                                                              Подскажите как ваш курс умножить на число?

                                                              Спасибо!
                                                                Володя
                                                                27 ноября 2016, 10:11
                                                                пример
                                                                Сниппет CRcalc
                                                                Вкратце — это Конвертер валют.
                                                                Параметры (Название — Формат ввода — Описание):
                                                                input — Числовое значение — Входное значение, т.е. то которое нужно конвертировать (перевести) в нужную валюту.
                                                                multiplier — Код валюты (например, USD), обязательно большими буквами — Этот параметр нужно использовать для перевода из какой-либо валюты в РУБЛИ (например, USD в RUB).
                                                                divider — Код валюты (например, USD), обязательно большими буквами — Этот параметр нужно использовать для перевода РУБЛЕЙ в любую другую валют (например, RUB в USD).
                                                                format — [a,«b»,«c»] (обязательно двойные кавычки ") — формат для вывода цены, где a — число знаков после запятой (числовое значение, по-умолчанию — 2), b — разделитель дробной части (строковое значение, по-умолчанию ", "), c — разделитель тысяч (строковое значение, по-умолчанию " " (пробел)).
                                                                noZeros — 0 или false — Убрать лишние нули в цене. Например, если цена равна 1000.00, то в результате получим 1000.

                                                                Пример:
                                                                Перевод USD в RUB
                                                                [[!CRcalc?
                                                                	&input 		= `1`
                                                                	&multiplier 	= `USD`
                                                                	&format 	= `[2, ".", " "]`
                                                                	&noZeros 	= `0`
                                                                ]]
                                                                
                                                                Результат — 61.15
                                                                (1$ равен 61.15 руб)

                                                                Перевод RUB в USD
                                                                [[!CRcalc?
                                                                	&input 		= `1`
                                                                	&divider 	= `USD`
                                                                	&format 	= `[2, ".", " "]`
                                                                	&noZeros 	= `0`
                                                                ]]
                                                                
                                                                Результат — 0.02
                                                                (1руб равен 0.02$)
                                                                  Александр
                                                                  27 ноября 2016, 11:10
                                                                  а если я хочу приплюсовать к курсу как это сделать?
                                                                    Володя
                                                                    27 ноября 2016, 11:13
                                                                    можно использовать поле коэф-т для прибавки
                                                                    joxi.ru/1A5Ro1DSnKPn4r
                                                                    или же напишите свой сниппет с вашей логикой.
                                                                      adminixi
                                                                      06 декабря 2016, 12:51
                                                                      Скажите, как вообще добавить хоть какую-то валюту настройках? Что писать в поле Код числовой?


                                                                      Чтобы бы там не было написано, строка не добавляется…
                                                                        Володя
                                                                        06 декабря 2016, 13:00
                                                                        все доступные валюты создаются с при обновлении валют, они по умолчанию неактивны.
                                                                        Переключите комбик справа и увидите их.
                                                                          adminixi
                                                                          06 декабря 2016, 13:31
                                                                          Спасибо, получилось.
                                                                          Только в наименовании теперь вопросы вместо названий
                                                                            Володя
                                                                            06 декабря 2016, 15:04
                                                                            проверьте бд кодировку
                                                              Артемий
                                                              26 декабря 2016, 04:11
                                                              Очень хороший модуль, вот прям то что нужно. Но жалко не работает. Ну точнее работает, но только с USD.

                                                              Вот так работает:
                                                              [[!CRcalc?
                                                              	&input 		= `1`
                                                              	&multiplier 	= `USD`
                                                              	&format 	= `[2, ".", " "]`
                                                              	&noZeros 	= `0`
                                                              ]]


                                                              А вот так уже нет:

                                                              [[!CRcalc?
                                                              	&input 		= `1`
                                                              	&multiplier 	= `EUR`
                                                              	&format 	= `[2, ".", " "]`
                                                              	&noZeros 	= `0`
                                                              ]]
                                                              В чем может быть проблема? Движек MODX Revolution 2.5.1-pl

                                                              Включение\выключение валюты в настройках на что влияет? Пробовал и так и сяк, как тольк оставишь валюту не USD то просто тупо умножает на 1. Пробовал вывести курс евро, вывел, но показывает 1)))) Смотрел в списке валют, там нормальный курс — 63 рубля… Как быть?
                                                                Володя
                                                                26 декабря 2016, 08:34
                                                                Попробуйте повторить ситуацию на тестовом сайте и скиньте доступы в личку, посмотрю в чем дело.
                                                                Спасибо!
                                                                  Артемий
                                                                  27 декабря 2016, 02:48
                                                                  Разобрался, оказывается в список валют загадочным образом затесалось ещё одно евро, с курсом 1. Странно… Я его удалил, и все стало нормально. Спасибо большое за помощь, модуль классный. Осталось разобраться, как обновление курса валют к крон добавить
                                                                Fedor
                                                                28 декабря 2016, 12:29
                                                                Здравствуйте, а подскажете, как сделать так, что бы фильтр msearch2 сортировало тоже по конвертированной валюте. т.е. все цены конвертирует нормально, а в фильтрах все равно старая цена, буду благодарен за ответ. либо направление куда копать.
                                                                  Василий Столейков
                                                                  11 января 2017, 09:00
                                                                  Весь вчерашний вечер и всё утро пытаюсь обновить курс валют через опцию в админке свежеустановленного компонента, но валюты не подгружаются!
                                                                  Такая же ситуация и на тестовом сайте modhost.
                                                                  По ссылке www.cbr.ru/scripts/XML_daily.asp?date_req= открываются все валюты в XML.
                                                                  В логах пусто.
                                                                  Что это может быть? Мне и дальше пытаться обновлять курс пока не заработает, или проблема в другом?
                                                                    Володя
                                                                    11 января 2017, 09:40
                                                                    Скиньте доступы на тестовый сайт в личку, посмотрю в чем дело.
                                                                    Спасибо!
                                                                      Василий Столейков
                                                                      11 января 2017, 22:21
                                                                      Спасибо, моя невнимательность была!
                                                                      А как перевести EUR в USD, если цены записаны в EUR?
                                                                        Василий Столейков
                                                                        11 января 2017, 22:29
                                                                        Валюту магазина в системных настройках (currencyrate_currency) указал EUR, но конвертирует всё равно в рубли…
                                                                        То есть несмотря на ту системную настройку, следующий код:
                                                                        {'!CRcalc'|snippet:[
                                                                            'input' => 1,
                                                                            'multiplier' => 'USD',
                                                                        ]}
                                                                        выдаёт 59.95, что значит в 1 USD находится 59.95 рублей.
                                                                        Мне рубли вообще не нужны, как переводить иностранные валюты одну в другую?
                                                                          Володя
                                                                          12 января 2017, 14:05
                                                                          {'!CRcalc'|snippet:[
                                                                              'input' => $_modx->getPlaceholder('+EUR'),
                                                                              'divider' => 'USD',
                                                                          ]}
                                                                            Василий Столейков
                                                                            12 января 2017, 14:35
                                                                            Супер, спасибо, всё работает!

                                                                            Чтобы работало для динамической цены использую так:
                                                                            {'!CRcalc'|snippet:[
                                                                                'input' => $_modx->getPlaceholder('+EUR') * $_modx->resource.price,
                                                                                'divider' => 'USD',
                                                                            ]}
                                                                    Максим
                                                                    21 января 2017, 18:11
                                                                    Добрый день, интересует возможность вывода плейсхолдеров валют [[++код_валюты]] в чанке Fenom. Чтото вроде {$код_валюты} или как его получить в чанке. Заранее благодарен.
                                                                    hddforever
                                                                    15 марта 2017, 15:07
                                                                    Привет всем.
                                                                    У нас на сайте стоял этот компонент. У нас Modx Evolution 1.0.12. Компонент исчез и нам надо заново ставить. В инструкции там «Система» → «Управление пакетами». У нас такого нет. Вы, случайно, не можете подсказать как поставить компонент на нашей версии. Может через менеджер модулей?
                                                                    Спасибо!
                                                                      Владимир
                                                                      15 марта 2017, 16:06
                                                                      Modx Evolution 1.0.12 — ни как с этим компонентом не совместим
                                                                      По Evolution вам скорее на modx.im посодействуют. тут только Revolution.
                                                                        hddforever
                                                                        15 марта 2017, 16:12
                                                                        Видимо меня дезинформировали. Спасибо!
                                                                      Dolce
                                                                      19 марта 2017, 21:02
                                                                      Здравствуйте. Возможно вопрос прозвучит глупо, я вот ковыряюсь уже пол дня и ничего у меня не получается пока. Скажите пожалуйста, мне нужна максимально простая функция — половина цен в долларе, половина в евро, на выходе нужно получить цену в рубле, по своему собственному курсу — возможно ли как-то выполнить такую задумку с помощью данного модуля? Или есть более подходящие для этого решения? То есть мне не нужно подтягивать курс валют с сайта, просто необходимо задавать цену в одной валюте, а на выходе она переводилась в рубль допустим
                                                                        Дмитрий
                                                                        19 марта 2017, 21:16
                                                                        Ну, вообще, если почитать документацию, то можно увидеть сниппет CRCalc, который как раз этим и занимается.
                                                                        Ну или можно написать свой сниппет, который будет принимать значение цены, валюту, в которую нужно пересчитать и выдавать уже готовую стоимость.
                                                                        Типа такого:
                                                                        <?php
                                                                        /** @var array $scriptProperties */
                                                                        /** @var currencyrate $currencyrate */
                                                                        if (!$currencyrate = $modx->getService('currencyrate', 'currencyrate', $modx->getOption('currencyrate_core_path', null, $modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/', $scriptProperties)) {
                                                                        	return 'Could not load currencyrate class!';
                                                                        }
                                                                        if(empty($input)) {return '';}
                                                                        $list = $currencyrate->getList();
                                                                        //тут можно по-нормальному отформатировать данные
                                                                        $input = (trim(str_replace(' ','',$input)));
                                                                        if(!empty($divider)) {
                                                                        	$divider = $list[$divider];
                                                                        	$output = $currencyrate->formatPrice(($input / $divider), $format, $noZeros);
                                                                        }
                                                                        return $output;
                                                                          Dolce
                                                                          19 марта 2017, 21:17
                                                                          Уже разобрался, не увидел кнопку для обновления курса валют, оно все подтянуло в нужном формате, а там я руками вбил свой курс, спасибо!
                                                                          Dolce
                                                                          19 марта 2017, 21:16
                                                                          Разобрался, все получилось, извиняюсь!
                                                                          Dolce
                                                                          19 марта 2017, 21:30
                                                                          Еще раз извиняюсь, вопрос следом — а как получаемые значения цены скормить minishop2? Допустим в карточке товара я получаю цену таким способом:
                                                                          [[!CRcalc?
                                                                          	&input 		= `[[+price]]`
                                                                          	&multiplier 	= `USD`
                                                                          	&format 	= `[2, ".", " "]`
                                                                          	&noZeros 	= `0`
                                                                          ]]
                                                                          Цена выводится корректно, но в корзину то улетает значения свойства(TV) из карточки товара, которое указано в долларе или евро, а не то, что я калькулирую в шаблоне.
                                                                            Dolce
                                                                            20 марта 2017, 17:10
                                                                            Нашел в этой теме упоминание о плагине crMSprice, что он должен отрабатывать на событие msOnGetProductPrice, но что с ним делать дальше не ясно, в документации нет ни слова о том как преобразовывать цену по курсу и отдавать ее в ms2
                                                                              Володя
                                                                              20 марта 2017, 18:35
                                                                              которое указано в долларе или евро, а не то, что я калькулирую в шаблоне.
                                                                              естественно, то что вы на странице напишите свою цену ничего не изменит.

                                                                              Либо расширяйте класс корзины под свою логику, либо можно попробовать работать через плагины.
                                                                              Никто вам конкретно ничего не ответит, у каждого свои тараканы на сайте. Если есть время и желание изучайте код, вникайте. Нет — тогда размещайте объявление modx.pro/work/
                                                                                Dolce
                                                                                20 марта 2017, 19:15
                                                                                Благодарю. Да я не интересовался возможно такой функционал реализован, просто не описан. Спасибо за ответ, буду искать исполнителя!
                                                                              Дмитрий Храмов
                                                                              12 июня 2017, 03:54
                                                                              Скажите пож-та, такая проблема: сниппет CRcalc замечательно работает в контексте web, но в другом контексте бывает срабатывает, бывает нет. причем плейсходером [[+USD]] не выводится курс.
                                                                              Подскажите как правильно его вывести в другом конексте.
                                                                              Для каждой цены используется сначала вывод из базового контекста web в переменную, затем умножается на
                                                                              переменную курса
                                                                              //достаем курс доллара. запускается в самом начале шаблона перед <html>
                                                                              {var $USD_COURSE = $_modx->runSnippet('!CRcalc', [
                                                                                                      'input' => $_modx->getPlaceholder('+USD'),
                                                                                                      'divider' => 'RUB',
                                                                                                      ])}
                                                                              и делится dividerом на рупии уже

                                                                              {$_modx->runSnippet('!CRcalc', [
                                                                                                      'input' => $price_dol * $USD_COURSE,
                                                                                                      'divider' => 'INR',
                                                                                                  ])} INR

                                                                              Наглядно можно тут посмотреть, переключая язык:
                                                                              goakingdom.com/eng/catalog/1-vittaldas-wada-morjim.html

                                                                              Может быть есть какие-нибудь особенности с запуском сниппетов в контекстах?
                                                                              Используется Fenom
                                                                                Дмитрий Храмов
                                                                                12 июня 2017, 19:18
                                                                                webstool.ru/kursyi-valyut-s-cbr.ru-na-php.html
                                                                                вот с этим сниппетом проблем не возникло
                                                                                Сниппет для MODX — getCurRate
                                                                                if(empty($_SESSION['cbr_eur']) || empty($_SESSION['cbr_usd'])) {
                                                                                    $xml = simplexml_load_string(file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp"));
                                                                                    $json = json_encode($xml);
                                                                                    $array = json_decode($json);
                                                                                    if(empty($input)){
                                                                                        $input = 0;
                                                                                    }
                                                                                    $input = $input;
                                                                                    $eur = 0;
                                                                                    $usd = 0;
                                                                                    foreach($array->Valute as $v){
                                                                                        if(strtolower($v->CharCode) == "eur"){
                                                                                            $eur = $v->Value;
                                                                                        }
                                                                                        if(strtolower($v->CharCode) == "usd"){
                                                                                            $usd = $v->Value;
                                                                                        }
                                                                                    }
                                                                                    $_SESSION['cbr_eur'] = $eur;
                                                                                    $_SESSION['cbr_usd'] = $usd;
                                                                                }else{
                                                                                    $eur = $_SESSION['cbr_eur'];
                                                                                    $usd = $_SESSION['cbr_usd'];
                                                                                }
                                                                                if(strtolower($cur_input) == "rub"){
                                                                                    if(strtolower($cur_output) == "eur"){
                                                                                        return $input/$eur;
                                                                                    }
                                                                                    if(strtolower($cur_output) == "usd"){
                                                                                        return $input/$usd;
                                                                                    }
                                                                                }
                                                                                if(strtolower($cur_input) == "eur"){
                                                                                    if(strtolower($cur_output) == "rub"){
                                                                                        return $input*$eur;
                                                                                    }
                                                                                    if(strtolower($cur_output) == "usd"){
                                                                                        return $input*($eur/$usd);
                                                                                    }
                                                                                }
                                                                                if(strtolower($cur_input) == "usd"){
                                                                                    if(strtolower($cur_output) == "rub"){
                                                                                        return $input*$usd;
                                                                                    }
                                                                                    if(strtolower($cur_output) == "eur"){
                                                                                        return $input/($eur/$usd);
                                                                                    }
                                                                                }
                                                                                if(strtolower($cur_output) == "rubinusd"){
                                                                                    return $usd;
                                                                                }
                                                                                if(strtolower($cur_output) == "rubineur"){
                                                                                    return $eur;
                                                                                }
                                                                                return "getCurRate"; //Если что-то пошло не так
                                                                                Использование сниппета getCurRate

                                                                                [[!getCurRate?&cur_output=`rubinusd`]] — Курс USD
                                                                                [[!getCurRate?&cur_output=`rubineur`]] — Курс EUR
                                                                                [[!getCurRate?&input=`2700`&cur_input=`rub`&cur_output=`usd`]] — Переводо RUB в USD
                                                                                [[!getCurRate?&input=`132`&cur_input=`usd`&cur_output=`rub`]] — Переводо USD в RUB
                                                                                Использование инструмента вне MODX

                                                                                Тот же самый код, лишь оборачиваем его в функцию(). Показать
                                                                                <?php echo getCurRate(0, '', 'rubinusd'); ?> — Курс USD
                                                                                <?php echo getCurRate(0, '', 'rubineur'); ?> — Курс EUR
                                                                                <?php echo getCurRate(2700, 'rub', 'usd'); ?> — Переводо RUB в USD
                                                                                <?php echo getCurRate(132, 'usd', 'rub'); ?> — Переводо USD в RUB

                                                                                Допилить под собственные нужна не проблема
                                                                                  Сергей
                                                                                  23 августа 2017, 15:23
                                                                                  Как сделать округление валют?
                                                                                nekto
                                                                                26 декабря 2017, 15:11
                                                                                А можно как-то сделать «официальный курс валют» не к рублю, а к другой валюте?
                                                                                  Володя
                                                                                  26 декабря 2017, 19:23
                                                                                  можно конечно. Берете значение курса нужной валюты и делите на курс валюты к которой надо…
                                                                                  Дмитрий
                                                                                  28 сентября 2018, 14:07
                                                                                  Подскажите пожалуйста, возможно ли, что б в админке была одна валюта, например usd, а на сайте по умолчанию была выбрана другая валюта… например rub...?
                                                                                    Дмитрий
                                                                                    28 сентября 2018, 14:32
                                                                                    Зависит от вашей фантазии в первую очередь.
                                                                                    На одном сайте я делал так, что цены указываются либо в рублях, либо в евро в админке (два разных поля), а на сайте выводятся всегда в рублях, в зависимости от того, какая валюта выбрана происходит конвертирование по курсу, ну или не происходит.
                                                                                    Это очень простая типовая задача.
                                                                                      Дмитрий
                                                                                      28 сентября 2018, 15:22
                                                                                      чёт не очень хватает пока фантази… суть в чём… на сайте на данный момент все цены указаны в usd, при первом входе на сайт, если человек не выбрал валюту, ему выдается usd, а надо что б цены в админке остались те же, забивать их можно было так же в usd, а пользователю при первом входе на сайт, сразу же выдавалась цена в другой валюте… я у вас тут человек новый, надеюсь нормально объяснил) в общем основная задача в том что б не перебивая цену у всех товаров, выводить в качестве базовой валюты отличную от установленной в опциях
                                                                                        Дмитрий
                                                                                        28 сентября 2018, 15:30
                                                                                        так есть же сниппет конвертации, в чем проблема?
                                                                                          Дмитрий
                                                                                          28 сентября 2018, 15:35
                                                                                          А можно пожалуйста подробнее? Я ж говорю… человек новый… в примере посмотрел… конвертация… хорошо… только как это мне поможет?)
                                                                                            Дмитрий
                                                                                            28 сентября 2018, 15:37
                                                                                            Если до конца дня никто не поможет — вечерком отвечу, сейчас не у компьютера, не могу пример показать.
                                                                                              Дмитрий
                                                                                              28 сентября 2018, 15:38
                                                                                              Оке) спасибо Вам)
                                                                                                Дмитрий
                                                                                                28 сентября 2018, 19:57
                                                                                                Короче.
                                                                                                1. Вот админка


                                                                                                2. Вот как это выглядит на фронте



                                                                                                Я правильно понимаю, что нужно так же?
                                                                                                Вот что нужно сделать:
                                                                                                В чанке msProductContent сделать что-то типа этого (если вообще минишоп используется)



                                                                                                Сниппет @FILE:snippets/currConverter.php можно заменить на CrCalc — это тоже самое, только я кое-что для себя правил.

                                                                                                Ну вот и всё — цены становятся в нужной валюте. Изи же.
                                                                                                А вот если надо передать цену в рублях дальше в корзину, то об этом я могу рассказать в следующей серии нашего треда комментариев
                                                                                                  Дмитрий
                                                                                                  29 сентября 2018, 11:20
                                                                                                  Спасибо большое) буду пробовать
                                                                                    Михаил
                                                                                    24 октября 2018, 17:05
                                                                                    Возможно глупый вопрос, но найти нигде не могу,
                                                                                    Установил дополнение, вывод идет [[++USD]] руб. — выводит 65,3101, как сделать что бы вывод был до 2-х знаков после запятой?
                                                                                    Нужен только вывод курса, без конвертера
                                                                                      Кирилл Бакулин
                                                                                      20 ноября 2018, 12:20
                                                                                      Почему вызов CRcalc через $modx->runSnippet возвращает пустую строку?
                                                                                        Ксения
                                                                                        20 ноября 2018, 20:38
                                                                                        После установки окно с курсами валют пустое. Добавить наименования \ коды не даёт modx последний, php7.2
                                                                                          Эдуард
                                                                                          26 ноября 2018, 16:03
                                                                                          Аналогично, после установки компонента, не получается добавить ни одну валюту (
                                                                                          Сайт типичный, никаких особых плагинов не установлено.
                                                                                          MODX 2.6.5 PHP 7.1
                                                                                            Эдуард
                                                                                            26 ноября 2018, 16:18
                                                                                            Сейчас проверил, в базу валюты добавляются, но почему-то не выводяться в гриде Ext JS
                                                                                              DeHuCkA
                                                                                              21 июня 2019, 01:10
                                                                                              Вопрос решили? Ситуация аналогичная
                                                                                          Zulya
                                                                                          03 апреля 2019, 11:34
                                                                                          Здравствуйте.
                                                                                          После каждого обновления курсов по крону, в хостинге создаются вот такие файлы

                                                                                          Как настроить крон чтобы такие файлы не создавались в хостинге?
                                                                                          В планировщике указана такая ссылка
                                                                                          wget https://site.ru/assets/components/currencyrate/web-connector.php?password=1234567890
                                                                                            Zulya
                                                                                            05 апреля 2019, 19:44
                                                                                            Здравствуйте. Кто-нибудь может ответить?
                                                                                              SEQUEL.ONE
                                                                                              06 апреля 2019, 02:38
                                                                                              Так wget значит работает) Это команда для скачивания файлов в линуксах. Скорее всего вместо wget вам нужно указать php, чтобы скрипт исполнялся в кроне. Тоесть так:

                                                                                              php https://site.ru/assets/components/currencyrate/web-connector.php?password=1234567890
                                                                                            Кирилл
                                                                                            11 февраля 2020, 15:06
                                                                                            Нельзя поменять курс или коэффициент вручную. prnt.sc/r0orfw
                                                                                            Кто может помочь разобраться с этим? Пишите в скайп manager-diweb.by или телеграм kirill_ivanov_96
                                                                                              R2m0x94 (Vasily)
                                                                                              01 июня 2020, 12:58
                                                                                              Аналогично, такая же проблема с ошибкой 'currencyrate_err_ae', как-то удалось решить?
                                                                                              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                                                              150