Встала задачка, иммититровать систему скидок в интернет магазине на Битрикс. Из 1С-УТ, на сайт, выгружается два типа цен: "РИЦ сайт"" и "Старт розница"
РИЦ сайт - это цена со скидкой, а Старт розница - цена без скидки. Но, бывают ситуации когда обе эти цены одинаковые.
Задача, выводить эти цены в шаблон каталога, таким образом, что бы имитировалась система скидок.
Алгоритм простой:
- Если "РИЦ сайт" меньше "Старт розница" - выводим зачеркнутую "Старт розница" и подсвеченную "РИЦ сайт".
- Для красоты, выводим и процент скидки, вычесляя его пропорцией.
- Иначе просто выводим "Старт розница".
Для дальнейших манипуляций, работы с математическими функциями, нам нужно передать каждый тип цены в переменнуи $arElement и привести к числовому виду, так как они будут строкой.
Загоняем цену, как число в переменную, при помощи оператора приведения int. Для "РИЦ сайт"- ее ID = 11 (скрин выше):
$db_res_ric = CPrice::GetList(array(), array("PRODUCT_ID" => $ID, "CATALOG_GROUP_ID" => '11',)); if ($ricPrice = $db_res_ric->Fetch()) { $arElement["PRICE_RIC"] = round($ricPrice['PRICE']); } $Ric = $arElement['PRICE_RIC']; $Ric = (int)$Ric; //Приводим в число
Тоже самое делаем с "Старт розница"- ее ID = 7
$db_res_ret = CPrice::GetList(array(), array("PRODUCT_ID" => $ID, "CATALOG_GROUP_ID" => '7',)); if ($retPrice = $db_res_ret->Fetch()) { $arElement["PRICE_RET"] = round($retPrice['PRICE']); } $Ret = $arElement['PRICE_RET']; $Ret = (int)$Ret; //Приводим в число
Таким образом, наши типы цен теперь в переменных $Ric и $Ret и они числовые. Дальше, простое сравнение и немножко математики
Все подсказки в комментариях к коду, дабы было нагляднее и понятнее
if ($Ric == $Ret) { //Если РИЦ равна Розница echo $arElement['PRICE_RET']; //Выводим Розницу } else { echo $arElement['PRICE_RET']; //Зачеркнутая Розница echo $arElement['PRICE_RIC']; //Выводим РИЦ }
Для полной иммитации скидки, и эстетики. Навешиваем лейбл с процентом скидки. Тут немножко математики:
if ($Ric !== $Ret) { $DifsPercent = $Ric * 100 / $Ret; //Высчитали пропорцию $LabelPercent = 100 - $DifsPercent; //Высчитали разницу echo $LabelPercent; //Вывели цифру процента }
Можно было, сделать и одной строкой, просто по правилам математики- но разложил для понимания
![]()
Nikita Androsov
|
Добрый день.
Попробовал ваш способ, что то не получилось. Решил проблему так: $mincena = (int) $arResult['MIN_PRICE']['VALUE']; $maxprice = (int) $arResult['PROPERTIES']['MAXIMUM_PRICE']['VALUE']; if ($mincena !== $maxprice) { $DifsPercent = $mincena * 100 / $maxprice; $procentskidki = (int) 100 - $DifsPercent; echo '<pre>'; echo (floor($procentskidki)).'%'; echo '</pre>'; } ?> |
![]()
Артур
|
Добрый день, подскажите пожалуйста как реализовать вывод двух типов цен для одного товара с условием -
при покупке до 5 единиц товара - розничная цена, если добавляем 6 и выше оптовая. |
На нем, уже много видеоуроков по 1С-Битрикс. Как одиночные видео так и серии видеоуроков Перейти на канал
Совсем скоро выйдет видеокурс по разработке доски объявлений с мобильным приложением. Подписывайтесь и будьте в курсе: