Приветствую! Подскажите как реализовать занятную штуку. Требуется сделать две цены в карточке товара. 1. За наличный расчёт 2. По безналу (+6%) По умолчанию когда заказываешь товар, в корзину отправляется по 1. цене. 2 цена чисто информативная. Каким образом можно так, может есть какой то модуль? Рассмотрю все варианты решения, opencart 2.1
Если вторая цена только для информации, то не нужно никаких модулей просто умножить цену на 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 percentif (($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; ?> и дополняете текстом, объясняющим, что это за цена.
Dotrox, это жирный плюсище ) Спасибо --- Добавлено, 19 май 2016 --- Возможно ли тут прописать округление до десятичных разрядов. Типо как в Excel формула =ОКРУГЛ(A1;-1) чтобы добиться следующего: 158 200.- цена была 167 692.- цена получилась 167 690.- цена округленная
не сообразил куда вставить, в tpl вставляю показывает только результат округления. Вместо 32 436.- показывает 30 в php белый экран ))
Это: PHP: <?php echo round($price_cashless, -1); ?> вместо этого: PHP: <?php echo $price_cashless; ?>
да, так и делал. просто пишет округление 30 и всё (( получается выдает мне не округленное число, а значение последних двух символов из формулы
Не... здесь не все так просто вот сюда вместо 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']), 0 , $this->language->get('decimal_point'),$this->language->get('thousand_point')) . $this->currency->getSymbolLeft(); Если я не ошибся в этой длинной цепочке, то так.
Точно! Когда сначала хотел предложить умножать прямо в шаблоне, я вспомнил, что там форматированное значение, а при округлении уже не вспомнил. Там же не число выводится, а строка, значит, действительно, округлять надо ещё в контроллере. Только, мне кажется, можно обойтись и немного дополненной изначальной строкой: 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')));
Dotrox, в том то и дело, что второй вариант вернет округленное значение после умножения на курс.. потому Первая строка вернет не отформатированную строку, но уже приведенную по курсу, а вторая отформатирует
А как бы ты делал? Я бы Сначала получил отдельным, методом текущее значение,а затем форматировал в строку. Что я и сделал, но Удалил гланды, через задний проход.
Это мне напомнило, что есть же $this->currency->convert (которая в оригинале содержит потенциальную ошибку деления на 0). По нормальному, эта функция должна была бы не нули подставлять, если не заданы валюты конвертации, а базовую валюту и текущую, тогда бы её можно было использовать для получения числового значения цены в текущей валюте.