Авто конвертация валюты в рубли shopkeeper2

Здравствуйте, уважаемые коллеги. Подскажите, как можно сделать автоматическую конвертацию цен из долларов в рубли. Т.е. цену на товары писать в долларах, а на сайте цена выводилась в рублях по сегодняшнему курсу и было обновление ежедневное при изменении курса. Спасибо!
Кост
31 октября 2016, 09:09
modx.pro
1 571
0

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

Павел Романов
31 октября 2016, 14:27
0
Попробуйте сделать плагин на событие 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 '';
    Кост
    31 октября 2016, 15:14
    0
    Спасибо, Павел за ответ, плагин создал, его нужно как-то подключить к карточке товара и корзине? Так пробовал цены не меняются. $price_tv_name = 'price'; //Имя TV цены поле так и называется price
      Павел Романов
      31 октября 2016, 15:23
      0
      У плагина на вкладке «Системные события» отметьте галочкой OnSHKgetProductPrice.

      Но плагин не меняет цену на странице товара — от просто пересчитывает ее, когда происходит добавление в корзину. Для того, чтобы выводить цену, создайте сниппет getprice:

      <?php
      $rate = 63; // курс
      return $input * $rate;

      И выводите в чанках:
      [[+tv.price:getprice:num_format]]

      На странице товара:
      [[*price:getprice:num_format]]
        Кост
        31 октября 2016, 15:38
        0
        Спасибо, галочку поставил. Буду пробовать
      Кост
      09 ноября 2016, 13:57
      0
      Павел, спасибо за подсказки, подскажите, так можно прописать условия, т.е. если акционная цена, то выводим ее, если нет, то выводим обычную цену?
      <?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 '';
        Павел Романов
        09 ноября 2016, 14:22
        +1
        Попробуйте так:
        <?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 '';
          Кост
          09 ноября 2016, 14:35
          0
          Выдал ошибку при добавлении в корзину Fatal error: Call to a member function renderOutput() on a non-object
            Павел Романов
            09 ноября 2016, 15:49
            +1
            Ошибся. А так?
            <?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 '';
              Кост
              09 ноября 2016, 16:03
              0
              Да, заработало, круто, спасибо! очень благодарен. Еще один вопрос, как сделать чтобы выводились только целые числа цен, например если в долларах 15,7, то цена получается с хвостом, его бы не выводить.
                Павел Романов
                09 ноября 2016, 16:15
                +1
                Используйте number_format.
                Для вывода на сайте можете сделать сниппет-модификатор nformat:
                return number_format($input, 0, '', ' ');

                и использовать:
                [[*price:nformat]]

                Если нужно округление, то round.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      10