Если нужно вывести все разделы, со всей доступной информацией о них, внутри элемента инфоблока, например в карточке товара каталога- можно воспользоваться API методом CIBlockElement::GetElementGroups
Перелинковка на разделы, в которых находится элемент каталога
Например: У нас есть каталог товаров, элементы которого могут находиться сразу в нескольких разделах инфоблока. Внутри карточки товара, мы хотим вывести ссылки на все разделы, в которых эта каточка находится. Что бы пользователям-покупателям было удобно отбирать товары
Пусть, визуально, это будет выглядеть так. Настройки ЧПУ для разделов инфоблока /catalog/#SECTION_ID#/
Для этого достаточно вывести названия и ID всех разделов в которых находится товар и сверстать.
Воспользуемся API методом CIBlockElement::GetElementGroups.
$ElementId = $arResult['ID'];
$db_groups = CIBlockElement::GetElementGroups($ElementId, true);
while($ar_group = $db_groups->Fetch()) {
echo 'Все товары: <a href="/catalog/'. $ar_group["ID"] . '/">';
echo $ar_group["NAME"];
echo "</a>";
}
В коде, я не использую фильтр, в $ar_group хранится вообще вся информация о разделах: картинка, символьный код, дата создания итд. Но вывожу только ID- для постороенния ссылки и название.
Улучшение, c SEO параметрами
Получаем полный URL до каждого раздела и в качестве названия берем не его настоящее название, а заголовок из SEO настроек раздела.
$db_groups = CIBlockElement::GetElementGroups($arResult['ID'], true);
while ($ar_group = $db_groups->Fetch()) {
$dbRes = CIBlockSection::GetList(
false,
array(
'ID' => $ar_group["ID"]
),
false,
false,
array (
'ID',
'NAME',
'SECTION_PAGE_URL'
)
);
while ($arDbRes = $dbRes->GetNext()) {
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues(
$arResult['IBLOCK_ID'],
$arDbRes["ID"]
);?>
<a href="<?echo $arDbRes['SECTION_PAGE_URL'];?>">
<?echo $ipropValues->getValues()['SECTION_META_TITLE']?>
</a>
<?
}
}
С помощью CIBlockSection::GetList получили нужную информацию о разделе (получение NAME тоже оставил). И с помощью \Bitrix\Iblock\InheritedProperty\SectionValues получли настройки из SEO параметров раздела
Да, можно было воспользоваться CIBlockSection::GetByID вместо CIBlockSection::GetList, но нагрузка будет чуть выше, так как CIBlockSection::GetByID это обвертка над CIBlockSection::GetList и пытается получить все поля раздела с лишними запросами к БД