[CurrencyRate] - курс валют
Хочу представить вам компонент [CurrencyRate] — информация о курсах иностранных валют по отношению к рублю, опубликованная на официальном сайте Банка России в сети Интернет.
По моему тут все просто и понятно. Установили компонент — запросили список валют. Для регулярного обновления в комплекте скрипт для cron.
Все курсы валют доступны по плейсходеру [[++код_валюты]]
например:
В комплекте еще сниппет для расчета цен в указанной валюте относительно значения заданного в админке.
пример
Сниппет 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
(1$ равен 61.15 руб)
Перевод RUB в USD
(1руб равен 0.02$)
Спасибо за внимание.
Пакет доступен в репо modstore на бесплатной основе.
проект на гитхаб — github.com/vgrish/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
Поблагодарить автора
Отправить деньги
Комментарии: 150
[[++USD]]
почему так? ведь обычно с двойным плюсом вызываются системные параметры.
Предположу, что компонент добавляет данные в системную настройку.
у меня на одном сайте был велосипед и он выставлял валюты в [[+USD]] и я подумал что возможно у кого то тоже так… ну и чтоб не затереть решил использовать ++ и все…
Актуально =)
Волна пока идёт… вспомним «Интерстеллар»
Волна пока идёт… вспомним «Интерстеллар»
А как cron`ом здесь воспользоваться? Просто обращаться по пути где он лежит (в core/components/currencyrate/cron/get_cr.php) или нужно код переносить?
как лежит, так и вызывайте…
Можете перенести если вам так удобнее, поправьте только путь к index.php
Можете перенести если вам так удобнее, поправьте только путь к index.php
А можете уточнить какая команда для крона получается?
Что то типо этого?
curl -s mysite.ru/core/components/currencyrate/cron/get_cr.php
Что то типо этого?
curl -s mysite.ru/core/components/currencyrate/cron/get_cr.php
через curl cron не пользуюсь, но думаю так у вас не будет работать.
Чтоб через curl работало нужно в assets файлик положить.
Чтоб через curl работало нужно в assets файлик положить.
А как правильно крон прописать тогда? Можно пример команды?
Если на хостинге не закрыта директория core, то можно так:
Но эту директорию принято закрывать, да и выполняться скрипт может долго, если удалённый сервер не отвечает, так что лучше прописать его в cron.
Конфиг крона вызывается в консоли сервера так:
whet http://mysite.com/core/components/currencyrate/cron/get_cr.php -O /dev/null
Но эту директорию принято закрывать, да и выполняться скрипт может долго, если удалённый сервер не отвечает, так что лучше прописать его в cron.
Конфиг крона вызывается в консоли сервера так:
crontab -e
У меня VPS. Стоит VestaCP контрольная панелька. Там есть раздел крон где я могу указать команду и время. Что в этом случае туда стоит написать? И папка core закрыта.
сейчас добавлю скрипт для обновления цен с фронта…
вызывать так
http://sitename.ru/assets/components/currencyrate/web-connector.php?password=12345
пароль выставляете в настройках компонента. Сделал на всякий случай чтоб вас кто-то посторонний не «мучал»…
А где взять этот файл? Или вы еще не обновили?
компонент обновил и передал в SD. Так что скоро выложат.
У кого выдает
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);
я новичок.
добавил в cron, не работает.
через консоль на убунте попробовал — говорит такое:
добавил в 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.
подскажите.
а статус сайта? Опубликован? потому как вам выдает 401 Not Authorized
сайт работает, через браузер открываю эту ссылку — в настройках меняется дата обновления.
Сейчас попробовал выйти из админки и открыть заново эту ссыль и получил в браузере:
Сейчас попробовал выйти из админки и открыть заново эту ссыль и получил в браузере:
{"success":false,"code":401}
ага. понял свой косяк.
завтра поправлю, а пока руками вставь в начало assets/components/currencyrate/web-connector.php
завтра поправлю, а пока руками вставь в начало assets/components/currencyrate/web-connector.php
if(!isset($_REQUEST['ctx']) OR !in_array($_REQUEST['ctx'], array('web'))){
$_REQUEST['ctx'] = 'web';
}
вставил перед
Теперь буду разбираться, работает ли у меня на ISPConfig cron или нет =)
Спасибо;)
// For debug
, все завелось.Теперь буду разбираться, работает ли у меня на ISPConfig cron или нет =)
Спасибо;)
пожалуйста )))
У меня крон не работает. Выдает
Fatal error: Undefined class constant 'LOG_LEVEL_ERROR' in /home/..../public_html/core/model/modx/error/moderrorhandler.class.php on line 111
Fatal error: Undefined class constant 'LOG_LEVEL_ERROR' in /home/..../public_html/core/model/modx/error/moderrorhandler.class.php on line 111
стукни в скайп если есть возможность vgrish_vgrish
Подскажите, как решить проблему, постоянно нужно очищать кэш всего сайта, что бы изменились данные.
Чанк добавляю в шаблон таким образом:
Чанк добавляю в шаблон таким образом:
[[!название_чанка]]
А вот содержание чанка: <div>Курсы валют
<span>Доллар: [[++USD]]</span>
<span>Евро: [[++EUR]]</span>
</div>
да, я понял про что ты. Нужно доработать будет кэширование.
В следующем году поправлю. Раньше не получится...)))
В следующем году поправлю. Раньше не получится...)))
Спасибо :)
Подскажите ваш e-mail, хотел бы предложить вам идею для нового модуля под modx, он чем-то похож на данный модуль :)
Подскажите ваш e-mail, хотел бы предложить вам идею для нового модуля под modx, он чем-то похож на данный модуль :)
vgrish@gmail.com
Исправил, ждите в репо…
Я создал плагин для обновления раз в день и в нём после обновления очищаю кэш так:
$cacheOptions = array(xPDO::OPT_CACHE_KEY => 'crlist');
$modx->getCacheManager()->delete('crlist', $cacheOptions);
кэеширование давно уже исправлено, кэш чистится при обновлении…
у меня не чистится без этого кода. Для обновления использую плагин https://modx.pro/components/4464-currencyrate-currency-exchange-rate/#comment-38471 а не кнопку Обновить в самом компоненте. Возможно в этом дело.
Г
Есть сайт на первом минишопе и с оплатой через робокассу. Подскажите, где нужно подставить умножение на глобальную переменную, чтобы в робокассу передавалась правильная цена при оплате.
скорее всего можно написать плагин на событие msOnOrderCreate
в нем получаете корзину->сумму покупки и умножаете на текущий курс и сохраняете…
в нем получаете корзину->сумму покупки и умножаете на текущий курс и сохраняете…
можно по подробней, пожалуйста
как включить плейсхолдеры в чанках отправляемых писем 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]]
зачем так мудрить?
есть сниппет CRcalc
просто вставьте в чанк например
есть сниппет CRcalc
просто вставьте в чанк например
[[!CRcalc? &input=`1` &multiplier=`USD`]]
Подскажите пожалуйста!!! Есть tv поле price, где указана цена в рублях. Вызываю сниппет [[!CRcalc? ÷r=`USD` &input=`[[*price]]`]], но цену не пересчитывает. Что делаю не так?
а что то выводит вообще? или пусто?
возможно вы TV не так получаете…
возможно вы TV не так получаете…
Спасибо. Разобралась уже
А можно использовать это дополнение для вытягивания курса не с российского банка, а с национального банка другой страны, например Молдовы?
Нужно использовать настройку Адрес сервиса — url для запроса курса валют?
Нужно использовать настройку Адрес сервиса — url для запроса курса валют?
нет, настройка только для возможной корректировки текущего адреса центробанка…
структура xml другого банка думаю совершенно другая.
вы можете сделать по аналогии…
структура xml другого банка думаю совершенно другая.
вы можете сделать по аналогии…
Подскажи пожалуйста, как можно обновить курс валют из сниппета. Хочу сделать обновление курса раз в день без использования крона.
достаточно посмотреть в файлик крона
$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();
мда, логично… затупил с утра. В общем, чтобы обновлять раз в день без крона можно создать плагин на событие 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;
совершенно верно
Потенциальная ошибка. Лучше сравнивать полную дату.
Ты про то, что если в течении месяца на сайте не будет посетителя, а потом бац и кто-то зашел в день последнего обновления месяц назад? Поправить не сложно, хотя имхо вероятность такого события очень мала. Даже если постетителей на сайте действительно не бывает, то поисковые боты постоянно будут заходить ;)
Привет!
Поставил компонент, зашел в меню Приложения — таблица со списком валют пустая.
Нажал кнопку «Обновить курс», все зависло. Открыл консоль — там вот так:
Попробовал туда руками добавить строчку — все равно зависает при обновлении списка в админке.
Некоторое время назад ставил на другом сайте — все работало, в списке валют прям после установки компонента было несколько строк.
ЧЯДНТ?
Поставил компонент, зашел в меню Приложения — таблица со списком валют пустая.
Нажал кнопку «Обновить курс», все зависло. Открыл консоль — там вот так:
{«success»:false,«message»:«pas_save_setting_err»,«total»:1,«data»:[],«object»:[]}В таблице modx_currency_rate_list пусто.
Попробовал туда руками добавить строчку — все равно зависает при обновлении списка в админке.
Некоторое время назад ставил на другом сайте — все работало, в списке валют прям после установки компонента было несколько строк.
ЧЯДНТ?
www.cbr.ru/ не отвечал возможно.
Попробуй еще раз
Попробуй еще раз
Неа, сейчас все тоже самое… Может я что-то упустил?..
Нет, там нечему ломаться, кроме как цбрф… Он не хочет тебе отвечать… Может тебя забанили? )))
Блин, он походу правда не работал)) вот ведь жеж бывает. Заработало. Спасибо, хороший компонент)
пожалуйста!
Подскажите:
* как сделать округление до сотых, десятых\
* как реализовать пункт изменение курса по сравнению с предыдущим днем?
* как сделать округление до сотых, десятых\
* как реализовать пункт изменение курса по сравнению с предыдущим днем?
— непонятно где именно вы хотите округлить?
— писать историю изменений валюты
— писать историю изменений валюты
Чтоб было не USD-49,5935 а USD-49,59
— добавил Российскую валюту — Рубль
— добавил статус активна/ неактивна
— добавил rank и сортировку
— добавил сниппет для вывода select c валютами
проект на гитхаб — github.com/vgrish/currencyrate
— добавил статус активна/ неактивна
— добавил rank и сортировку
— добавил сниппет для вывода select c валютами
проект на гитхаб — github.com/vgrish/currencyrate
Пробую сделать мультиязычность по твоей инструкции. В каталоге цены меняются при переключении валюты, но в плейсхолдер [[+old_price]] выводится цена в основной валюте… Это можно как нибудь исправить? Так как поле со старой ценой используется и его отключить нельзя.
Добрый день.
а как вывести селект с валютами?
ну или вообще переключить валюту на сайте с фронтенда?
а как вывести селект с валютами?
ну или вообще переключить валюту на сайте с фронтенда?
Здравствуйте, было бы не плохо, если бы можно было выводить на сайт дату обновления в нужном формате. Сейчас работает [[++currencyrate_last_date]] такая конструкция, но выдается в виде 2015-05-31 13:18:27. Не знаю, закладывалось ли это разработчиками для фронтэнда по умолчанию. Было бы хорошо, если бы можно было комбинировать дату в виде [[++currencyrate_last_date &format=`d.m.Y`]]
К сожалению у этого компонента нету истории изменения курса. На данный момент пользуюсь вот этим скриптом
Скажите, насколько он кривой? И я так понимаю, что надо сделать кэшируемость + крон? Я просто в пхп только начинаю разбираться. Автор если направишь меня в нужное направление, то хотел бы помочь усовершенствовать твой компонент на основе этого. Я знаю, что ты это сам можешь, но я хотел бы научиться)
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 }
Скажите, насколько он кривой? И я так понимаю, что надо сделать кэшируемость + крон? Я просто в пхп только начинаю разбираться. Автор если направишь меня в нужное направление, то хотел бы помочь усовершенствовать твой компонент на основе этого. Я знаю, что ты это сам можешь, но я хотел бы научиться)
смотриш тут github.com/vgrish/currencyrate
делаешь нужные тебе изменения/улучшения…
Разбирайся самостоятельно и все получится.
делаешь нужные тебе изменения/улучшения…
Разбирайся самостоятельно и все получится.
[[CRcalc? &input=`[[+total_cost]]` &multiplier=`USD`]]
Почему когда [[+total_cost]] больше 1000$ отображается курс долара а не расчет формулы?
Почему когда [[+total_cost]] больше 1000$ отображается курс долара а не расчет формулы?
Сам не мог понять в чем причина. Просто надо изменить формат вывода цен в системных настройках minishop2 -> Товар (в поле «Формат цен» убрать разделитель тысяч)
Всем привет. Поставил currencyrate при попытке обновить курс из админки зависание с надписью «загружается» и
в логе ошибка
в логе ошибка
(ERROR @ /assets/components/currencyrate/connector.php) [CR:Error] NO loadRate()
Куда посмотреть?
Блин третий день не могу получить курсы!!!
Может в бане? где посмотреть?
{"success":false,"message":"pas_save_setting_err","total":1,"data":[],"object":[]}
Может в бане? где посмотреть?
отчего то оно не работает… github.com/vgrish/currencyrate/blob/master/core/components/currencyrate/model/currencyrate/currencyrate.class.php#L135
Возможно в бане…
Возможно в бане…
хм, а как баню посмотреть? кто нить знает?
День добрый!
Можно ли добавить свою валюту в список (например, BYR)? Просто, без обновления её значения с сайта ЦБР.
UPD: Вопрос снимается сразу же после установки компонента. Список валют впечатляет.
Можно ли добавить свою валюту в список (например, BYR)? Просто, без обновления её значения с сайта ЦБР.
UPD: Вопрос снимается сразу же после установки компонента. Список валют впечатляет.
Для пересчёта цены в зависимости от выбранной валюты автор добавил в сборку плагин crMSprice. К сожалению по-умолчанию на него не навешено вообще никакого события.
Подскажите, как заставить его пересчитывать цену при выборе валюты из списка, выводимого сниппетом CRlist?
Подскажите, как заставить его пересчитывать цену при выборе валюты из списка, выводимого сниппетом CRlist?
Володя подсказал, что необходимо плагин crMSprice должен срабатывать на событие msOnGetProductPrice.
версия 1.0.5
Добавлено окно создания и редактирования курса. Теперь можно создавать свои валюты.
Добавлено окно создания и редактирования курса. Теперь можно создавать свои валюты.
Добрый день! Не могу найти в репозитории данный компонент(
MODX Revolution 2.2.15-pl (traditional)
Версия MODX от 2.3
Ок спасибо
Здравствуйте! Подскажите пожалуйста, курс валют в админке нужно в ручную обновлять?
Добрый вечер.
Для регулярного обновления в комплекте скрипт для cron.а можно и вручную в админке.
ммм… понятно, видимо не разобрался, у меня не обновляется автоматически… спасибо!
— Add active combo — Что это?
Добрый день использую ваш модуль.
В магазине реализовано не сколько валют и переключение между ними, работает все отлично, но столкнулся с проблемой оплаты. При оплате товара цену берет правильно, но валюту берет ту которая у меня выставлена в настройках «Предлагаемая валюта платежа». Вообщем вопрос такой, можно передать в «Предлагаемая валюта платежа» валюту которую выбрал пользователь
В магазине реализовано не сколько валют и переключение между ними, работает все отлично, но столкнулся с проблемой оплаты. При оплате товара цену берет правильно, но валюту берет ту которая у меня выставлена в настройках «Предлагаемая валюта платежа». Вообщем вопрос такой, можно передать в «Предлагаемая валюта платежа» валюту которую выбрал пользователь
Этот код я как понимаю берет валюту
$row['selected'] = $row['charcode'] == $selected ? 'selected' : '';
Этот код из системы оплаты который берет валюту из настроек.,'currency' => $this->modx->getOption('ms2_payment_paypal_currency', null, 'USD')
Вообщем каким методом мне передавать в массив «currency» валюту которая включена сейчас у пользователя??
Володя, подскажи как сделать фильтр из CRlist. К примеру:
[[!CRlist:is=`RUB`:then=`[[+price]] руб`:else=``]]
[[!CRlist:is=`RUB`:then=`[[+price]] руб`:else=``]]
а можно как-то брать курсы с сайта? currencyrate.today
Доброго времени суток! у меня есть три поля с ценой одно поле для дулера, второе для евро а третье с рублями, каким образом можно реализовать добавление товара в корзину с этими тремя ценами, причем может быть заполнена только одна и пересчет должен идти в рубли
вот я слепой) сделал все
Что-то стали валиться ошибки при попытке обновления курса:
[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 доступен.
у них бывает такое, отдают xml через редирект. В последней версии я просто добавил вывод ошибки. Ато можно было нажимать обновить а обновления и нет.
Добрый день!
Подскажите как ваш курс умножить на число?
Спасибо!
Подскажите как ваш курс умножить на число?
Спасибо!
пример
Сниппет 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
(1$ равен 61.15 руб)
Перевод RUB в USD
(1руб равен 0.02$)
Сниппет 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$)
а если я хочу приплюсовать к курсу как это сделать?
можно использовать поле коэф-т для прибавки
joxi.ru/1A5Ro1DSnKPn4r
или же напишите свой сниппет с вашей логикой.
joxi.ru/1A5Ro1DSnKPn4r
или же напишите свой сниппет с вашей логикой.
все доступные валюты создаются с при обновлении валют, они по умолчанию неактивны.
Переключите комбик справа и увидите их.
Переключите комбик справа и увидите их.
Спасибо, получилось.
Только в наименовании теперь вопросы вместо названий
Только в наименовании теперь вопросы вместо названий
проверьте бд кодировку
utf8
Очень хороший модуль, вот прям то что нужно. Но жалко не работает. Ну точнее работает, но только с USD.
Вот так работает:
А вот так уже нет:
Включение\выключение валюты в настройках на что влияет? Пробовал и так и сяк, как тольк оставишь валюту не USD то просто тупо умножает на 1. Пробовал вывести курс евро, вывел, но показывает 1)))) Смотрел в списке валют, там нормальный курс — 63 рубля… Как быть?
Вот так работает:
[[!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 рубля… Как быть?
Попробуйте повторить ситуацию на тестовом сайте и скиньте доступы в личку, посмотрю в чем дело.
Спасибо!
Спасибо!
Разобрался, оказывается в список валют загадочным образом затесалось ещё одно евро, с курсом 1. Странно… Я его удалил, и все стало нормально. Спасибо большое за помощь, модуль классный. Осталось разобраться, как обновление курса валют к крон добавить
Здравствуйте, а подскажете, как сделать так, что бы фильтр msearch2 сортировало тоже по конвертированной валюте. т.е. все цены конвертирует нормально, а в фильтрах все равно старая цена, буду благодарен за ответ. либо направление куда копать.
Весь вчерашний вечер и всё утро пытаюсь обновить курс валют через опцию в админке свежеустановленного компонента, но валюты не подгружаются!
Такая же ситуация и на тестовом сайте modhost.
По ссылке www.cbr.ru/scripts/XML_daily.asp?date_req= открываются все валюты в XML.
В логах пусто.
Что это может быть? Мне и дальше пытаться обновлять курс пока не заработает, или проблема в другом?
Такая же ситуация и на тестовом сайте modhost.
По ссылке www.cbr.ru/scripts/XML_daily.asp?date_req= открываются все валюты в XML.
В логах пусто.
Что это может быть? Мне и дальше пытаться обновлять курс пока не заработает, или проблема в другом?
Скиньте доступы на тестовый сайт в личку, посмотрю в чем дело.
Спасибо!
Спасибо!
Спасибо, моя невнимательность была!
А как перевести EUR в USD, если цены записаны в EUR?
А как перевести EUR в USD, если цены записаны в EUR?
Валюту магазина в системных настройках (currencyrate_currency) указал EUR, но конвертирует всё равно в рубли…
То есть несмотря на ту системную настройку, следующий код:
Мне рубли вообще не нужны, как переводить иностранные валюты одну в другую?
То есть несмотря на ту системную настройку, следующий код:
{'!CRcalc'|snippet:[
'input' => 1,
'multiplier' => 'USD',
]}
выдаёт 59.95, что значит в 1 USD находится 59.95 рублей. Мне рубли вообще не нужны, как переводить иностранные валюты одну в другую?
{'!CRcalc'|snippet:[
'input' => $_modx->getPlaceholder('+EUR'),
'divider' => 'USD',
]}
Супер, спасибо, всё работает!
Чтобы работало для динамической цены использую так:
Чтобы работало для динамической цены использую так:
{'!CRcalc'|snippet:[
'input' => $_modx->getPlaceholder('+EUR') * $_modx->resource.price,
'divider' => 'USD',
]}
Добрый день, интересует возможность вывода плейсхолдеров валют [[++код_валюты]] в чанке Fenom. Чтото вроде {$код_валюты} или как его получить в чанке. Заранее благодарен.
$_modx->getPlaceholder('+EUR')
— в комменте выше есть ответ на ваш вопрос
Благодарю
Привет всем.
У нас на сайте стоял этот компонент. У нас Modx Evolution 1.0.12. Компонент исчез и нам надо заново ставить. В инструкции там «Система» → «Управление пакетами». У нас такого нет. Вы, случайно, не можете подсказать как поставить компонент на нашей версии. Может через менеджер модулей?
Спасибо!
У нас на сайте стоял этот компонент. У нас Modx Evolution 1.0.12. Компонент исчез и нам надо заново ставить. В инструкции там «Система» → «Управление пакетами». У нас такого нет. Вы, случайно, не можете подсказать как поставить компонент на нашей версии. Может через менеджер модулей?
Спасибо!
Modx Evolution 1.0.12 — ни как с этим компонентом не совместим
По Evolution вам скорее на modx.im посодействуют. тут только Revolution.
По Evolution вам скорее на modx.im посодействуют. тут только Revolution.
Видимо меня дезинформировали. Спасибо!
Здравствуйте. Возможно вопрос прозвучит глупо, я вот ковыряюсь уже пол дня и ничего у меня не получается пока. Скажите пожалуйста, мне нужна максимально простая функция — половина цен в долларе, половина в евро, на выходе нужно получить цену в рубле, по своему собственному курсу — возможно ли как-то выполнить такую задумку с помощью данного модуля? Или есть более подходящие для этого решения? То есть мне не нужно подтягивать курс валют с сайта, просто необходимо задавать цену в одной валюте, а на выходе она переводилась в рубль допустим
Ну, вообще, если почитать документацию, то можно увидеть сниппет 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;
Уже разобрался, не увидел кнопку для обновления курса валют, оно все подтянуло в нужном формате, а там я руками вбил свой курс, спасибо!
Разобрался, все получилось, извиняюсь!
Еще раз извиняюсь, вопрос следом — а как получаемые значения цены скормить minishop2? Допустим в карточке товара я получаю цену таким способом:
[[!CRcalc?
&input = `[[+price]]`
&multiplier = `USD`
&format = `[2, ".", " "]`
&noZeros = `0`
]]
Цена выводится корректно, но в корзину то улетает значения свойства(TV) из карточки товара, которое указано в долларе или евро, а не то, что я калькулирую в шаблоне.
Нашел в этой теме упоминание о плагине crMSprice, что он должен отрабатывать на событие msOnGetProductPrice, но что с ним делать дальше не ясно, в документации нет ни слова о том как преобразовывать цену по курсу и отдавать ее в ms2
которое указано в долларе или евро, а не то, что я калькулирую в шаблоне.естественно, то что вы на странице напишите свою цену ничего не изменит.
Либо расширяйте класс корзины под свою логику, либо можно попробовать работать через плагины.
Никто вам конкретно ничего не ответит, у каждого свои тараканы на сайте. Если есть время и желание изучайте код, вникайте. Нет — тогда размещайте объявление modx.pro/work/
Благодарю. Да я не интересовался возможно такой функционал реализован, просто не описан. Спасибо за ответ, буду искать исполнителя!
Скажите пож-та, такая проблема: сниппет CRcalc замечательно работает в контексте web, но в другом контексте бывает срабатывает, бывает нет. причем плейсходером [[+USD]] не выводится курс.
Подскажите как правильно его вывести в другом конексте.
Для каждой цены используется сначала вывод из базового контекста web в переменную, затем умножается на
переменную курса
Наглядно можно тут посмотреть, переключая язык:
goakingdom.com/eng/catalog/1-vittaldas-wada-morjim.html
Может быть есть какие-нибудь особенности с запуском сниппетов в контекстах?
Используется Fenom
Подскажите как правильно его вывести в другом конексте.
Для каждой цены используется сначала вывод из базового контекста 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
webstool.ru/kursyi-valyut-s-cbr.ru-na-php.html
вот с этим сниппетом проблем не возникло
Сниппет для MODX — 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
Допилить под собственные нужна не проблема
вот с этим сниппетом проблем не возникло
Сниппет для 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
Допилить под собственные нужна не проблема
Как сделать округление валют?
А можно как-то сделать «официальный курс валют» не к рублю, а к другой валюте?
можно конечно. Берете значение курса нужной валюты и делите на курс валюты к которой надо…
Подскажите пожалуйста, возможно ли, что б в админке была одна валюта, например usd, а на сайте по умолчанию была выбрана другая валюта… например rub...?
Зависит от вашей фантазии в первую очередь.
На одном сайте я делал так, что цены указываются либо в рублях, либо в евро в админке (два разных поля), а на сайте выводятся всегда в рублях, в зависимости от того, какая валюта выбрана происходит конвертирование по курсу, ну или не происходит.
Это очень простая типовая задача.
На одном сайте я делал так, что цены указываются либо в рублях, либо в евро в админке (два разных поля), а на сайте выводятся всегда в рублях, в зависимости от того, какая валюта выбрана происходит конвертирование по курсу, ну или не происходит.
Это очень простая типовая задача.
чёт не очень хватает пока фантази… суть в чём… на сайте на данный момент все цены указаны в usd, при первом входе на сайт, если человек не выбрал валюту, ему выдается usd, а надо что б цены в админке остались те же, забивать их можно было так же в usd, а пользователю при первом входе на сайт, сразу же выдавалась цена в другой валюте… я у вас тут человек новый, надеюсь нормально объяснил) в общем основная задача в том что б не перебивая цену у всех товаров, выводить в качестве базовой валюты отличную от установленной в опциях
так есть же сниппет конвертации, в чем проблема?
А можно пожалуйста подробнее? Я ж говорю… человек новый… в примере посмотрел… конвертация… хорошо… только как это мне поможет?)
Если до конца дня никто не поможет — вечерком отвечу, сейчас не у компьютера, не могу пример показать.
Оке) спасибо Вам)
Короче.
1. Вот админка
2. Вот как это выглядит на фронте
Я правильно понимаю, что нужно так же?
Вот что нужно сделать:
В чанке msProductContent сделать что-то типа этого (если вообще минишоп используется)
Сниппет @FILE:snippets/currConverter.php можно заменить на CrCalc — это тоже самое, только я кое-что для себя правил.
Ну вот и всё — цены становятся в нужной валюте. Изи же.
А вот если надо передать цену в рублях дальше в корзину, то об этом я могу рассказать в следующей серии нашего треда комментариев
1. Вот админка
2. Вот как это выглядит на фронте
Я правильно понимаю, что нужно так же?
Вот что нужно сделать:
В чанке msProductContent сделать что-то типа этого (если вообще минишоп используется)
Сниппет @FILE:snippets/currConverter.php можно заменить на CrCalc — это тоже самое, только я кое-что для себя правил.
Ну вот и всё — цены становятся в нужной валюте. Изи же.
А вот если надо передать цену в рублях дальше в корзину, то об этом я могу рассказать в следующей серии нашего треда комментариев
Спасибо большое) буду пробовать
Возможно глупый вопрос, но найти нигде не могу,
Установил дополнение, вывод идет [[++USD]] руб. — выводит 65,3101, как сделать что бы вывод был до 2-х знаков после запятой?
Нужен только вывод курса, без конвертера
Установил дополнение, вывод идет [[++USD]] руб. — выводит 65,3101, как сделать что бы вывод был до 2-х знаков после запятой?
Нужен только вывод курса, без конвертера
Почему вызов CRcalc через $modx->runSnippet возвращает пустую строку?
После установки окно с курсами валют пустое. Добавить наименования \ коды не даёт modx последний, php7.2
Аналогично, после установки компонента, не получается добавить ни одну валюту (
Сайт типичный, никаких особых плагинов не установлено.
MODX 2.6.5 PHP 7.1
Сайт типичный, никаких особых плагинов не установлено.
MODX 2.6.5 PHP 7.1
Сейчас проверил, в базу валюты добавляются, но почему-то не выводяться в гриде Ext JS
Вопрос решили? Ситуация аналогичная
Здравствуйте.
После каждого обновления курсов по крону, в хостинге создаются вот такие файлы
Как настроить крон чтобы такие файлы не создавались в хостинге?
В планировщике указана такая ссылка
После каждого обновления курсов по крону, в хостинге создаются вот такие файлы
Как настроить крон чтобы такие файлы не создавались в хостинге?
В планировщике указана такая ссылка
wget https://site.ru/assets/components/currencyrate/web-connector.php?password=1234567890
Здравствуйте. Кто-нибудь может ответить?
Так wget значит работает) Это команда для скачивания файлов в линуксах. Скорее всего вместо wget вам нужно указать php, чтобы скрипт исполнялся в кроне. Тоесть так:
php https://site.ru/assets/components/currencyrate/web-connector.php?password=1234567890
Нельзя поменять курс или коэффициент вручную. prnt.sc/r0orfw
Кто может помочь разобраться с этим? Пишите в скайп manager-diweb.by или телеграм kirill_ivanov_96
Кто может помочь разобраться с этим? Пишите в скайп manager-diweb.by или телеграм kirill_ivanov_96
Аналогично, такая же проблема с ошибкой 'currencyrate_err_ae', как-то удалось решить?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.