Задача: вывести товары на странице бренда, выведенного компонентом "Новости", с ссылками на разделы в каталоге с применением умного фильтра.
Данная заметка продолжение к:
Отфильтровать товары бренда и вывести по разделам каталога

Получение XML-id значения типа список через API Битрикс
Для создания ссылки на результат фильтрации умного фильтра, нам нужно получить XML-id значения с указанным брендом. Привожу весь код целиком, размещаем его в component_epilog.php шаблона детальной новости, пояснения ниже:
$iblockId = 4;
$brandName = $arResult['NAME'];
$GLOBALS['arrFilterBrand'] = array(
"PROPERTY_PROIZVODITEL_VALUE" => $brandName
);
// Получаем XML ID значения свойства для ссылки на фильтр
$propertyRes = \Bitrix\Iblock\PropertyTable::getList([
'filter' => [
'IBLOCK_ID' => $iblockId,
'CODE' => 'PROIZVODITEL'
],
'select' => ['ID']
]);
if ($property = $propertyRes->fetch()) {
// Получаем значения списка
$enumRes = \Bitrix\Iblock\PropertyEnumerationTable::getList([
'filter' => [
'PROPERTY_ID' => $property['ID'],
'VALUE' => $brandName
],
'select' => [
'ID',
'XML_ID'
]
]);
if ($enum = $enumRes->fetch()) {
$propXmlId = $enum['XML_ID'];
}
}
// end Получаем XML ID значения свойства для ссылки на фильтр
// Получаем ссылки на разделы с этим брендом
$listGoods = CIBlockElement::GetList(
false,
array(
'IBLOCK_ID' => $iblockId,
'PROPERTY_PROIZVODITEL_VALUE' => $brandName,
'ACTIVE' => 'Y'
),
false,
false,
array('ID')
);
while ($goods = $listGoods->Fetch()) {
$ElementId = $goods['ID'];
$db_groups = CIBlockElement::GetElementGroups(
$ElementId,
true,
);
while ($ar_group = $db_groups->GetNext()) {
$arSections[$ar_group['ID']]['NAME'] = $ar_group['NAME'];
$arSections[$ar_group['ID']]['URL'] = $ar_group['SECTION_PAGE_URL'] . 'find/proizvoditel-is-' . $propXmlId . '/apply/';
}
}
// end Получаем ссылки на разделы с этим брендом
foreach ($arSections as $k => $arSection) { ?>
<a href="<?= $arSection['URL'] ?>">
<?= $arSection['NAME'] ?>
</a>
<?}
$APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"section",
array(
// Это компонент раздела выводящий все товары бренда
"FILTER_NAME" => "arrFilterBrand",
),
false
);?>
Для начала, в коде задаются необходимые переменные: ID инфоблока, содержащего товары, и название бренда, которое берется из газвания "Новости" $arResult['NAME']. Далее, создается глобальный фильтр $GLOBALS['arrFilterBrand'], чтобы в дальнейшем при выборке товаров учитывать производителя.
Затем идет получение XML-ID значения свойства "Производитель". Это нужно для того, чтобы корректно сформировать ссылки на страницы разделов каталога с примененным умным фильтром. Используя класс \Bitrix\Iblock\PropertyTable, сначала мы находим ID свойства "PROIZVODITEL" в инфоблоке. После этого, через \Bitrix\Iblock\PropertyEnumerationTable, по найденному ID свойства и имени бренда получаем XML-ID нужного значения. Этот XML-ID будет использован в ссылках на страницы с фильтрацией.
После получения XML-ID происходит выборка товаров, относящихся к данному бренду. Это делается с помощью метода CIBlockElement::GetList(), где фильтруются только активные товары по инфоблоку и значению свойства "Производитель". Для каждого найденного товара с помощью метода CIBlockElement::GetElementGroups() определяется, в каких разделах каталога этот товар находится.
На следующем этапе для каждого раздела, в котором присутствует товар данного бренда, формируется ссылка с
фильтрацией по XML-ID производителя. Ссылки строятся на основе базового URL раздела каталога, добавляя в конец
строки параметр фильтрации вида:
find/proizvoditel-is-..XML_ID../apply/.
Заключительным шагом является вывод полученных ссылок на разделы каталога. Каждая ссылка отображает название раздела и ведет на страницу с товарами, отфильтрованными по бренду, что позволяет пользователям быстро найти товары конкретного производителя в нужных разделах.