Другого способа, кроме как изменения компонента 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);
} |