Округление процентов в Prestashop

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

Как округлить проценты на скидочную стоимость товара (когда reduction_type == 'percentage') в PrestaShop 1.6 для пользователя, чтобы не потерять точность значений. Первым делом открываем просмотр кода страницы и смотрим какой класс применяется для процента скидки на стоимость товара. Как видим, на всех страницах, кроме карточки товара, в стандартной теме default-bootstrap используется CSS класс price-percent-reduction. Далее, через поиск по внутреннему содержимому в файлах находим файлы шаблона в папке default-bootstrap (исключив при этом из поиска вложенные каталоги cache, css и js), где встречается имя CSS класса равное price-percent-reduction. Поиск показал, что данный класс присутствует в файлах:

  1. themes/default-bootstrap/products-comparison.tpl - страница сравнения товаров
  2. themes/default-bootstrap/product-list.tpl - список товаров на главной и в категориях
  3. themes/default-bootstrap/shopping-cart-product-line.tpl
  4. themes/default-bootstrap/modules/blockspecials/blockspecials.tpl
  5. themes/default-bootstrap/modules/productscategory/productscategory.tpl
Для начала я изменю самые основные файлы product-list.tpl и products-comparison.tpl. Чтобы это осуществить нам нужно найти в этих файлах класс price-percent-reduction и везде вывод процента скидки обернуть в функцию round(), чтобы избавиться от десятичных чисел после запятой.

Редактируем product-list.tpl

Открываем в текстовом редакторе, находим совпадения по классу price-percent-reduction. В данном случае они в двух местах:
{if $product.specific_prices.reduction_type == 'percentage'}
 <span class="price-percent-reduction">-{$product.specific_prices.reduction * 100}%</span>
{/if}
и меняем на:
{if $product.specific_prices.reduction_type == 'percentage'}
 <span class="price-percent-reduction">-{round($product.specific_prices.reduction * 100)}%</span>
{/if}
Округление процентов в Prestashop а также кусок кода:
{if $product.specific_prices.reduction_type == 'percentage'}
  <span class="price-percent-reduction">-{$product.specific_prices.reduction * 100}%</span>
{/if}
заменим на:
{if $product.specific_prices.reduction_type == 'percentage'}
  <span class="price-percent-reduction">-{round($product.specific_prices.reduction * 100)}%</span>
{/if}
Округление процентов в Prestashop Таким образом, при первой замене мы сделали округление процента скидки на товар при выводе на главной странице блока "Популярные товары" во время наведения на фотографию товара. А вторая правка кода добавляет округление на страницах категорий при выводе товаров.

Редактируем producs-comparison.tpl

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

Подводим итоги:

Обернув в PrestaShop 1.6 вывод значения для типа скидки (reduction_type) "процент" (percentage) в функцию round() в файлах product-list.tpl и producs-comparison.tpl мы смогли скруглить вывод скидки до целого числа, убрав некрасивые десятичные знаки для пользователя и при этом не меняя значение в базе данных. P.S. если Вы внимательно прочли статью, то заметили, что класс для вывода размера скидки у нас встречается в шаблоне 5 раз. Но мы исправили всего 2 файла. Дело в том, что я просмотрел все основные страницы сайта после правки двух файлов - и там уже везде правильно происходит округление. Поэтому их трогать и не стал. Если заметите неточность - сообщите.