Если нужно вывести информацию о скидке в карточке товара, можно воспользоваться методом 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- тут уже, дело дизайна и техники.
На нем, уже много видеоуроков по 1С-Битрикс. Как одиночные видео так и серии видеоуроков Перейти на канал
Совсем скоро выйдет видеокурс по разработке доски объявлений с мобильным приложением. Подписывайтесь и будьте в курсе: