Округление процентов в Prestashop
Опубликовано:
Комментариев: 0

Как округлить проценты на скидочную стоимость товара (когда reduction_type == 'percentage') в PrestaShop 1.6 для пользователя, чтобы не потерять точность значений.
Первым делом открываем просмотр кода страницы и смотрим какой класс применяется для процента скидки на стоимость товара. Как видим, на всех страницах, кроме карточки товара, в стандартной теме default-bootstrap используется CSS класс price-percent-reduction.
Далее, через поиск по внутреннему содержимому в файлах находим файлы шаблона в папке default-bootstrap (исключив при этом из поиска вложенные каталоги cache, css и js), где встречается имя CSS класса равное price-percent-reduction.
Поиск показал, что данный класс присутствует в файлах:
а также кусок кода:
Таким образом, при первой замене мы сделали округление процента скидки на товар при выводе на главной странице блока "Популярные товары" во время наведения на фотографию товара. А вторая правка кода добавляет округление на страницах категорий при выводе товаров.
ну вот и всё.
- themes/default-bootstrap/products-comparison.tpl - страница сравнения товаров
- themes/default-bootstrap/product-list.tpl - список товаров на главной и в категориях
- themes/default-bootstrap/shopping-cart-product-line.tpl
- themes/default-bootstrap/modules/blockspecials/blockspecials.tpl
- themes/default-bootstrap/modules/productscategory/productscategory.tpl
Редактируем product-list.tpl
Открываем в текстовом редакторе, находим совпадения по классу price-percent-reduction. В данном случае они в двух местах:{if $product.specific_prices.reduction_type == 'percentage'}
-{$product.specific_prices.reduction * 100}%
{/if}
и меняем на:
{if $product.specific_prices.reduction_type == 'percentage'}
-{round($product.specific_prices.reduction * 100)}%
{/if}

{if $product.specific_prices.reduction_type == 'percentage'}
-{$product.specific_prices.reduction * 100}%
{/if}
заменим на:
{if $product.specific_prices.reduction_type == 'percentage'}
-{round($product.specific_prices.reduction * 100)}%
{/if}

Редактируем producs-comparison.tpl
Тут аналогично находим все вхождения по искомому классу. Как видим их всего 2 и они подвязаны к условию if ... else. Если (if) задана скидка в процентах, то выводим так-то, в противном случае (else) т.е. если размер скидки задан в валюте - выводим что-то другое. Учитывая особенности моего магазина, у нас всегда используется процент скидки, а если и ставим скидку в валюте - то никогда не используем дробные. Таким образом, мне тут нужно исправить только первую часть условия, дополнив её также функцией round(). Для этого находим кусок кода:{if {$product->specificPrice.reduction_type == 'percentage'}} {displayWtPrice p=$product->getPrice($taxes_behavior)+($product->getPrice($taxes_behavior)* $product->specificPrice.reduction)} -{$product->specificPrice.reduction*100|floatval}% {else}и меняем на:
{if {$product->specificPrice.reduction_type == 'percentage'}} {displayWtPrice p=$product->getPrice($taxes_behavior)+($product->getPrice($taxes_behavior)* $product->specificPrice.reduction)} -{round($product->specificPrice.reduction*100)}% {else}
