Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

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

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.

Включено в стоимость разработки

В цену уже заложено всё, что нужно для легального и быстрого запуска. Доплачивать за базовые вещи не придётся.

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс