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

Пункты меню из разделов инфоблока Битрикс

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

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

Добавляем разделы в инфоблок:

Предположим что нам нужно создать меню из подкатегорий новостей. У нас уже есть готовый инфоблок для новостей и он выведен на сайт. В общем новости работают. И наступил момент, что новостей стало достаточно много и пора их разбить на несколько категорий: "Спорт", "Финансы" и.т.д.

Для начала создаем эти разделы:

создание раздела в инфоблоке битрикс

Теперь задача создать пункты выпадающего меню, которое автоматически будет брать разделы в качестве своих пунктов. Для этого нужно создать необходимый тип меню в Управлении структурой. В моем случае я создаю тип меню "Меню подраздела"

создание меню

Создаем в нужном каталоге сайта этот тип меню и рядом с ним создаем такой же файл с приставкой _ext.php.

Создание ext меню

В моем примере я создаю блог на основе компонента новостей, потому каталог и соответствующий инфоблок называются blog

Настройка ext меню в битрикс

В меню сайта необходимо подключить соответствующее меню в пункте "Тип меню для остальных уровней:" и установить чекбокс для "Подключать файлы с именами вида .тип_меню.menu_ext.php:"

ext меню

В наше ..._ext.php меню вносим вот такие данные:

 <? 
 if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); 
      global $APPLICATION; 
      $aMenuLinksExt=$APPLICATION->IncludeComponent("bitrix:menu.sections", "", array( 
      "IS_SEF" => "Y", 
      "SEF_BASE_URL" => "/blog/", 
      "SECTION_PAGE_URL" => "#SECTION_ID#/", 
      "DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#.html", 
      "IBLOCK_TYPE" => "company", 
      "IBLOCK_ID" => "5", 
      "DEPTH_LEVEL" => "3", 
      "CACHE_TYPE" => "A", 
      "CACHE_TIME" => "36000000" 
      ), 
  false 
 ); 
 $aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks); 
 ?> 

Где:

  • "SEF_BASE_URL" => "/blog/", - каталог инфоблока на сайте
  • "SECTION_PAGE_URL" => "#SECTION_ID#/", - подставляем ID раздела
  • "DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#.html", - полный путь к элементу инфоблока
  • "IBLOCK_TYPE" => "company", - ID типа инфоблока из которого выводим
  • "IBLOCK_ID" => "5", ID инфоблока из которого выводим
  • "DEPTH_LEVEL" => "4", уровень вложенности, этой цифрой можно выводить подразделы разделов если иерархия многоуровневая

В настройках компонента инфоблока также прописываем аналогичный путь к элементам и разделам инфоблока

настройка ЧПУ битрикс

В итоге все вновь создаваемые разделы инфоблока будут автоматически попадать в выпадающее меню (в моем случае, вы можете проделать эти манипуляции для любого типа меню)

Надеюсь объяснил наглядно и понятно, если остались вопросы или есть чем дополнить данную записку, прошу писать в комментариях. Всем успехов.

Элементы инфоблока в меню

Таким же образом можно сделать и меню из элементов инфоблока или вообще чего угодно. Просто, в файле меню с типом _ext наполняете массив $aMenuLinksExt нужными данными

Что бы получить элементы и их ссылки достаточно воспользоваться методом CIBlockElement::GetList

Быстрый пример:


if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
if(CModule::IncludeModule("iblock")) {
   $res = CIBlockElement::GetList(
             false, 
             array(
                "IBLOCK_ID"=> 5, // ID нужного инфоблока
                "ACTIVE"=>"Y"
             ),
            false,
            false, 
            array( // Нужны только названиеи ссылка
                "NAME"
                "DETAIL_PAGE_URL"
             ),
   );
   while($arFields = $res->Fetch()){
           $aMenuLinksExt[] = Array(
                $arFields['NAME'],
                $arFields['DETAIL_PAGE_URL'],
                Array(),
                Array(),
                ""
             );
    }
}
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
Виталий Близнецов 20.01.2019
не работает не только меню, на главной странице новость не открывается
https://www.leto-navsegda.ru/#SITE_DIR#/catalog/chasovoy-poyas-kryma/

