Авто конвертация валюты в рубли shopkeeper2
Здравствуйте, уважаемые коллеги. Подскажите, как можно сделать автоматическую конвертацию цен из долларов в рубли. Т.е. цену на товары писать в долларах, а на сайте цена выводилась в рублях по сегодняшнему курсу и было обновление ежедневное при изменении курса. Спасибо!
Комментарии: 10
Попробуйте сделать плагин на событие OnSHKgetProductPrice
<?php
$rate = 63; //тут курс
$output = 0;
$price_tv_name = 'price'; //Имя TV цены
$p_id = isset($purchaseArray['shk-id']) && is_numeric($purchaseArray['shk-id']) ? $purchaseArray['shk-id'] : 0;
if($p_id){
$price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
$price_usd = $price_tv->renderOutput($p_id);
$output = $price_usd * $rate;
}
$modx->event->_output = '';
$modx->event->output($output);
return '';
Спасибо, Павел за ответ, плагин создал, его нужно как-то подключить к карточке товара и корзине? Так пробовал цены не меняются. $price_tv_name = 'price'; //Имя TV цены поле так и называется price
У плагина на вкладке «Системные события» отметьте галочкой OnSHKgetProductPrice.
Но плагин не меняет цену на странице товара — от просто пересчитывает ее, когда происходит добавление в корзину. Для того, чтобы выводить цену, создайте сниппет getprice:
И выводите в чанках:
На странице товара:
Но плагин не меняет цену на странице товара — от просто пересчитывает ее, когда происходит добавление в корзину. Для того, чтобы выводить цену, создайте сниппет getprice:
<?php
$rate = 63; // курс
return $input * $rate;
И выводите в чанках:
[[+tv.price:getprice:num_format]]
На странице товара:
[[*price:getprice:num_format]]
Спасибо, галочку поставил. Буду пробовать
Павел, спасибо за подсказки, подскажите, так можно прописать условия, т.е. если акционная цена, то выводим ее, если нет, то выводим обычную цену?
<?php
$rate = 63; //тут курс
$output = 0;
$price_tv_name = 'price'; //Имя TV цены
$action_price_tv_name = 'action_price'; //Имя акционной TV цены
$action = 'action'; //галочка акции TV поля
$p_id = isset($purchaseArray['shk-id']) && is_numeric($purchaseArray['shk-id']) ? $purchaseArray['shk-id'] : 0;
if($p_id){
if (!empty ($action)) {
$action_price_tv = $modx->getObject('modTemplateVar',array('name'=>$action_price_tv_name));
$price_usd = $action_price_tv->renderOutput($p_id);
} else {
$price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
$price_usd = $price_tv->renderOutput($p_id);
}
$output = $price_usd * $rate;
}
$modx->event->_output = '';
$modx->event->output($output);
return '';
Попробуйте так:
<?php
$rate = 63; //тут курс
$output = 0;
$price_tv_name = 'price'; //Имя TV цены
$action_price_tv_name = 'action_price'; //Имя акционной TV цены
$p_id = isset($purchaseArray['shk-id']) && is_numeric($purchaseArray['shk-id']) ? $purchaseArray['shk-id'] : 0;
if($p_id){
$action_tv = $modx->getObject('modTemplateVar',array('name'=>'action'));
$action = $action->renderOutput($p_id);
if (!empty ($action)) {
$action_price_tv = $modx->getObject('modTemplateVar',array('name'=>$action_price_tv_name));
$price_usd = $action_price_tv->renderOutput($p_id);
} else {
$price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
$price_usd = $price_tv->renderOutput($p_id);
}
$output = $price_usd * $rate;
}
$modx->event->_output = '';
$modx->event->output($output);
return '';
Выдал ошибку при добавлении в корзину Fatal error: Call to a member function renderOutput() on a non-object
Ошибся. А так?
<?php
$rate = 63; //тут курс
$output = 0;
$price_tv_name = 'price'; //Имя TV цены
$action_price_tv_name = 'action_price'; //Имя акционной TV цены
$p_id = isset($purchaseArray['shk-id']) && is_numeric($purchaseArray['shk-id']) ? $purchaseArray['shk-id'] : 0;
if($p_id){
$action_tv = $modx->getObject('modTemplateVar',array('name'=>'action'));
$action = $action_tv->renderOutput($p_id);
if (!empty ($action)) {
$action_price_tv = $modx->getObject('modTemplateVar',array('name'=>$action_price_tv_name));
$price_usd = $action_price_tv->renderOutput($p_id);
} else {
$price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
$price_usd = $price_tv->renderOutput($p_id);
}
$output = $price_usd * $rate;
}
$modx->event->_output = '';
$modx->event->output($output);
return '';
Да, заработало, круто, спасибо! очень благодарен. Еще один вопрос, как сделать чтобы выводились только целые числа цен, например если в долларах 15,7, то цена получается с хвостом, его бы не выводить.
Используйте number_format.
Для вывода на сайте можете сделать сниппет-модификатор nformat:
и использовать:
Если нужно округление, то round.
Для вывода на сайте можете сделать сниппет-модификатор nformat:
return number_format($input, 0, '', ' ');
и использовать:
[[*price:nformat]]
Если нужно округление, то round.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.