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

Просмотров: 2614 | Комментариев: 6

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

В общем-то и все, Остается это сверстать под свой дизайн.


Привет.
Интересное решение описывается в вашей статье. Но у меня ЧПУ #catalog/#SECTION_CODE#/
Видимо, поэтому и не работает.
Не подскажете, какие правки в код внести, чтобы работало на SECTION_CODE ?
Михаил
Цитата
Stanislav2636 пишет:
echo 'Все товары: ';
Попоробуйте в этой строчке

Код
 echo 'Все товары: <a href="/catalog/'. $ar_group["ID"] . '/">'; 

Поменять ID на SECTION_CODE, по идее он тоже сюда передается
Или, получить SECTION_CODE зная ID раздела


Код
$arResult["SECTION_INFO"] = array();
$obSection = CIBlockSection::GetList(array(), "ID"=>$arSectionID); // где $arSectionID собранный вами массив
while($arSection = $obSection->Fetch();)
   $arResult["SECTION_INFO"][$arSection["ID"]] = $arSection; 
Иван
Добрый день, Михаил! Отличное решение, Подскажите как вывести эти разделы в алфавитном порядке?
Михаил
Цитата
Иван Чухрай написал:
Добрый день, Михаил! Отличное решение, Подскажите как вывести эти разделы в алфавитном порядке?
Наверное, самое просто и не монструозное решение:
Загнать названия, моим способом, в массив.
Потом этот массив отсортировать по алфавиту, способом
Код
sort($ВАШМАССИВ, SORT_STRING);
ну и вывести все foreach- ем
Михаил
Отмена с массивом. Там можно конечно, на будет глупо не воспользоваться самим методом GetElementGroups
У него есть работа с сортировкой, соотвественно:
Код
$ElementId = $arResult['ID'];
    $db_groups = CIBlockElement::GetElementGroups($ElementId, SORT=>"NAME");
    while($ar_group = $db_groups->Fetch()) {
        echo 'Все товары: <a href="/catalog/'. $ar_group["ID"] . '/">';
        echo $ar_group["NAME"];
        echo "</a>";
}
Иван
Цитата
Михаил Базаров пишет:
Отмена с массивом. Там можно конечно, на будет глупо не воспользоваться самим методом GetElementGroups
У него есть работа с сортировкой, соотвественно:
Код
 $ElementId = $arResult['ID'];
    $db_groups = CIBlockElement::GetElementGroups($ElementId, SORT=>"NAME");
    while($ar_group = $db_groups->Fetch()) {
        echo 'Все товары: <a href="/catalog/'. $ar_group["ID"] . '/">';
        echo $ar_group["NAME"];
        echo "</a>";
} 
При выполнении скрипта возникла ошибка.


А так все равно по алфавиту не сортирует:
Код
$db_groups = CIBlockElement::GetElementGroups($ElementId, array (SORT=>"NAME"));

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

Показать еще