Перед владельцами интернет-магазинов все чаще ставиться задачка на разработку систему скидок. Товары загружаются базовой ценой и дополнительными ценами для отдельных групп покупателей. Для примера можем рассмотреть группу лояльных клиентов. Для них применяются льготы цены, которые соответственно ниже базовой стоимости. И тут встает проблема в отображении подобных привилегий. В стандартных решениях интернет-магазинов при входе пользователем из группы лояльных клиентов посетитель видит обновленную цену на товар и принимает это как типичные снижения цен. Применяемые бонусы остаются за кулисами. Дополнительная мотивация, которую мы преследовали уходит на нет.
Для выхода из ситуации и повысить привлекательность предлагаемых товаров можем произвести косметические изменения на карточке товара и воспользоваться уже добавленными данными о ценах.
Первым делом определим алгоритм наших действий:
- Сравним базовую и скидочную стоимость товара
- Если имеет место бонусных привилегий - указываем базовую стоимость как зачеркнутую старую и выделенную обновленную цену. Дополнительно выводим стикер с указанием значения применяемой скидки.
Используем CPrice::GetList для цен товара
Для этого необходимо каждый тип цен передать в переменную $arElement.
$db_res_dis = CPrice::GetList(array(), array("PRODUCT_ID" => $ID, "CATALOG_GROUP_ID" => <тут необходимо указать ID типа цены>,));
if ($discountPrice = $db_res_dis->Fetch()) {
$arElement["PRICE_RIC"] = round($discountPrice['PRICE']);
}
$disPrice = $arElement['PRICE_RIC'];
$disPrice = (int)$disPrice;
Точно таким образом провернем все манипуляции с базовой ценой.
$db_res_base = CPrice::GetList(array(), array("PRODUCT_ID" => $ID, "CATALOG_GROUP_ID" => '7',));
if ($basePrice = $db_res_base->Fetch()) {
$arElement["PRICE_RET"] = round($basePrice['PRICE']);
}
$bPrice = $arElement['PRICE_RET'];
$bPrice = (int)$bPrice;
Для дальнейшего использования у нас теперь имеются следующие переменные: $disPrice и $bPrice.
Теперь остается соответственно сам процесс сравнения:
if ($disPrice == $bPrice) { //Условия на существование скидки. Проверяет отличаются ли цены
echo '<div class="old_price">'.$arElement['PRICE_RET'].'</div>'; //Публикуем розничную цену
} else {
echo '<div class="old_price">'.$arElement['PRICE_RET'].'</div>'; //Публикуем базовую цену с визуальным вычеркиванием
echo '<div class="old_price">'.$arElement['PRICE_RIC'].'</div>'; //Выводим актуальную цену со скидкой
}
Для усиления эффекта бонусов разницу опубликуем в виде процентов в выделенной для этого плашке.
if ($disPrice !== $bPrice) {
$Diff = 100 - $disPrice * 100 / $bPrice;
echo '<div class="discount_area">'.$LabelPercent.' %</div>';
}
В результате клиент увидит обновленную цену и примененные к ней бонусы. Дело сделано