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

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

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

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

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

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

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

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

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

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

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

Автоматическая загрузка каталогов из csv файлов в Битрикс Просмотров: 11797 Если требуется настроить автоматический импорт каталогов из csv файлов, от поставщиков. В... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 12606 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв... Удалить товары из корзины, если есть определенные товары. Просмотров: 1915 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Подключение мобильной версии шаблона Битрикс сайта, с автопереключени... Просмотров: 43365 Предпочитаю, что бы сайт не грузил кучу скриптов и стилей. При загрузке адаптивного шаблон... Фиксированная корзина с обновлением, без перезагрузки страницы. Просмотров: 18455 Иногда нужно сделать так, чтобы корзина в интернет магазине, созданном на Битрикс, была по... Вывести все товары, с постраничной навигацией, из всех разделов инфоб... Просмотров: 29885 По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е... INPUT type="file" Предпросмотр превью картинки до загрузки Просмотров: 12922 Рассмотрим на примере компонента "Форма добавления-редактирования элементов инфоблока", ка... Фотогалерея на базе компонента новостей, с fancybox. Просмотров: 2906 Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогал... Индивидуальные цены в 1С-Битрикс: в каталоге и при оформлении заказа Просмотров: 6057 В этой заметке постараюсь описать процесс реализации индивидуальных цен, для пользователей... Вывести разделы инфоблока по первым буквам не меняя структуру каталог... Просмотров: 2503 Например: у нас есть инфоблок с большим количеством разделов. И мы хотим, на сайте разбить... Дать пользователю возможность быстро отредактировать материал Просмотров: 4945 На одном из разрабатываемых сайтов, пользователи формирую его контент. После регистрации, ... Получение местоположений через API Битрикс c поиском по select. Просмотров: 23194 Если нужно получить список городов из модуля "Местоположения" можно воспользоваться API Би... Заполнить свойство инфоблока ценой из торгового каталога Просмотров: 5090 Если вам по какой-то причине нужно скопировать цену товара в свойство этого же инфоблока. ... Автоматически отгрузить заказ и сменить статус отгрузки, при выполнен... Просмотров: 951 Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузка... Рассылка новинок каталога в автоматическом режиме Просмотров: 1868 Что бы реализовать рассылку новинок каталога на email-ы пользователей, можно воспользовать... Fancybox в стандартном шаблоне детальной карточки товара, вместо вспл... Просмотров: 105 Задача: заменить работу с изображениями в стандартном или кастомном шаблоне детальной карт... Отфильтровать новости в Битрикс за заданный период Просмотров: 16692 Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компо... Вывести разделы инфоблока в которых находится элемент Битрикс Просмотров: 17017 Если нужно в карточке товара или новости, вывести структуру разделов в котором находится э... Прятать или показывать описание раздела каталога Просмотров: 1046 В новых компонентах и шаблонах catalog.section есть не документированный и не выводимый па... Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт Просмотров: 18107 При разработке сайтов на Битрикс, с интеграцией с 1С Управление Тороговлей, нужно запретит...