+7 926 070-36-31
Москва и Московская область

Битрикс. Делаем меню из элементов инфоблока

07.12.2017

Часто требуется сделать, чтобы подменю состояло из элементов конкретного инфоблока, мы рассмотрим как это сделать.

Рассмотрим на примере моего сайта

К главному меню под названием "Верхнее горизонтальное меню" к разделу "Услуги" мне надо вывести подменю из элементов инфоблока "Услуги по разработке".

1) Если инфоблок уже создан, то в редактирование информационных блоков в административной панели "Контент" - "Инфоблоки" - "Типы инфоблоков"  мы находим нужный Вам инфоблок. 


В моем случае меня интересует инфоблок "Услуги по разработке", у которого ID равен 11.


2) Создаем новый тип меню в административном разделе "Настройки" - "Настройки продукта" - "Настройки модулей" - "Управление структурой"


Создаем тип меню "left_infoblock" с названием "Меню элементов инфоблока", конечно Вы можете указать удобное Вам наименование.

 

3) Теперь в папке, где будет размещаться инфоблок (согласно его настройке) создаем файлы отвечающие за меню. 


Выбираем в типе меню только что нами созданное и нажимаем "Сохранить". Меню будет пустое, так как формироваться оно будет на основе инфоблока.


Теперь нам надо создать дополнительный обработчик данного меню. Для этого создается в этой же папке с меню файл под названием ".ваше_меню.menu_ext.php", а в моем случае ".left_infoblock.menu_ext.php"

В него мы скопируем следующий код:

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

global $APPLICATION;

if(CModule::IncludeModule("iblock"))
{

$IBLOCK_ID = 11;        //здесь необходимо указать ID Вашего инфоблока

$arOrder = Array("SORT"=>"ASC");   
$arSelect = Array("ID", "NAME", "IBLOCK_ID", "DETAIL_PAGE_URL");
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);

    while($ob = $res->GetNextElement())
    {
    $arFields = $ob->GetFields();            
    $aMenuLinksExt[] = Array(
                $arFields['NAME'],
                $arFields['DETAIL_PAGE_URL'],
                Array(),
                Array(),
                ""
                );
    
    }       
    
}   

$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
?>
Нам осталось в коде поправить переменную $IBLOCK_ID, в которой хранится ID нашего инфоблока. У меня ID = 11, следовательно $IBLOCK_ID = 11; 

4) Выводим меню на страницу сайта. 

Добавляем компонент "Меню" из "Служебные" - "Навигация"


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

Обязательно должна стоять галочка "Подключать файлы с именами вида .тип_меню.menu_ext.php"


Если все сделали правильно у Вас сформируется подменю из элементов инфоблока.




Возврат к списку


6лет
опыта
разработки
49
выполненых
проектов
100%
клиентов
нас рекламируют своим друзьям
6 лет
разрабатываю
сервисы для Гос органов