здесь эта новость открывается https://www.leto-navsegda.ru/events/789232/
Виталий Близнецов 26.01.2019
Проблема была в том, что установщик  переписал некоторые файлы инфоблоков. Перезаписали эти файлы и все заработало.
Спасибо, Михаил, за полезный блог!
olegrus 21.02.2019
Михаил подскажите а как добавить произвольную свою ссылку в выпадающем меню с разделами из каталога
Михаил Базаров 21.02.2019
Цитата
olegrus написал:
Михаил подскажите а как добавить произвольную свою ссылку в выпадающем меню с разделами из каталога
Просто добавить в меню, там массив собирается:
$aMenuLinksExt - массив с разделами
$aMenuLinks - массив с произвольными пунктами меню
Код
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
Гость 04.10.2022
Здравствуйте, стоит задача  натянуть верстку. Нужно из компонента catalog.section.list, но проблема в том что, там всего 2 уровня и верстка без классов. А у меня прям сложная верстка и в этот компонент он не войдет. Возможно есть какие готовые нароботки для этих дел?

Верстку прикладываю (все верстку крепить не стал, но вид ее такой, лишние пункт удалил).
Код
<div class="catalog-menu catalog__menu">
   <ul class="catalog-menu__list">
      <li class="catalog-menu__item"> <?// 1 уровень?>
         <a class="catalog-menu__link is-dropdown" href="#">
            <img class="catalog-menu__img" src="assets/img/general/catalog/1.png" alt=""><span>Автомасла</span>
         </a>
         <div class="catalog-menu__drop">
            <div class="catalog-menu__drop-grid">
               <div class="catalog-menu__drop-col">
                  <ul class="catalog-menu__drop-list">
                     <li class="catalog-menu__drop-item"><?// 2 уровень?>
                        <a class="catalog-menu__drop-link" href="#">
                           Масла Mobil
                        </a>
                        <div class="catalog-menu__drop-col">
                           <ul class="catalog-menu__drop-list">
                              <li class="catalog-menu__drop-item"> <?// 3 уровень?>
                                 <a class="catalog-menu__drop-link" href="#">Масла Mobil</a>
                              </li>
                           </ul>
                        </div>
                     </li>
                  </ul>
               </div>
            </div>
         </div>
      </li>
      <li class="catalog-menu__item"><?// 1 уровень?>
         <a class="catalog-menu__link" href="#">
            <img class="catalog-menu__img" src="assets/img/general/catalog/2.png" alt=""><span>Животноводческое оборудование</span>
         </a>
      </li>
   </ul>
</div>
Михаил Базаров 04.10.2022
Цитата
Гость написал:
Здравствуйте, стоит задача  натянуть верстку. Нужно из компонента catalog.section.list, но проблема в том что, там всего 2 уровня и верстка без классов. А у меня прям сложная верстка и в этот компонент он не войдет. Возможно есть какие готовые нароботки для этих дел?

Глубину уровня вложенности можно задать через параметр "TOP_DEPTH"
Внутри, что бы натянуть верстку, можно использовать условие
Код
<?if ($arSection['DEPTH_LEVEL'] == '2') {?>
Верстка второго уровня
<?}?>

<?if ($arSection['DEPTH_LEVEL'] == '3') {?>
Верстка третьего уровня
<?}?>
Гость 05.10.2022
Цитата
написал:



                   
Цитата
Гость написал:
Здравствуйте, стоит задача  натянуть верстку. Нужно из компонента catalog.section.list, но проблема в том что, там всего 2 уровня и верстка без классов. А у меня прям сложная верстка и в этот компонент он не войдет. Возможно есть какие готовые нароботки для этих дел?

Глубину уровня вложенности можно задать через параметр "TOP_DEPTH"
Внутри, что бы натянуть верстку, можно использовать условие
Код
 <?if ($arSection['DEPTH_LEVEL'] == '2') {?>
Верстка второго уровня
<?}?>

<?if ($arSection['DEPTH_LEVEL'] == '3') {?>
Верстка третьего уровня
<?}?>
 

