Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Вывести дату окончания скидки в карточке товара

Вывести дату окончания скидки в карточке товара

Если нужно вывести информацию о скидке в карточке товара, можно воспользоваться методом CCatalogDiscount::GetList. Данный метод позволяет получить любую информацию о скидке: купон, название, типа скидки и.т.д. Но, я думаю, наиболее актуально вывести дату окончания скидки или количество дней до окончания.

Получаем информацию о скидке

Для начала, создаем скидку с интевалом в модуле маркетинга и выводим всю информацию о ней, в карточке товара:


$PRODUCT_ID = $arResult['ID'];
$dbProductDiscounts = CCatalogDiscount::GetList(
    array("SORT" => "ASC"),
    array(
            "+PRODUCT_ID" => $PRODUCT_ID,
            "ACTIVE" => "Y",
        ),
    false,
    false,
    array(
            "ID", 
            "SITE_ID", 
            "ACTIVE", 
            "ACTIVE_FROM", 
            "ACTIVE_TO", 
            "RENEWAL", 
            "NAME", 
            "SORT", 
            "MAX_DISCOUNT", 
            "VALUE_TYPE", 
    		"VALUE", 
    		"CURRENCY"
        )
    );
while ($arProductDiscounts = $dbProductDiscounts->Fetch())
{
   print_r($arProductDiscounts)
}

В массиве arProductDiscounts - распечатается вся доступная информация о скидке. Но нам нужна только дата завершения- ACTIVE_TO. Эту дату сразу загоняем в переменную $saleDateTo. Обратите внимание, что если скидка уже осталась в прошлом- дата выведется в любом случае. Что бы этого не происходило, в фильтре оставляем отбор по активности "ACTIVE" => "Y" (флаг активности у прошедших скидок,снимается автоматически).


$dbProductDiscounts = CCatalogDiscount::GetList(
    array("SORT" => "ASC"),
    array(
        "+PRODUCT_ID" => $arResult['ID'],
        "ACTIVE" => "Y"
    ),
    false,
    false,
    array(
        "ACTIVE_TO"
    )
);
while ($arProductDiscounts = $dbProductDiscounts->Fetch()) {
        $saleDateTo = $arProductDiscounts['ACTIVE_TO'];
}

Собственно, если нужно просто вывести дату. Выводим переменную $saleDateTo в нужном месте шаблона.

Выводим количество дней до конца скидки

Более актуально, вывести количество дней до конца скидки. При этом, если осталось меньше одного дня, выводит "закончится сегодня".

Просто высчитываем разницу между текущей датой и датой завершения активности скидки. Подсказки в комментариях:


$diffSaleToDate = strtotime($saleDateTo) - strtotime(date("d.m.Y h:m:s"));
$saleEndDiff = floor($diffSaleToDate / 86000);
if ($saleEndDiff > 1) {
    $daysToEndSale = 'Закончится через ' . $saleEndDiff . ' дн.';
} elseif ($saleEndDiff = 1) {
    $daysToEndSale = 'Закончится сегодня';
} else {
    unset($saleEndDiff);
}

Здесь. С помощью strtotime перевели обе даты (сегодняшний день и дату завершения скидки) в секунды, вычли из большей меньшую и разделили на 86000 (количество секунд в сутках) с округлением до целого числа.

Таким образом, в переменной saleEndDiff получили количество дней до конца скидки. И простым if-ом, создали переменную daysToEndSale c нужным текстом.

Собственно и все. Выводим и красиво оформляем, в нужном месте, переменную $daysToEndSale - c количеством дней до конца скидки.

При желании, можно все оставить в секундах и сделать красивый виджет, обратного отсчета на jquery- тут уже, дело дизайна и техники.

Написать первый комментарий: Комментарии проходят модерацию, появится после проверки.

Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Нажимая кнопку "Отправить" вы соглашаетесь
с политикой конфиденциальности и обработки персональных данных.

После нажатия страница перезагрузится.
Все нормально, ваш коммент будет отправлен.
Скоро починю, чтобы работало с ajax.

Случайные заметки

Создание PWA для сайта на 1С-Битрикс

Просмотров: 483 Комментариев: 1
Технология PWA позволяет создать приложение для любого сайта. Не обязательно работающего на 1С-Битрикс, данная заметка будет актуальной для любого ти...

Умный фильтр на главной странице Битрикс

Просмотров: 18331 Комментариев: 15
Редкая но востребованная задачка- это вывести компонент "умный фильтр" на главную страницу магазина на Битрикс. При этом так, что бы он отправлял на р...