Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

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

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

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

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

Роман Селькин 29.05.2020
Вставил данный код/ При выполнении скрипта возникла ошибка.
Михаил Базаров 30.05.2020
Цитата
Роман Селькин написал:
$sectionFullPath = CIBlockSection::GetNavChain(false,$ar_group['ID']);  while($arSectionPath = $sectionFullPath->GetNext()){    print_r($arSectionPath)  } }
Вот так
Код
$ElementId = $arResult['ID'];
    $db_groups = CIBlockElement::GetElementGroups($ElementId, true);
    while($ar_group = $db_groups->Fetch()) {

   $sectionFullPath = CIBlockSection::GetNavChain(false,$ar_group['ID']);
    while($arSectionPath = $sectionFullPath->Fetch()){
      print_r($arSectionPath)
    }
}


Роман Селькин 30.05.2020
Опять ошибка скрипта.
Михаил Базаров 31.05.2020
Цитата
Роман Селькин написал:
Опять ошибка скрипта.
Лишняя скобка } в конце была
Роман Селькин 31.05.2020
Цитата
Михаил Базаров написал:
Цитата
Роман Селькин написал:
Опять ошибка скрипта.
Лишняя скобка } в конце была
Код
Array ( [ID] => 98 [TIMESTAMP_X] => 2020-05-30 22:20:50 [MODIFIED_BY] => 1 [DATE_CREATE] => 2020-05-30 13:01:54 [CREATED_BY] => 1 [IBLOCK_ID] => 3 [IBLOCK_SECTION_ID] => [ACTIVE] => Y [GLOBAL_ACTIVE] => Y [SORT] => 502 [NAME] => Постельные принадлежности [PICTURE] => 12747 [LEFT_MARGIN] => 27 [RIGHT_MARGIN] => 60 [DEPTH_LEVEL] => 1 [DESCRIPTION] => [DESCRIPTION_TYPE] => text [SEARCHABLE_CONTENT] => ПОСТЕЛЬНЫЕ ПРИНАДЛЕЖНОСТИ [CODE] => postelnye-prinadlezhnosti [XML_ID] => [TMP_ID] => [DETAIL_PICTURE] => 12748 [SOCNET_GROUP_ID] => [LIST_PAGE_URL] => #SITE_DIR#/catalog/ [SECTION_PAGE_URL] => #SITE_DIR#/catalog/#SECTION_CODE_PATH#/ [IBLOCK_TYPE_ID] => nt_magnet_catalog [IBLOCK_CODE] => nt_magnet_catalog [IBLOCK_EXTERNAL_ID] => nt_magnet_catalog_s1 [EXTERNAL_ID] => ) Array ( [ID] => 98 [TIMESTAMP_X] => 2020-05-30 22:20:50 [MODIFIED_BY] => 1 [DATE_CREATE] => 2020-05-30 13:01:54 [CREATED_BY] => 1 [IBLOCK_ID] => 3 [IBLOCK_SECTION_ID] => [ACTIVE] => Y [GLOBAL_ACTIVE] => Y [SORT] => 502 [NAME] => Постельные принадлежности [PICTURE] => 12747 [LEFT_MARGIN] => 27 [RIGHT_MARGIN] => 60 [DEPTH_LEVEL] => 1 [DESCRIPTION] => [DESCRIPTION_TYPE] => text [SEARCHABLE_CONTENT] => ПОСТЕЛЬНЫЕ ПРИНАДЛЕЖНОСТИ [CODE] => postelnye-prinadlezhnosti [XML_ID] => [TMP_ID] => [DETAIL_PICTURE] => 12748 [SOCNET_GROUP_ID] => [LIST_PAGE_URL] => #SITE_DIR#/catalog/ [SECTION_PAGE_URL] => #SITE_DIR#/catalog/#SECTION_CODE_PATH#/ [IBLOCK_TYPE_ID] => nt_magnet_catalog [IBLOCK_CODE] => nt_magnet_catalog [IBLOCK_EXTERNAL_ID] => nt_magnet_catalog_s1 [EXTERNAL_ID] => ) Array ( [ID] => 100 [TIMESTAMP_X] => 2020-05-30 23:05:05 [MODIFIED_BY] => 1 [DATE_CREATE] => 2020-05-30 13:15:09 [CREATED_BY] => 1 [IBLOCK_ID] => 3 [IBLOCK_SECTION_ID] => 98 [ACTIVE] => Y [GLOBAL_ACTIVE] => Y [SORT] => 500 [NAME] => Детские комплекты в кроватку [PICTURE] => 12750 [LEFT_MARGIN] => 28 [RIGHT_MARGIN] => 29 [DEPTH_LEVEL] => 2 [DESCRIPTION] => [DESCRIPTION_TYPE] => text [SEARCHABLE_CONTENT] => ДЕТСКИЕ КОМПЛЕКТЫ В КРОВАТКУ [CODE] => detskie-komplekty-v-krovatku [XML_ID] => [TMP_ID] => [DETAIL_PICTURE] => [SOCNET_GROUP_ID] => [LIST_PAGE_URL] => #SITE_DIR#/catalog/ [SECTION_PAGE_URL] => #SITE_DIR#/catalog/#SECTION_CODE_PATH#/ [IBLOCK_TYPE_ID] => nt_magnet_catalog [IBLOCK_CODE] => nt_magnet_catalog [IBLOCK_EXTERNAL_ID] => nt_magnet_catalog_s1 [EXTERNAL_ID] => )
Роман Селькин 04.03.2021
Михаил, добрый день.
Разделы вывели, все хорошо. Но так же и выводятся неактивные разделы. Как нам убрать неактивные разделы?
Михаил Базаров 06.03.2021
Цитата
Роман Селькин пишет:
CIBlockElement::GetElementGroups
В этот метод, передать параметр 'ACTIVE' => 'Y'
Код
 $db_groups = CIBlockElement::GetElementGroups($ElementId, Array('ACTIVE' => 'Y'));
    while($ar_group = $db_groups->Fetch()) {

   $sectionFullPath = CIBlockSection::GetNavChain(false,$ar_group['ID']);
    while($arSectionPath = $sectionFullPath->Fetch()){
      print_r($arSectionPath)
    }
Гость 12.07.2022
Добрый день, в первую очередь хочу поблагодарить за все заметки — сподвигли на изучение)
Правда не совсем получается, ЧПУ #SECTION_CODE_PATH#,  дублируется родительский раздел, может кто-то подскажет как сделать?
Код
$db_groups = CIBlockElement::GetElementGroups($arResult['ID'], true);
   while($ar_group = $db_groups->Fetch()) {
      $sectionFullPath = CIBlockSection::GetNavChain(false,$ar_group["ID"]);
      while($arSectionPath = $sectionFullPath->GetNext()){
         echo '<p><a class="btn btn-default" href="'.$arSectionPath['SECTION_PAGE_URL'].'">'.$arSectionPath['NAME'].'</a></p>';
         } 
   }
Михаил Базаров 12.07.2022
Цитата
Гость написал:
Добрый день, в первую очередь хочу поблагодарить за все заметки — сподвигли на изучение)
Правда не совсем получается, ЧПУ #SECTION_CODE_PATH#,  дублируется родительский раздел, может кто-то подскажет как сделать?
Код
 $db_groups = CIBlockElement::GetElementGroups($arResult['ID'], true);
   while($ar_group = $db_groups->Fetch()) {
      $sectionFullPath = CIBlockSection::GetNavChain(false,$ar_group["ID"]);
      while($arSectionPath = $sectionFullPath->GetNext()){
         echo '<p><a class="btn btn-default" href="'.$arSectionPath['SECTION_PAGE_URL'].'">'.$arSectionPath['NAME'].'</a></p>';
         } 
   } 

