Показывает покупателю точный процент скидки

Готовый код /
Показывает покупателю точный процент скидки
На одном из платных шаблонов InSales заметил что около каждой карточки товара выводиться информация о скидке, причем указан какой процент составляет скидка. Сразу захотелось реализовать что-то подобное на одном из сайтов. Изучил документацию и нашел как это можно сделать благодаря шаблонизатору liquid.

Собственно вот готовый код решения, останется только адаптировать под свой дизайн:
{% if product.old_price %}

  {% assign current = product.price| divided_by: product.old_price  %}
  {% assign full = current| times: 100  %}
  {% assign total = 100| minus: full  %}

<div class="product_sale">-{{total |round: 0}}%</div>
{% endif %}

Альтернативный вариант в 1 строчку:
{{ product.price | divided_by: product.old_price | times: -100 | plus: 100 | round: 0 }}

Принцип работы следующий:
  1. Текущую цену товара делим на старую цену
  2. Получившуюся цифру умножаем на 100
  3. От 100 отнимаем получившуюся цифра
  4. Округляем цифру до десятков. Она и есть наша искомая скидка
Если кто знает более элегантное решение — рад буду услышать

10 комментариев

poison67
Можно в 1 строку и без лишних переменных
{{ product.price | divided_by: product.old_price | times: -100 | plus: 100 | round: 0 }}
wonder
Отличный вариант, обновил статью
lastendcommerce
Хороший вариант,

Дайте пожалуйста еще код что бы когда нет скидки окно не выводилось, иначе же пишет "-0%".
wonder
В коде есть проверка на отсутствие скидки. Если поле со старой ценой не заполнено — тогда ничего не выводится
lastendcommerce
Спасибо за код, все отлично получилось.
rusblade
Скажите, куда данный код вставляется?
wonder
Этот код вставляется в редакторе темы
rusblade
Спасибо! А в каком блоке редактировать размер и цвет цифры получившейся скидки?
wonder
Это уже через css, самостоятельно нужно прописывать код.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.