[Помогите] К каждому товару +% (цена по безналу)

Тема в разделе "OpenCart", создана пользователем Ян..., 17 май 2016.

  1. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    Приветствую! Подскажите как реализовать занятную штуку.
    Требуется сделать две цены в карточке товара.
    1. За наличный расчёт
    2. По безналу (+6%)
    По умолчанию когда заказываешь товар, в корзину отправляется по 1. цене. 2 цена чисто информативная.
    Каким образом можно так, может есть какой то модуль? Рассмотрю все варианты решения, opencart 2.1
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.050
    Симпатии:
    778
    Если вторая цена только для информации, то не нужно никаких модулей просто умножить цену на 1.06 и вывести.

    В /catalog/controller/product/product.php после
    PHP:
    if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                    
    $data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
                } else {
                    
    $data['price'] = false;
                }
    добавить:
    PHP:
    $cashless_tax 6//in percent
    if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                    
    $data['price_cashless'] = $this->currency->format($this->tax->calculate($product_info['price']*(1+$cashless_tax/100), $product_info['tax_class_id'], $this->config->get('config_tax')));
                } else {
                    
    $data['price_cashless'] = false;
                }
    А затем в product.tpl вашего шаблона в следующей строке после
    PHP:
    <?php echo $price?>
    вписываете
    PHP:
    <?php echo $price_cashless?>
    и дополняете текстом, объясняющим, что это за цена.
     
    Ян... и samuel_L нравится это.
  3. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    Dotrox, это жирный плюсище )
    Спасибо:Clapping:
    --- Добавлено, 19 май 2016 ---
    Возможно ли тут прописать округление до десятичных разрядов. Типо как в Excel формула =ОКРУГЛ(A1;-1)
    чтобы добиться следующего:
    • 158 200.- цена была
    • 167 692.- цена получилась
    • 167 690.- цена округленная
     
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.050
    Симпатии:
    778
    PHP:
    <?php echo round($price_cashless, -1); ?>
     
    Ян... нравится это.
  5. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    не сообразил куда вставить, в tpl вставляю показывает только результат округления. Вместо 32 436.- показывает 30
    в php белый экран ))
     
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.050
    Симпатии:
    778
    Это:
    PHP:
    <?php echo round($price_cashless, -1); ?>
    вместо этого:
    PHP:
    <?php echo $price_cashless?>
     
  7. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    да, так и делал. просто пишет округление 30 и всё ((
    получается выдает мне не округленное число, а значение последних двух символов из формулы
     
    Последнее редактирование: 23 май 2016
  8. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    283
    Симпатии:
    85
    Не... здесь не все так просто

    вот сюда
    вместо
    PHP:
    $data['price_cashless'] = $this->currency->format($this->tax->calculate($product_info['price']*(1+$cashless_tax/100), $product_info['tax_class_id'], $this->config->get('config_tax')));
    вставить вот это
    PHP:
    $data['price_cashless'] = $this->currency->format($this->tax->calculate($product_info['price']*(1+$cashless_tax/100), $product_info['tax_class_id'], $this->config->get('config_tax')),'','',false);
    $data['price_cashless'] = $this->currency->getSymbolRight() . number_format(round($data['price_cashless']), $this->language->get('decimal_point'),$this->language->get('thousand_point')) .  $this->currency->getSymbolLeft();
    Если я не ошибся в этой длинной цепочке, то так.
     
    Lasted edited by : 24 май 2016
    Ян... нравится это.
  9. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.050
    Симпатии:
    778
    Точно! Когда сначала хотел предложить умножать прямо в шаблоне, я вспомнил, что там форматированное значение, а при округлении уже не вспомнил.
    Там же не число выводится, а строка, значит, действительно, округлять надо ещё в контроллере.

    Только, мне кажется, можно обойтись и немного дополненной изначальной строкой:
    PHP:
    $data['price_cashless'] = $this->currency->format($this->tax->calculate(round($product_info['price']*(1+$cashless_tax/100), -1), $product_info['tax_class_id'], $this->config->get('config_tax')));
     
    Ян... нравится это.
  10. Ян...

    Ян...

    Регистрация:
    21 сен 2013
    Сообщения:
    55
    Симпатии:
    16
    Вот теперь всё отлично. Благодарю за помощь!:Clapping:
     
  11. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    283
    Симпатии:
    85
    Dotrox, в том то и дело, что второй вариант вернет округленное значение после умножения на курс.. потому
    Первая строка вернет не отформатированную строку, но уже приведенную по курсу, а вторая отформатирует
     
  12. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.050
    Симпатии:
    778
    chukcha, тоже верно. До чего же в ОК всё это неудобно.
     
  13. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    283
    Симпатии:
    85
    А как бы ты делал?

    Я бы Сначала получил отдельным, методом текущее значение,а затем форматировал в строку.

    Что я и сделал, но
    Удалил гланды, через задний проход.
     
  14. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.050
    Симпатии:
    778
    Это мне напомнило, что есть же $this->currency->convert (которая в оригинале содержит потенциальную ошибку деления на 0). По нормальному, эта функция должна была бы не нули подставлять, если не заданы валюты конвертации, а базовую валюту и текущую, тогда бы её можно было использовать для получения числового значения цены в текущей валюте.