Автор Тема: Округление цены со скидкой до целого  (Прочитано 1950 раз)

12 Декабрь 2016, 11:17:39
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите как быть?
Значит в карточке товара цена отображается правильно 3 510 руб
а вот цена со скидкой отображается как 2 457 руб

Как округлить цену со скидкой до 2 460 руб

Т.е. разделить 2 457 руб на 10, округлить, умножить на 10

Сейчас цена со скидкой отображается вот так в product.tpl:
<span id="our_price_display" class="price" itemprop="price" content="{$productPrice}">{convertPrice price=$productPrice|floatval}</span>

Поможет ли этот вариант:
Округление цены в Prestashop

Открываем файл /classes/Tools.php

вместо строки
$price = Tools::ps_round($price, $c_decimals);

указываем
$price = ceil($price / 10) * 10;
12 Декабрь 2016, 12:06:56
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
floor — Округляет дробь в меньшую сторону
$price = floor($price);
//   цена  2 457 руб
echo floor(2457);  // вернет  2 457 руб
12 Декабрь 2016, 12:44:14
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
floor — Округляет дробь в меньшую сторону
$price = floor($price);
//   цена  2 457 руб
echo floor(2457);  // вернет  2 457 руб

Поможет ли этот вариант?

Открываем файл /classes/Tools.php

вместо строки
$price = Tools::ps_round($price, $c_decimals);

указываем
$price = ceil($price / 10) * 10;

Возможно можно выбрать какой-то из режимов округления?
Существует 6 разных способов округления цен. "Округление половины в сторону от ноля" - рекомендуемый способ.
12 Декабрь 2016, 12:59:40
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
$price = ceil($price / 10) * 10;- округление до десятков, как раз для вашего случая.
12 Декабрь 2016, 13:07:43
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$price = ceil($price / 10) * 10;- округление до десятков, как раз для вашего случая.

Спасибо за ответ.

Можно данный режим накрутить в настройках
Режим округления?
Существует 6 разных способов округления цен. "Округление половины в сторону от ноля" - рекомендуемый способ. и т.д.
12 Декабрь 2016, 13:18:53
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ещё один момент:

Открываем файл /classes/Tools.php

вместо строки
$price = Tools::ps_round($price, $c_decimals);

указываем
$price = ceil($price / 10) * 10;

В каталоге товара всё отлично, однако в карточке товара цена старая...
12 Декабрь 2016, 13:20:11
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Можно конечно, нужно переопределить Tools.php, AdminPreferences.
12 Декабрь 2016, 13:25:10
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Добавляете в метод convertPrice?
12 Декабрь 2016, 13:44:38
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Проверил виноват product.js, вот эта эта строка меняет на старую цену:

$('#our_price_display').text(formatCurrency(priceWithDiscountsDisplay * currencyRate, currencyFormat, currencySign, currencyBlank)).trigger('change');

Почему не изменилась цена в priceWithDiscountsDisplay???
Куда копать?
12 Декабрь 2016, 13:59:47
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
В шаблоне определены js переменные. Там нужно посмотреть.
12 Декабрь 2016, 14:03:12
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В шаблоне определены js переменные. Там нужно посмотреть.

Посмотрел всё здесь:
{if isset($combinations) && $combinations}
   {addJsDef combinations=$combinations}
   {addJsDef combinationsFromController=$combinations}
   {addJsDef displayDiscountPrice=$display_discount_price}
   {addJsDefL name='upToTxt'}{l s='Up to' js=1}{/addJsDefL}
{/if}

Ещё выше это контроллер ProductController.php

Там где то здесь
$combinations[$row['id_product_attribute']]['price'] = (float)$row['price'];

// Call getPriceStatic in order to set $combination_specific_price
if (!isset($combination_prices_set[(int)$row['id_product_attribute']]))
{
Product::getPriceStatic((int)$this->product->id, false, $row['id_product_attribute'], 6, null, false, true, 1, false, null, null, null, $combination_specific_price);
$combination_prices_set[(int)$row['id_product_attribute']] = true;
$combinations[$row['id_product_attribute']]['specific_price'] = $combination_specific_price;
}
12 Декабрь 2016, 14:21:39
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
В ProductController.php в методе assignPriceAndTax определены перемееные цены для шаблона.
12 Декабрь 2016, 14:49:51
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не получается. Неужели так сложно округлить цену со скидкой до целого???
12 Декабрь 2016, 15:10:39
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В tools.js

есть
function ps_round(value, places)
{

Возможно сюда необходимо внести изменения?
12 Декабрь 2016, 15:12:22
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Проверил виноват product.js, вот эта эта строка меняет на старую цену:

$('#our_price_display').text(formatCurrency(priceWithDiscountsDisplay * currencyRate, currencyFormat, currencySign, currencyBlank)).trigger('change');

Почему не изменилась цена в priceWithDiscountsDisplay???
Куда копать?
Переопередели priceWithDiscountsDisplay в product.js и все. На остальных страницых у тебя же правильно считает.