Есть стандартный компонент фильтра каталога bitrix::catalog.filter, стояла задача изменить компонент для фильтрации по заданным свойствам , в данном случае по номеру категории(свойству элемента) и отобразить в dropdown поле фильтра только те категории , в которых присутствуют элементы с заданным номером категории. Т.е. есть инфоблок , в нем секции , в каждой секции элементы , у каждого элемента в свойстве есть ID категории . Все работало бы великолепно, но... так как понадобилось отображать только те категории , в которых присутствуют элементы с заданным свойством , то пришлось в цикле проходить все категории,внутри в другом цикле перебираем секции , внутри в цикле перебираем элементы и считаем кол-во элементов у которых значение свойства категории совпадает в id категории из внешнего цикла. Все бы ничего , но, в каждой секции куча элементов ( >100 ). Тормоза жуткие.
Есть ли какое другое решение данной проблемы.
Вот кусок кода , подсчёта , есть еще внешний цикл , который перебирает категории (переменная $key)
$counter[$key]=0;
$arFilter11 = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"], "SECTION_ID"=>$_REQUEST['SECTION_ID']);
$res11 = CIBlockElement::GetList(Array(), $arFilter11);
while ($obEl11 = $res11->GetNextElement())
{
$props11 = $obEl11->GetProperties();
if ($props11["T83"]["VALUE_ENUM_ID"]==$key)
{
$counter[$key]=$counter[$key]+1;
}
}
Есть ли какое другое решение данной проблемы.
Вот кусок кода , подсчёта , есть еще внешний цикл , который перебирает категории (переменная $key)
$counter[$key]=0;
$arFilter11 = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"], "SECTION_ID"=>$_REQUEST['SECTION_ID']);
$res11 = CIBlockElement::GetList(Array(), $arFilter11);
while ($obEl11 = $res11->GetNextElement())
{
$props11 = $obEl11->GetProperties();
if ($props11["T83"]["VALUE_ENUM_ID"]==$key)
{
$counter[$key]=$counter[$key]+1;
}
}