Не очень понял, сейчас негде проверить. То есть корневой раздел два раза попадает в url?
В настройках компонента и самого инфоблока все одинаково прописано по путям?
Гость 14.07.2022
Цитата
написал:
Цитата
Гость написал:
Добрый день, в первую очередь хочу поблагодарить за все заметки — сподвигли на изучение)
Правда не совсем получается, ЧПУ #SECTION_CODE_PATH#,  дублируется родительский раздел, может кто-то подскажет как сделать?
 
Код
  $db_groups = CIBlockElement::GetElementGroups($arResult['ID'], true);
   while($ar_group = $db_groups->Fetch()) {
      $sectionFullPath = CIBlockSection::GetNavChain(false,$ar_group["ID"]);
      while($arSectionPath = $sectionFullPath->GetNext()){
         echo '<p><a class="btn btn-default" href="'.$arSectionPath['SECTION_PAGE_URL'].'">'.$arSectionPath['NAME'].'</a></p>';
         } 
   }  
 

Не очень понял, сейчас негде проверить. То есть корневой раздел два раза попадает в url?
В настройках компонента и самого инфоблока все одинаково прописано по путям?
Работает такой код, может кому поможет:
Код
$db_groups = CIBlockElement::GetElementGroups($arResult['ID'], true);
while($ar_group = $db_groups->Fetch()) {
$res = CIBlockSection::GetByID($ar_group["ID"]);
if($ar_res = $res->GetNext()) {      
echo '<a href="'.$ar_res['SECTION_PAGE_URL'].'">'.$ar_res['NAME'].'</a>';              
}
}

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне ... Просмотров: 1795 Ранее я уже делал заметку на эту тему. Тогда, мы меняли значение input-а при добавлении то... Вывести дополнительное пользовательское поле, использование полей в ф... Просмотров: 16795 Если вам нужно вывести дополнительное пользовательское поле типа "Привязка к разделам инфо... Использование WebP изображений в 1С-Битрикс (на Битрикс: Веб окружени... Просмотров: 28200 WebP это современный формат сжатия изображений, который позволяет, при правильных настройк... Вывести производителей на сайте с отбором его товаров из каталога Просмотров: 19648 Достаточно частая задачка для каталога или интернет-магазина: вывести список производителе... Определить местоположение пользователя и показать магазины поблизости... Просмотров: 1844 Задача: в мобильном приложении, которое открывает сайт на 1С-Битрикс внутри себя, нужно оп... Наличие на складах в умном фильтре 1С-Битрикс, с автоматическим обнов... Просмотров: 1161 Задача: добавить возможность фильтрации товаров по складам в умном фильтре. Данные должны ... Подключение SSL на Битрикс виртуальная машина Просмотров: 13300 С первого января 2017 года, наличие безопасного соединения HTTPS становится практически об... Композитный сайт на 1С-Битрикс Просмотров: 3614 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози... Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства э... Просмотров: 6498 Задачка: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особе... Ленивая подгрузка картинок в компоненте, на vue js Битрикс Просмотров: 10375 Если на одну страницу сайта выводится большое количество картинок, которые могут долго под... Массово: применить наценку ко всем товарам каталога с пересчетом от б... Просмотров: 6401 Рассмотрим как, в магазине работающем на 1С-битрикс, массово применить наценку на все това... Автогенерация символьных кодов разделов и элементов Битрикс Просмотров: 16171 Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан ... Запретить указание количества товаров, добавляемого в корзину, в опре... Просмотров: 92 Задача состоит в том, чтобы запретить указание количества товара, добавляемого в корзину, ... Адаптивное гамбургер меню для битрикс Просмотров: 15172 Заметка коротенькая, но решил оставить ее - так как самому часто нужно нечто подобное. В а... Менять большую картинку, при клике на маленькую, в детальной карточке Просмотров: 2148 Мини скриптик, может кому пригодится для каталога товаров или новостей при использовании д... Картинка торгового предложения вместо иконки цвета, в выборе SKU Просмотров: 724 Задача: вместо не информативных иконок цветов нужно вывести детальную картинку торгового п... Вывести имя пользователя добавившего элемент инфоблока в Битрикс Просмотров: 17250 Иногда, необходимо вывести имя пользователя добавившего элемент инфоблока. Например, автор... AJAX корзина с отправкой количества из раздела каталога Просмотров: 20192 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При... Показ страницы сайта в боковом слайдере, на примере всплывающей формы... Просмотров: 3251 Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битри... Спойлер в списке новостей Битрикс Просмотров: 12209 Иногда нужно сделать спойлеры в копонентах Битрикс, в основном конечно, имеет смысл при оч...