Спасибо, Михаил. Рад, что ответили.
Гость 07.12.2022
Добрый день, подскажите пожалуйста, можно ли в меню вывести не разделы каталога, а характеристику товара причем множественную(один и тот же товар(запчасть) может подходить к разным моделям). И чтобы при ее выборе открывалась вторая характеристика , например имеющиеся размеры.
Михаил Базаров 07.12.2022
Цитата
Гость написал:
Добрый день, подскажите пожалуйста, можно ли в меню вывести не разделы каталога, а характеристику товара причем множественную(один и тот же товар(запчасть) может подходить к разным моделям). И чтобы при ее выборе открывалась вторая характеристика , например имеющиеся размеры.  

В целом можно, но нужно будет модифицировать компонент через result_modifier.php
Гость 07.12.2022
Цитата
написал:
Цитата
Гость написал:
Добрый день, подскажите пожалуйста, можно ли в меню вывести не разделы каталога, а характеристику товара причем множественную(один и тот же товар(запчасть) может подходить к разным моделям). И чтобы при ее выборе открывалась вторая характеристика , например имеющиеся размеры.  
В целом можно, но нужно будет модифицировать компонент через result_modifier.php
Спасибо за направление! Поковыряю его!

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

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

Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый з... Просмотров: 28483 Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битр... Умный фильтр только на последнем уровне разделов каталога. Просмотров: 10489 Если в разработаываемом магазине или в принципе в каталоге на Битрикс, вы выводите умный ф... Cordova, ввод в input под диктовку. Голосовой поиск в мобильном прило... Просмотров: 1264 Итак, задачка: реализовать голосовой поиск в мобильном приложении на Cordova. По сути, нам... Умный фильтр во всплывающей панели на мобильных. Просмотров: 1447 Шаблон умного фильтра в Битриксе достаточно сложный, с точки зрения верстки и не очень кра... Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 4253 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по... Как вывести картинки к разделам на базе _ext меню Просмотров: 7087 Просто для эстетической красоты, нужно вывести в меню разделов сайта картинки или иконки. ... Проверка на наличие элементов, текущего пользователя, в заданном инфо... Просмотров: 5496 Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно во... Сниппеты типографики bootstrap, для Битрикс Просмотров: 7600 Если вы подключили bootstrap к своему сайту, или сверстали весь шаблон, подключив bootstra... Увидеть файл заказов который передаст Битрикс в 1С Просмотров: 23306 Для диагностики обмена заказов, интернет-магазина на 1С Битрикс с 1С Управление Торговлей,... Вывести все разделы в которых находится элемент инфоблока Просмотров: 13027 Если нужно вывести все разделы, со всей доступной информацией о них, внутри элемента инфоб... Создание скидки на общую сумму покупки в Битрикс корзине Просмотров: 26960 Функционал интернет-магазина, работающего под управлением 1С Битрикс, позволяет задавать м... Показ страницы сайта в боковом слайдере, на примере всплывающей формы... Просмотров: 1872 Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битри... Самодельная форма добавления элемента на API Битрикс Просмотров: 42562 Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изр... Пункты меню из разделов инфоблока Битрикс Просмотров: 90688 В принципе это стандартная возможность системы управления битрикс, но почему-то часто спра... Ускорение работы сайта на 1С-Битрикс Просмотров: 15895 Данная статья написана специально под видеоролик (приложен в конце статьи), опубликованный... Скопировать номер телефона из поля пользователя в телефон для регистр... Просмотров: 1629 Задача, на конкретном сайте: раньше все пользователи регистрировались по стандартному режи... Фотогалерея на базе компонента новостей, с fancybox. Просмотров: 1542 Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогал... Установить остатки товара на складе из доступных остатков. Просмотров: 4892 Задача, заполнить остатки товаров, в 1С-Битрикс, из параметра "Доступное количество". Создать pdf файл из элемента инфоблока, дать скачать пользователю, по... Просмотров: 3951 Задача: при каждом посещении статьи, на сайте, нужно создавать pdf файл с ее содержимым и ... Вывести все товары, с постраничной навигацией, из всех разделов инфоб... Просмотров: 28421 По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е...