Вывести все разделы в которых находится элемент инфоблока

Просмотров: 24221

Если нужно вывести все разделы, со всей доступной информацией о них, внутри элемента инфоблока, например в карточке товара каталога- можно воспользоваться 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 и пытается получить все поля раздела с лишними запросами к БД

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 400 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 400 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 250 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 300 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 30 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.