Я действовал от обратного: доставал все бренды, а потом просто искал в каталоге (те элементы, которые фильтруем) элементы, у которых есть данный бренд. Если находил хотя бы один, то оставлял бренд в списке.
Код |
---|
$brandRes = CIBlockElement::GetList(
array(),
array("IBLOCK_ID" => $brand)
);
$brands = array();
while($brandOb = $brandRes -> GetNext()){
$res = CIBlockElement::GetList(
array(),
array(
"IBLOCK_ID" => $catalog,
"SECTION_ID" => $_GET["SECTION_ID"],
"ACTIVE" => "Y",
"PROPERTY_BRAND" => $brandOb["ID"]
),
false,
array("nTopCount" => 1)
);
if($ob = $res->GetNext()) $brands[] = $brandOb["ID"];
} |
Понимаю, что много лишних запросов к базе, но, используя только API, ничего более подходящего не нашел. Ну, и не стоит забывать про кэш, так что особо сильного замедления не произошло.