Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Список товаров со скидкой

00 голосов
9
Здравствуйте.
Все не могу понять.
Есть ли в битриксе возможность вывести список всех товаров (независимо от того в каком он блоке и разделе) на которые поставлена скидка.
Чтобы, например, на главной странице поставить ссылку "все товары со скидками", которая будет вести на страничку ч этим списком.
Возможно ли это осуществить с помощью стандартных модулей или надо писать дополнительный?

Заранее спасибо!
спросил 16 Май, 13 от Lucav (160 баллов)

9 Ответы

00 голосов
И еще раз спасибо за оперативность!
ответил 16 Май, 13 от Lucav (160 баллов)
00 голосов
мне тоже интересно
ответил 16 Май, 13 от Unakas (220 баллов)
00 голосов
Как вариант можно добавить свойство "Скидка" (Y/N) и включить его в фильтр при выводе товаров...


хех.. .а на дату-то ит не посмотрел =))))
ответил 28 Июль, 13 от Aythis (740 баллов)
00 голосов
А есть более норманые варианты?
ответил 31 Окт, 13 от TcupkyJIb (140 баллов)
00 голосов
Также интересует эта возможность!
ответил 05 Фев, 14 от Fulgrim (140 баллов)
00 голосов
Ну где же вы таланты??
ответил 25 Май, 14 от Belfegor (100 баллов)
00 голосов
Там где деньги платят, логично ведь?
ответил 22 Сен, 14 от Cyber (540 баллов)
00 голосов
Другого способа, кроме как изменения компонента catalog.section я не нашел. Для изменения компонента надо его скопировать в свою папку с компонента например /bitrix/components/my_components/.
Вот код. Его надо добавить после начала кеширование и до выборки элементов. Воможно есть решение и попроще, но я ничего лучшего не придумал.

Код
 CModule::IncludeModule("catalog");
/*Делаем выборку всех активных скидок*/
$rsDiscount = CCatalogDiscount::GetList(
   array(),
   array(
      "ACTIVE" => "Y",
      "!>ACTIVE_FROM" => $DB->FormatDate(date("Y-m-d H:i:s"), 
                                 "YYYY-MM-DD HH:MI:SS",
                                 CSite::GetDateFormat("FULL")),
      "!<ACTIVE_TO" => $DB->FormatDate(date("Y-m-d H:i:s"), 
                               "YYYY-MM-DD HH:MI:SS", 
                               CSite::GetDateFormat("FULL")),
      "COUPON" => "",
   )
);
$fl = false;
while($arDiscount=$rsDiscount->Fetch()){
   $fl = true;
   /*Если ограничения скидки не заданы, значит в распродаже учавствуют все товары*/
   if(intval($arDiscount["PRODUCT_ID"])==0&&
      intval($arDiscount["SECTION_ID"])==0&&
      intval($arDiscount["CATALOG_GROUP_ID"])==0&&
      intval($arDiscount["IBLOCK_ID"])==0
   )
   {
      $arDiscounts = array();
      break;
   }
   /*Формируем массив для фильтра*/
   if(intval($arDiscount["PRODUCT_ID"])>0){
      $arDiscounts[$arDiscount["ID"]]["ID"][] = $arDiscount["PRODUCT_ID"];
   }
   if(intval($arDiscount["SECTION_ID"])>0){
      $arDiscounts[$arDiscount["ID"]]["SECTION_ID"][] = $arDiscount["SECTION_ID"];
   }
   if(intval($arDiscount["CATALOG_GROUP_ID"])>0){
      $arDiscounts[$arDiscount["ID"]][">CATALOG_PRICE_".$arDiscount["CATALOG_GROUP_ID"]] = 0;
   }
   if(intval($arDiscount["IBLOCK_ID"])>0){
      $arDiscounts[$arDiscount["ID"]]["IBLOCK_ID"][] = $arDiscount["IBLOCK_ID"];
   }
}
$i=0;
if(count($arDiscounts)>0){
   $filter[] = array(
      "LOGIC"=>"OR"
   );
   foreach($arDiscounts as $arDiscountFilter){
      $filter[0][$i++] = $arDiscountFilter;
      /*Скидка действует на все вложенные разделы*/
      if(count($arDiscountFilter["SECTION_ID"])>0)
         $filter[0][$i-1]["INCLUDE_SUBSECTIONS"] = "Y";
   }
}
elseif(!$fl){
   /*Если нету активных скидок, ничего не выводим*/
   $filter["IBLOCK_ID"] = 100500;
}
if(count($filter)>0){
   $arrFilter = array_merge($arrFilter,$filter);
}
ответил 26 Янв, 15 от Zeke (100 баллов)
00 голосов
Данный вариант не работает если в каталоге используются товарные предложения
ответил 10 Май, 15 от Miss2008 (160 баллов)

Похожие вопросы

0 голосов
3 ответов
спросил 17 Март, 14 от Vofka (100 баллов)
0 голосов
3 ответов
спросил 03 Окт, 13 от TyZu4eG (120 баллов)
0 голосов
1 ответ
спросил 26 Сен, 13 от rullezzz (220 баллов)
0 голосов
0 ответов
спросил 07 Июль, 13 от Limur (240 баллов)
0 голосов
2 ответов
спросил 22 Июнь, 13 от Minova (160 баллов)