[CurrencyRate] - обновление стоимости по курсу
Пакет [CurrencyRate] получает информацию о курсах иностранных валют по отношению к рублю, опубликованная на официальном сайте Банка России в сети Интернет.
Публикую небольшое решение для обновления стоимости продуктов по курсу.
— добавить системную настройку currencyrate_button_prices_update булевого типа.
на странице пакета появится кнопка — обновить цены
— процессор на обновление цен
по умолчанию он пуст, кому необходимо добавляем код отсюда
gist.github.com/vgrish/a82dd144388ea830462b
— плагин на сохрание продукта, код тут
gist.github.com/vgrish/c1fd26f9e28eab228cc4
ps. Данный код написан для двух валют — eur, usd. Поля в базе соответственно price_eur,price_usd.
Публикую небольшое решение для обновления стоимости продуктов по курсу.
— добавить системную настройку currencyrate_button_prices_update булевого типа.
на странице пакета появится кнопка — обновить цены
— процессор на обновление цен
по умолчанию он пуст, кому необходимо добавляем код отсюда
gist.github.com/vgrish/a82dd144388ea830462b
— плагин на сохрание продукта, код тут
gist.github.com/vgrish/c1fd26f9e28eab228cc4
ps. Данный код написан для двух валют — eur, usd. Поля в базе соответственно price_eur,price_usd.
Поблагодарить автора
Отправить деньги
Комментарии: 34
Из какого поля он берет цену в у.е.? Есть часть товаров в рублях, часть в долларах. Будет работать?
именно для этого, когда часть продуктов забита в разных ценах.
исходные данные:
основная стоимость продукта — родное поле price
стоимость продукта в eur — поле price_eur
стоимость продукта в usd — поле price_usd
у части продуктов стоимость в eur и usd, вот для них и будет вестить расчет стоимости.
плагин для обновления основной стоимости товара по курсу при редактирования товара, процессор для обновления цен у всех товаров разом.
исходные данные:
основная стоимость продукта — родное поле price
стоимость продукта в eur — поле price_eur
стоимость продукта в usd — поле price_usd
у части продуктов стоимость в eur и usd, вот для них и будет вестить расчет стоимости.
плагин для обновления основной стоимости товара по курсу при редактирования товара, процессор для обновления цен у всех товаров разом.
Спасибо.
Работает только с рублями? С тенге не заведётся?
если есть стоимость в рублях и есть отношение тенге к рублю как получить стоимость в тенге?
Наверно нужно стоимость в рублях поделить на это отношение…
С учетом того что можно добавлять свои валюты сделать можно все что угодно.
Наверно нужно стоимость в рублях поделить на это отношение…
С учетом того что можно добавлять свои валюты сделать можно все что угодно.
+
Вроде все сделал по инструкции, но срабатывает только плагин на сохранение продукта. А нажатие на кнопку «Обновить цены» ни к чему не приводит, кроме как к появлению сообщения, что валюта обновилась. В БД также никаких изменений. Нужные валюты включены, поля созданы с помощью инструкции http://goo.gl/y955sT. В логах ModX также пусто. Кто-нибудь может подсказать куда копать?
вот эту строчку закомментируйте github.com/vgrish/currencyrate/blob/master/core/components/currencyrate/processors/mgr/valute/updateprices.class.php#L17
Эта строчка у меня изначально отсутствовала (как и здесь). Поэтому дело не в ней. Но в чем — понять не могу…
а так правильно, у вас опции в другой таблице лежат… Значит нужно подправить нужную таблицу github.com/vgrish/currencyrate/blob/master/core/components/currencyrate/processors/mgr/valute/updateprices.class.php#L31
Спасибо! Проблема была именно в этом. Добавил нужное поле в основную таблицу свойств товаров и все заработало как надо :)
Денис, а что вы конкретно сделали, и какие параметры для price_usd вы использовали?
Добавил новое свойство товара по этой инструкции. А параметры у поля price_usd такие же, как и у поля price.
Спасибо за ответ, здесь я описал проблему — modx.pro/help/7679/. В БД у меня тоже все идентично оригинальному price. У меня видимо ошибка в msproductdata.map.inc.php или msproductdata.js. Если у вас будет возможность глянуть их точный код, думаю это помогло бы.
— процессор на обновление ценЯ понимаю он уже не пуст а добавлен в пакет по умолчанию?
по умолчанию он пуст, кому необходимо добавляем код отсюда
— плагин на сохрание продукта, код тутПлагин же похоже не добавлен, нужно самому добавлять, я прав?
Поля в базе соответственно price_eur,price_usd.Это в какой талице? Дополнительные поля (ТВ) или поля товара?
Как их добавлять? По ссылкам в комментариях выше или сработают опции товаров:
Я понимаю он уже не пуст а добавлен в пакет по умолчанию?добавлен, там заглушку надо только закомментировать
Плагин же похоже не добавлен, нужно самому добавлять, я прав?файлик плангина в самом пакете лежит, но создать его нужно самостоятельно.
Это в какой талице? Дополнительные поля (ТВ) или поля товара?в msProductData, вы можете оперировать какими угодно таблицами, просто модифицируйте тогда плагин и процессор под себя.
Упс, промахнулся комментарием. Вопрос чуть ниже.
в msProductData, вы можете оперировать какими угодно таблицами, просто модифицируйте тогда плагин и процессор под себя.А можете подсказать как модифицировать плагин/процессор если поле добавлено в опции товаров?
Готов отблагодарить деревянными)
добавлен, там заглушку надо только закомментироватьПодскажи пожалуйста, какую именно заглушку, ге она находится?
<?php
/**
* Update Prices an CRlist
*/
class modCRlistsUpdatePricesProcessor extends modProcessor
{
public $classKey = 'CRlist';
public $message = array();
public $total = 0;
protected $valutes = array(
'price_eur' => 'EUR',
'price_usd' => 'USD'
);
public function process()
{
return $this->success('');
/** @var currencyrate $currencyrate */
if (!$currencyrate = $this->modx->getService('currencyrate', 'currencyrate', $this->modx->getOption('currencyrate_core_path', null, $this->modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/', array())) {
return 'Could not load currencyrate class!';
}
foreach ($this->valutes as $field => $valute) {
if (!$valute = $this->modx->getObject('CRlist', array('charcode' => $valute, 'active' => 1))) {
continue;
}
$valuerate = $valute->get('valuerate');
if (empty($valuerate)) {
continue;
}
$sql = "UPDATE {$this->modx->getTableName('msProductData')} SET `price` = Ceil({$field} * {$valuerate}) WHERE {$field} > 0";
$q = $this->modx->prepare($sql);
$q->execute();
++$this->total;
}
if ($this->total > 0) {
$this->message[] = "Выполнено обновление для {$this->total} валют.";
$this->modx->cacheManager->refresh();
}
return $this->success(implode('
', $this->message));
}
}
return 'modCRlistsUpdatePricesProcessor';
в msProductData, вы можете оперировать какими угодно таблицами, просто модифицируйте тогда плагин и процессор под себя.Класс, так и сделаю, спасибо!
return $this->success('');Это заглушка?
+
Доброе время суток!
Сделал всё по инструкции, но не работает ни плагин, ни кнопка.
— поля price_usd и price_eur находятся в одной таблице с полем price(ms2_products)
— коды плагина и процессора обновил
Что я сделал не так? Прошу помощи, заранее спасибо!
Сделал всё по инструкции, но не работает ни плагин, ни кнопка.
— поля price_usd и price_eur находятся в одной таблице с полем price(ms2_products)
— коды плагина и процессора обновил
Что я сделал не так? Прошу помощи, заранее спасибо!
Сам нашёл свою банальную ошибку — просто не включил валюты
Никто не знает, как можно сделать такую штуку на сайте? без использования парсинга
www.banki.ru/products/currency/cash/Primorskiy_kray/Nahodka/
www.banki.ru/products/currency/cash/Primorskiy_kray/Nahodka/
Доброго времени суток, поставил обновление курса валют через крон, а вот каким образом мне сделать обновление
на странице пакета появится кнопка — обновить цены, а то приходиться обновлять ее в ручную
— добавить системную настройку currencyrate_button_prices_update булевого типа.
на странице пакета появится кнопка — обновить цены
да нет, это то я все сделал все появилось, но обновляется только курс валют через крон, а те цены которые были со старым курсом не обновляются
Присоединюсь к вопросу. Можно ли по крону обновлять цены?
Владимир, подскажите каким все таки образом можно обновить по крону цены в евро и других валютах, а не сам курс валют, заранее премного благодарен!
Для обновления цен по cron'у я добавил в конец файла get_cr.php:
А разве нельзя запускать по cron'у updateprices.class.php? Нужно только немного изменить его, убрав вывод сообщений.
if (!$docs = $modx->getCollection('modResource', array(
'template' => 4
))) { return; }
$modx->getService('currencyrate', 'currencyrate', $modx->getOption('currencyrate_core_path', null, $modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/', array());
$valute = $modx->getObject('CRlist', array('charcode' => 'EUR', 'active' => 1));
$valuerate = $valute->get('valuerate');
foreach ($docs as $doc){
if (!$doc->getTVValue('clock_price')) continue;
$doc->setTVValue('clock_price_rub', round($doc->getTVValue('clock_price') * $valuerate, 0));
}
Это код под мои условия, без использования minishop, а просто с полями TV, с валютой euro.А разве нельзя запускать по cron'у updateprices.class.php? Нужно только немного изменить его, убрав вывод сообщений.
Не могу запустить компонент. При установке в кодах — нули. Руками пробовал добавлять — не добавляет. Удалял, переустанавливал — не помогло.
Лог при установке
Лог при установке
[2019-11-10 20:53:30] (ERROR in xPDO::getService @ .../core/xpdo/xpdo.class.php: 1234) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.Скрин
[2019-11-10 20:53:30] (ERROR in modRestCurlClient::__construct @ .../core/model/modx/rest/modrestcurlclient.class.php: 26) modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
[2019-11-10 20:53:41] (ERROR in modMenu::getSubMenus @ .../core/model/modx/modmenu.class.php: 145) modAction support is deprecated since version 2.3.0. Support for modAction has been replaced with routing based on a namespace and action name. Please update the extra with the namespace currencyrate to the routing based system.
[2019-11-10 20:54:48] (ERROR in modManagerRequest::prepareResponse @ .../core/model/modx/modmanagerrequest.class.php: 187) modAction support is deprecated since version 2.3.0. Support for modAction has been replaced with routing based on a namespace and action name. Please update the extra with the namespace currencyrate to the routing based system.
Спасибо, добрый человек!
Все заработало.
Все заработало.
У меня тоже нули при установке и при попытке редактировать вручную ошибку выдает
что делать?
в логах такое
что делать?
в логах такое
[2020-03-25 20:42:39] (ERROR @ /home/f/ffactura/ffactura/public_html/core/xpdo/xpdo.class.php : 644) Could not load class: currencyrate from currencyrate.
[2020-03-25 20:42:39] (ERROR @ /home/f/ffactura/ffactura/public_html/core/xpdo/xpdo.class.php : 1247) Problem getting service currencyrate, instance of class currencyrate, from path /home/f/ffactura/ffactura/public_html/core/components/currencyrate/model/currencyrate/
[2020-03-25 20:42:45] (ERROR @ /home/f/ffactura/ffactura/public_html/core/xpdo/xpdo.class.php : 644) Could not load class: currencyrate from currencyrate.
[2020-03-25 20:42:45] (ERROR @ /home/f/ffactura/ffactura/public_html/core/xpdo/xpdo.class.php : 1247) Problem getting service currencyrate, instance of class currencyrate, from path /home/f/ffactura/ffactura/public_html/core/components/currencyrate/model/currencyrate/
[2020-03-25 20:42:51] (ERROR @ /home/f/ffactura/ffactura/public_html/core/xpdo/xpdo.class.php : 644) Could not load class: currencyrate from currencyrate.
[2020-03-25 20:42:51] (ERROR @ /home/f/ffactura/ffactura/public_html/core/xpdo/xpdo.class.php : 1247) Problem getting service currencyrate, instance of class currencyrate, from path /home/f/ffactura/ffactura/public_html/core/components/currencyrate/model/currencyrate/
[2020-03-25 20:42:51] (ERROR @ /home/f/ffactura/ffactura/public_html/core/xpdo/xpdo.class.php : 644) Could not load class: currencyrate from currencyrate.
[2020-03-25 20:42:51] (ERROR @ /home/f/ffactura/ffactura/public_html/core/xpdo/xpdo.class.php : 1247) Problem getting service currencyrate, instance of class currencyrate, from path /home/f/ffactura/ffactura/public_html/core/components/currencyrate/model/currencyrate/
[2020-03-25 20:42:59] (ERROR @ /home/f/ffactura/ffactura/public_html/core/model/modx/rest/modrestclient.class.php : 245) Could not connect to provider at: https://rest.modx.com/extras/
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.