Вывод категорий каталога в меню
Задача
Вывести пункты меню, с возможностью их редактирования стандартными средствами административной панели Битрикс, после этих пунктов вывести спикок категорий из инфоблока каталога.
Решение.
PHP
1) В нужном месте страницы размещаем компонент вывода меню
<?$APPLICATION->IncludeComponent("bitrix:menu", "menuSideCatalog", Array(
"ALLOW_MULTI_SELECT" => "N", // Разрешить несколько активных пунктов одновременно
"CHILD_MENU_TYPE" => "mside_catalog", // Тип меню для остальных уровней
"DELAY" => "N", // Откладывать выполнение шаблона меню
"MAX_LEVEL" => "1", // Уровень вложенности меню
"MENU_CACHE_GET_VARS" => array( // Значимые переменные запроса
0 => "",
),
"MENU_CACHE_TIME" => "3600", // Время кеширования (сек.)
"MENU_CACHE_TYPE" => "N", // Тип кеширования
"MENU_CACHE_USE_GROUPS" => "Y", // Учитывать права доступа
"ROOT_MENU_TYPE" => "mside_catalog", // Тип меню для первого уровня
"USE_EXT" => "Y", // Подключать файлы с именами вида .тип_меню.menu_ext.php
),
false
);?>
Проверем разрешение на подключение файлов _ext "USE_EXT" => "Y"
2) Создаем файл .mside_catalog.menu_ext.php
в корне сайта (или в группе в которой он должен добавляться к нашему меню)
<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
$aMenuLinksExt = array();
if(CModule::IncludeModule('iblock'))
{
$arFilter = array(
"TYPE" => "catalogs",
"SITE_ID" => SITE_ID,
);
$dbIBlock = CIBlock::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), $arFilter);
$dbIBlock = new CIBlockResult($dbIBlock);
if ($arIBlock = $dbIBlock->GetNext())
{
if(defined("BX_COMP_MANAGED_CACHE"))
$GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_".$arIBlock["ID"]);
if($arIBlock["ACTIVE"] == "Y")
{
$aMenuLinksExt = $APPLICATION->IncludeComponent("bitrix:menu.sections", "", array(
"IS_SEF" => "Y",
"SEF_BASE_URL" => "",
"SECTION_PAGE_URL" => $arIBlock['SECTION_PAGE_URL'],
"DETAIL_PAGE_URL" => $arIBlock['DETAIL_PAGE_URL'],
"IBLOCK_TYPE" => $arIBlock['IBLOCK_TYPE_ID'],
"IBLOCK_ID" => $arIBlock['ID'],
"DEPTH_LEVEL" => "1",
"CACHE_TYPE" => "N",
), false, Array('HIDE_ICONS' => 'Y'));
}
}
if(defined("BX_COMP_MANAGED_CACHE"))
$GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_new");
}
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
?>
3) Пример шаблона компонента /local/templates/mainTpl/components/bitrix/menu/menuSideCatalog/template.php
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?if (!empty($arResult)):?>
<div class="catalog__title">каталог</div>
<ul class="catalog__list" <?=(CSite::InDir('/index.php')) ? 'style="display:block;"' : ''?>>
<?foreach($arResult as $arItem):?>
<li class="catalog__list-item <?echo $arItem['PARAMS']['CLASS'] ? $arItem['PARAMS']['CLASS'] : ''?>">
<a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
<?endforeach;?>
</ul>
<?endif?>