07.12.2017 08:12:00
Часто требуется сделать, чтобы подменю состояло из элементов конкретного инфоблока, мы рассмотрим как это сделать.
Рассмотрим на примере моего сайта
К главному меню под названием "Верхнее горизонтальное меню" к разделу "Услуги" мне надо вывести подменю из элементов инфоблока "Услуги по разработке".
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"
Если все сделали правильно у Вас сформируется подменю из элементов инфоблока.