Фильтрация товаров по наличию скидок в CMS 1C-Bitrix

29 мая 2014

Встречаются ситуации, когда необходимо вывести товары со скидками в 1C-Bitrix. Стандартных средств фильтрации нет, но можно получить эти товары со скидками, а затем применить фильтр по ним.
Но не всегда скидки в 1С Битриксе создают с привязкой к элементам, а также к разделам.

Следующий код получает ID элементов не только из скидок с привязкой к элементам, но и к разделам.

$arDiscountElementID = $arDiscountSectionID = array();
$dbProductDiscounts = CCatalogDiscount::GetList(
array("SORT" => "ASC"),
array(
"ACTIVE" => "Y",
"!>ACTIVE_FROM" => $DB->FormatDate(date("Y-m-d H:i:s"),
"YYYY-MM-DD HH:MI:SS",
CSite::GetDateFormat("FULL")),
"! $DB->FormatDate(date("Y-m-d H:i:s"),
"YYYY-MM-DD HH:MI:SS",
CSite::GetDateFormat("FULL")),
"COUPON" => ""
),
false,
false,
array(
"ID", "PRODUCT_ID", "SECTION_ID"
)
);
while ($arProductDiscounts = $dbProductDiscounts->Fetch()) {
$arDiscountElementID[] = $arProductDiscounts["PRODUCT_ID"];
if($arProductDiscounts["SECTION_ID"] && !in_array($arProductDiscounts["SECTION_ID"], $arDiscountSectionID))
$arDiscountSectionID[] = $arProductDiscounts["SECTION_ID"];
}
if($arDiscountSectionID) {
$arFilter = Array("SECTION_ID" => $arDiscountSectionID, "IBLOCK_ID" => $arParams["IBLOCK_ID"], "INCLUDE_SUBSECTIONS" => "Y", "ACTIVE_DATE" => "Y", "ACTIVE" => "Y");
$arSelectFields = Array("IBLOCK_ID", "ID");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, false, $arSelectFields );
while($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$arDiscountElementID[] = $arFields["ID"];
}
}

Если фильтр нужно применить, например, для store.catalog.top или catalog.section, определим его

global $arrFilter; //где arrFilter - название фильтра
$arrFilter = array("ID" => $arDiscountElementID);
unset($arResult["VARIABLES"]); //очистим информацию о разделе

  • Реклама сайта
  • Категории
  • Комментарии автору
    • Это очень классная идея )) С нетерпением жду!!! Ты мозг! Респект
    • традиционно - плюс за классную штуку
    • Просто хотел лично тебе выразить свою благодарность! Очень обрадовал меня, что помог!
    • Очень помог! Этот человек гений и я рад, что такие люде ещё есть!
    • Помог реализовать добавление музыки
    • За решение проблема знак вопрос квадрат у строка заголовок
    • very helped me =)
    • Спасибо за Social Engine!
    • Спасибо большое
    • вот спасибо :)
    • Красавчик)))
    • классная штука
    • superman
    • evteev, ты кудесник.
    • +1, решили проблему. Evteev, большое спасибо.
    • кул кул и ещё раз кул.
    • помог решить проблему с вкладкой с музыкой! Спасибо!
    • спасибо тебе огромное, работает!
    • СПАСИБО за мод, сэкономило мне уйму времени на создание своего.
  • Статистика