Задача: Вывести фильтр на странице списка товаров, отфильтрованному по бренду или другому свойству.

Проблема: Так как у нас нет определённого раздела — товары выводятся из всего каталога — то мы получим в фильтре все возможные свойства, а нам бы хотелось видеть только тот набор свойств, которые есть у данных товаров.

Решение (Для работы без фасета):

Получаем ID товаров, используя те же параметры фильтрации, что и для основного списка товаров, например так

$arFilteredID = [];
$dbRes = CIBlockElement::GetList([], ["IBLOCK_ID" => 10, "PROPERTY_FABRIKA" => $ELEMENT_NAME], false, false, ["ID"]);
while($arRes = $dbRes->Fetch()){
$arFilteredID[] = $arRes["ID"];
}

В параметры фильтра добавляем ещё один с массивом ID

"FILTERED_ID" => $arFilteredID

В кастомизированном компоненте фильтра добавляем условие. Добавляется в ту часть, которая работает без фасеточного фильтра (условие $this->facet->isValid() === false).

if(isset($arParams["FILTERED_ID"]) && is_array($arParams["FILTERED_ID"]) && count($arParams["FILTERED_ID"]) > 0){
$arElementFilter["ID"] = $arParams["FILTERED_ID"];
}