1 Отредактировано Sergey T. (26.09.2016 12:41:15)

Тема: Разный цвет скидки в зависимости от ее размера

Подскажите пожалуйста как можно вывести скидку в разных стилях в зависимости от ее размера.
Например -10% зеленым, -20% оранжевым, -30% красным и т.д.

http://s017.radikal.ru/i406/1609/b2/4cb67a3bd834.jpg

Сейчас верхняя РРЦ цена выводится вот так:

{if $product->getCost('Розничные цены - по заказам')>0}
                  {$product->getCost('Розничные цены - по заказам')}                                                  
{/if}  

А цена по умолчанию выводится вот так:

{$product->getCost()} {$product->getCurrency()}

Как посчитать разницу между двумя этими суммами и вывести ее в процентах и чтобы стили изменялись?
Также, если разницы между ценами нет, то скидку не выводить совсем.

Re: Разный цвет скидки в зависимости от ее размера

Sergey T. пишет:

Подскажите пожалуйста как можно вывести скидку в разных стилях в зависимости от ее размера.
Например -10% зеленым, -20% оранжевым, -30% красным и т.д.

http://s017.radikal.ru/i406/1609/b2/4cb67a3bd834.jpg

Сейчас верхняя РРЦ цена выводится вот так:

{if $product->getCost('Розничные цены - по заказам')>0}
                  {$product->getCost('Розничные цены - по заказам')}                                                  
{/if}  

А цена по умолчанию выводится вот так:

{$product->getCost()} {$product->getCurrency()}

Как посчитать разницу между двумя этими суммами и вывести ее в процентах и чтобы стили изменялись?
Также, если разницы между ценами нет, то скидку не выводить совсем.

Можно назначением класса на обёрку скидки. У Вас скидка в какой переменой выводится?
Предположим, что $percent.
Тогда

{* Старая и новая цена *}
{$last_price=$product->getCost('Розничные цены - по заказам', null, false)}
{$single_price=$product->getCost(null, null, false)}
{* Простая школьная арифметика *}
{$delta=$last_price-$single_price}
{$percent=round(($delta*100)/$last_price)}

<span class="{if $percent==10}green{elseif $percent==20}orange{else}red{/if}">-{$percent}%</span>

3

Re: Разный цвет скидки в зависимости от ее размера

Спасибо! Все получилось!

Как я понял из условия, что если процент 10 то - один класс, если 20 - то другой, а если любой другой - то третий.

А можно в этом условии

<span class="{if $percent==10}green{elseif $percent==20}orange{else}red{/if}">-{$percent}%</span>

добавить "от" и "до"?

Например, если 0-10, то один класс, если 11-20 то другой, если 21 и больше, то третий?

Re: Разный цвет скидки в зависимости от ее размера

>,  >=, <, <=
Например:

{if $percent>=10 && $percent<=10}

5 Отредактировано Sergey T. (27.09.2016 09:28:37)

Re: Разный цвет скидки в зависимости от ее размера

Большое спасибо, все получилось, сделал так

{if $percent>0}<span class="{if $percent>=0 && $percent<=10}green{elseif $percent>=11 && $percent<=20}orange{else $percent>=21 && $percent<=100}red{/if}">-{$percent}%</span>{/if}

6

Re: Разный цвет скидки в зависимости от ее размера

А подскажите пожалуйста еще такой момент:

Использую вот такую конструкцию для расчета скидки (собственно, как вы и предлагали выше в теме):

  {* Считает разницу в процентах *}
  {$last_price=$product->getCost('Старая цена (для сайта)', null, false)}
  {$single_price=$product->getCost(null, null, false)}
  {* Простая школьная арифметика *}
  {$prepercent=round(($single_price*100)/$last_price)}
  {$percent=round(100-$prepercent)}

Далее использую вывод скидки вот так:

{if $percent>0}<span class="{if $percent>=0 && $percent<=10}green1{elseif $percent>=11 && $percent<=20}orange1{else $percent>=21 && $percent<=100}red1{/if}">-{$percent}%</span>{/if}

и условие, если цена по умолчанию равна старой цене, то скидку не выводить

{if $product->getCost('Старая цена (для сайта)')>0&&$product->getCost('Старая цена (для сайта)', null, false) != $product->getCost('Розничные цены - по заказам', null, false)}<span class="lastPrice_catalog">{$product->getCost('Старая цена (для сайта)')} ք</span>

При всех этих условиях, если вдруг одна из цен не задана, например отсутствует цена по умолчанию или старая цена, то получаю вот такой текст прямо в каталоге товаров

http://s013.radikal.ru/i322/1611/7b/a46c3839ebfd.jpg

а в коде вот такое сообщение:

http://s03.radikal.ru/i176/1611/f8/b000a3cf1619.jpg


Подскажите как решить данную проблему?

7 Отредактировано Закусило Александр (22.11.2016 12:11:02)

Re: Разный цвет скидки в зависимости от ее размера

Ну эти конструкции не содержат ничего такого. Вам надо закомментировать строки чтобы локализовать проблему и смотреть, что у Вас выдаёт сообщение. А ещё лучше заглянуть в исходный код страницы готового HTML. (Ctrl+U). Может быть там какое-то сообщение.

{* Здесь что-то закомментированное *}

Re: Разный цвет скидки в зависимости от ее размера

{if $product->getCost('Старая цена (для сайта)')>0&&$product->getCost('Старая цена (для сайта)', null, false) != $product->getCost('Розничные цены - по заказам', null, false)}<span class="lastPrice_catalog">{$product->getCost('Старая цена (для сайта)')} ք</span>

чего-то мне не нравится отсутствие пробелов до и после &&
и не закрытый {if}

Повысить оценку Понизить оценку

9 Отредактировано Закусило Александр (23.11.2016 12:42:18)

Re: Разный цвет скидки в зависимости от ее размера

С if согласен, а вот && насколько я знаю не имеете значение наличие пробелов.

Re: Разный цвет скидки в зависимости от ее размера

Закусило Александр пишет:

С if согласен, а вот && насколько я знаю не имеете значение наличие пробелов.

я ведь написал "не нравится" smile
я не утверждал, что не работает, но принято писать с пробелами, хотя бы для читабельности кода.

Повысить оценку Понизить оценку

Re: Разный цвет скидки в зависимости от ее размера

Ну это да smile