Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Округление цены до целого в корзине (если несколько валют)


remix8080

Recommended Posts

Приветствую.

Похожие темы поднимались неоднократно, но решения не нашел (

Версия ocStore 1.5.5.1.2

Валюта по умолчанию установлена USD, на витрине - UAH.

Нужно в корзине округлить до целого гривневый эквивалент цены. Если цена товара несколько центов (например, 0.07~2грн), то умножение на кол-во приводит к "нефэншуйному" результату (рис.1)

В system/library/cart.php если поменять

$this->data[$key] = array(
                        ...
                        'price'           => ($price + $option_price),
                        ...                    
                    );

на

$this->data[$key] = array(
                        ...
                        'price'           => round($price + $option_price),
                        ...                    
                    );

 

то цена округляется для валюты по умолчанию (для USD), соответственно для цены 0.07 округляется до 0, и получается рис.2

 

Подскажите, пожалуйста, как при умножении на кол-во брать округленную цену в гривнах?

Заранее спасибо!

1.jpg

2.jpg

Змінено користувачем remix8080
Надіслати
Поділитися на інших сайтах


34 минуты назад, remix8080 сказал:

В system/library/cart.php если поменять

Ниже ещё есть строка:

'total'           => ($price + $option_price) * $cart['quantity'],

Там надо сделать округление цены до умножения:

'total'           => round($price + $option_price) * $cart['quantity'],

 

Надіслати
Поділитися на інших сайтах

Добавьте PHP_ROUND_HALF_UP

 

round($price + $option_price, $this->currency->getDecimalPlace($this->session->data['currency']), PHP_ROUND_HALF_UP)

 

Надіслати
Поділитися на інших сайтах

29 минут назад, remix8080 сказал:

Я в курсе за эту строку ) Ничего не даст, т.к. умножает 0 на кол-во (в итоге в "Сумма" и "Итого" получим тоже по 0)

Вместо round() используйте ceil()

Надіслати
Поділитися на інших сайтах

47 минут назад, ArtemPitov сказал:

Добавьте PHP_ROUND_HALF_UP

 


round($price + $option_price, $this->currency->getDecimalPlace($this->session->data['currency']), PHP_ROUND_HALF_UP)

 

Артем, вылезла ошибка

Fatal error: Call to a member function getDecimalPlace() on null :sad:

 

Надіслати
Поділитися на інших сайтах


@remix8080 не посмотрел что это в системной библиотеке, Вам немного не туда, так-как цены не только в корзине есть, а конвертируются в system/library/currency.php

Надіслати
Поділитися на інших сайтах

27 минут назад, remix8080 сказал:

Не подходит, округляет к 1 USD, т.е. к валюте, по умолчанию (

Тогда надо более чётко сформулировать.

Если с разными валютами, то там будет посложнее. Скорее всего сами не справитесь.

 

12 минут назад, ArtemPitov сказал:

@remix8080 не посмотрел что это в системной библиотеке, Вам немного не туда, так-как цены не только в корзине есть, а конвертируются в system/library/currency.php

Так тоже не подойдёт, т.к. будет округлять итог. А нужно округлить единицу товара, но учётом курса валюты.

Надіслати
Поділитися на інших сайтах

В system/library/currency.php

для функции public function convert($value, $from, $to) поменял

return $value * ($to / $from);

на

return round(($value * ($to / $from)), $this->currency->getDecimalPlace($this->session->data['currency']), PHP_ROUND_HALF_UP);

Ошибки нет, но дальше то, что на рис.1 в первом посте (

 

Надіслати
Поділитися на інших сайтах


3 минуты назад, mpn2005 сказал:

Так тоже не подойдёт, т.к. будет округлять итог. А нужно округлить единицу товара, но учётом курса валюты.

Этот момент упустил, но, не забывайте что товары есть не только в корзине 

Надіслати
Поділитися на інших сайтах

15 минут назад, mpn2005 сказал:

Тогда надо более чётко сформулировать.

Да вроде четко сформулировал, с картинками даже )

Еще раз напишу. Валюта по умолчанию USD (коэф.=1). На витрине все отображается в гривнах UAH (коэф.~27). Цены в админке на товары указываются в USD.

Есть товар с ценой 0,07 USD. На сайте он отображается нормально (2грн), а вот в корзине при умножении на большее количество отображается, как на первом рисунке.

Змінено користувачем remix8080
Надіслати
Поділитися на інших сайтах


Это невозможно, для этого остаток и существуют, иначе будут ошибки, марался сам, пришел к выводу, что показываю остаток для всех валют, кроме основной
если уберете остаток, то при оплате возникнут проблемы, с большим объемом будут проблемы с ценой, либо в вашу пользу, либо в пользу клиента

Надіслати
Поділитися на інших сайтах

34 минуты назад, oc_ сказал:

Это невозможно, для этого остаток и существуют

Вы о каком остатке? Проблем с оплатой не будет, т.к. онлайн оплаты нет.

Думаю, нет ничего невозможного ) Такое ощущение, что где-то для корзины просится round, но где конкретно, хз (

Надіслати
Поділитися на інших сайтах


26 минут назад, remix8080 сказал:

Вы о каком остатке? Проблем с оплатой не будет, т.к. онлайн оплаты нет.

Думаю, нет ничего невозможного ) Такое ощущение, что где-то для корзины просится round, но где конкретно, хз (

остаток, это после точки 
В currency округление
system/library/cart/currency.php
и в system/library/cart/cart.php

 

Надіслати
Поділитися на інших сайтах

  • 2 years later...

І в мене така сама проблема основна валюта грн., але коли відображається в евро то ось так

 

image.png.4080f85ddcd754ba5c4720b4f6fc6b9e.png

 

підскажіть як зробити заокруглення щоб total був 25.70

Змінено користувачем hmade
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.