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

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

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

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

Объединить отдельные поля ФИО в одно свойство при оформлении заказа. Просмотров: 855 Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отч... Отфильтровать товары бренда и вывести по разделам каталога Просмотров: 629 Задача: на странице бренда, который выводится компонентом новостей, нужно показать все тов... Заполнить поля пользователя из свойства заказа, на примере ФИО Просмотров: 1170 При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в п... Получить все товары из всех заказов пользователя. История купленных т... Просмотров: 1345 Задача: нужно создать раздел, в персональном разделе пользователя, с историей всех купленн... Старые шаблоны битрикс для простой верстки Просмотров: 16888 Новые версии типового интернет-магазина, который идет в комплекте с Битрикс (от 12 версии ... Бонус за выполненный заказ на внутренний счет пользователя Просмотров: 4233 Задача: после того как заказ, в интернет-магазине, перешел в статус "Выполнен" начислить п... Правильное подключение стилей и скриптов в Битрикс Просмотров: 80470 Есть несколько способов подключения файлов стилей и скриптов, при верстке шаблонов в систе... Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый з... Просмотров: 28402 Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битр... Перенос Битрикс сайта с хостинга на хостинг, инструкция Просмотров: 25983 Достаточно часто спрашивают как перенести сайт работающий на 1С Битрикс с одного хостинга ... Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 4216 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по... Создание PWA для сайта на 1С-Битрикс Просмотров: 2052 Технология PWA позволяет создать приложение для любого сайта. Не обязательно работающего ... Отключить поиск по описаниям товаров в Битрикс Просмотров: 10581 Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разр... Информация о заказах и содержимое корзины текущего пользователя. Просмотров: 11731 В процессе разработки сайта могут понадобиться рецепты приведенные ниже. Использовать можн... INPUT type="file" Предпросмотр превью картинки до загрузки Просмотров: 11188 Рассмотрим на примере компонента "Форма добавления-редактирования элементов инфоблока", ка... Заполнение габаритов товара, после обмена с 1С, из свойств элемента и... Просмотров: 10383 Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1... Автогенерация символьных кодов разделов и элементов Битрикс Просмотров: 14950 Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан ... Использование WebP изображений в 1С-Битрикс (на Битрикс: Веб окружени... Просмотров: 25832 WebP это современный формат сжатия изображений, который позволяет, при правильных настройк... Вывести артикул в печатную форму бланка заказа Просмотров: 350 Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе. ... Сортировка элементов по индексу сортировки значений типа список Просмотров: 10497 Внутри любого компонента есть заранее заложенные поля для сортировки элементов. МОжно сорт... Постраничная навигация в списке разделов Битрикс- catalog.section.lis... Просмотров: 8660 Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно...