Если нужно вывести все разделы, со всей доступной информацией о них, внутри элемента инфоблока, например в карточке товара каталога- можно воспользоваться 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 и пытается получить все поля раздела с лишними запросами к БД
Интересное решение описывается в вашей статье. Но у меня ЧПУ #catalog/#SECTION_CODE#/
Видимо, поэтому и не работает.
Не подскажете, какие правки в код внести, чтобы работало на SECTION_CODE ?

Михаил не могли бы помочь.
В result.modifier.php получаю все разделы элемента, но так как с GetElementGroups я не могу получить UF_ свойства, надо дальше прогнать GetList
Код |
---|
foreach ($arResult['ITEMS'] as $key => $arItem) { $arSectionList = array(); $rsSections = CIBlockElement::GetElementGroups($arItem['ID']); while ($arSection = $rsSections->GetNext()) { $arSectionList[] = array( 'ID' => $arSection['ID'], 'NAME' => $arSection['NAME'], 'SECTION_PAGE_URL' => $arSection['SECTION_PAGE_URL'], ); } $arItem['SECTION_LIST'] = $arSectionList; $arResult['ITEMS'][$key] = $arItem; } $arSection = CIBlockSection::GetList( Array( ), Array( "ACTIVE" => "Y", "IBLOCK_ID" => 2, "ID" => $arSection['ID'], ), false, Array( "ID", "UF_*" ) )->fetch(); |
Не получаю то, что мне нужно. Понимаю что не так сделал , не силен в этом.
Как мне добавить в полученный массив SECTION_LIST к каждому элементу дополнительно все свойства UF_
не могли бы помочь? Спасибо

Цитата |
---|
jerrard.genry написал: Добрый день. Михаил не могли бы помочь. В result.modifier.php получаю все разделы элемента, но так как с GetElementGroups я не могу получить UF_ свойства, надо дальше прогнать GetList Не получаю то, что мне нужно. Понимаю что не так сделал , не силен в этом. Как мне добавить в полученный массив SECTION_LIST к каждому элементу дополнительно все свойства UF_ не могли бы помочь? Спасибо |
И GetNext вместо Fetch

Цитата | ||
---|---|---|
Михаил Базаров написал:
И GetNext вместо Fetch |
Можете показать пример решения пожалуйста или направить в нужную сторону?
Хочется понять как можно было только с CIBlockSectionGetList


Только учтите, что будет сортировка именно по названию раздела, а не по его SECTION_META_TITLE
Код |
---|
$ElementId = $arResult['ID']; $db_groups = CIBlockElement::GetElementGroups($arResult['ID'], true); while ($ar_group = $db_groups->Fetch()) { $arGroups[] = $ar_group["ID"]; // Создаем массив с группами } $dbRes = CIBlockSection::GetList( array( 'NAME' => 'ASC', // И прочие виды сортировок ), array( 'IBLOCK_ID' => $arResult['IBLOCK_ID'], // Для скорости, что бы не перебирало все инфоблоки ), false, array ( 'ID', 'NAME', 'SECTION_PAGE_URL' ) ); while ($arDbRes = $dbRes->GetNext()) { if (!in_array($arDbRes['ID'], $arGroups)) { continue; // Если группы нет в массиве продолжаем, иначе выводим } $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> <? } |