Skip to content

Instantly share code, notes, and snippets.

@Elvinz
Created November 23, 2019 13:35
Show Gist options
  • Save Elvinz/e4d3ce46d7d0fb907fc1262470837b25 to your computer and use it in GitHub Desktop.
Save Elvinz/e4d3ce46d7d0fb907fc1262470837b25 to your computer and use it in GitHub Desktop.
Меню на основе разделов и элементов в битрикс
Предварительно подготовим инфоблок, который будет использовать меню. Пусть его ID=1.
Во-первых нужно настроить(рис. 1):
URL страницы раздела
URL страницы детального просмотра
https://thisis-blog.ru/wp-content/uploads/2016/05/QIP-Shot-Screen-218.png
Далее настройка доступа — чтение для всех пользователей(рис. 2)
https://thisis-blog.ru/wp-content/uploads/2016/05/QIP-Shot-Screen-219-900x272.png
Кастомизация компонента
Для реализации потребуется перенести menu.sections в своё пространство имён и кастомизировать его.
В папке /local/components/ создаёте своё пространство имён(например my_namespace). Копируйте компонент menu.sections по адресу /local/components/my_namespace/.
Конечный вариант компонента можно скачать тут.
Размещаем меню
ШАГ 1
Я буду размещать меню в файле /company/index.php
Добавляем в индексный файл код вызова меню:
<?$APPLICATION->IncludeComponent(
"bitrix:menu",
"sections-elements",
array(
"ALLOW_MULTI_SELECT" => "Y",
"CHILD_MENU_TYPE" => "left",
"COMPONENT_TEMPLATE" => ".default",
"DELAY" => "N",
"MAX_LEVEL" => "3",
"MENU_CACHE_GET_VARS" => array(
),
"MENU_CACHE_TIME" => "3600",
"MENU_CACHE_TYPE" => "A",
"MENU_CACHE_USE_GROUPS" => "N",
"MENU_THEME" => "site",
"ROOT_MENU_TYPE" => "left",
"USE_EXT" => "Y"
),
false
);?>
Шаблон "sections-elements" я тоже выкладываю его нужно закинуть по адресу /local/templates/шаблон-сайта/components/bitrix/menu/.
Он корректно поддерживает следующую структуру разделов и элементов:
Разделы в корне и элементы в этих разделах. Чтобы правильно отображались вложенные разделы, нужна доработка шаблона.
ШАГ 2
Далее в разделе /company/ создаём файл .left.menu.php
Его содержимое:
<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
$aMenuLinksExt = $APPLICATION->IncludeComponent(
"my_namespace:menu.sections",
"",
array(
"IS_SEF" => "Y",
"ID" => $_REQUEST["ID"],
"IBLOCK_TYPE" => "data",
"IBLOCK_ID" => "1",
"SECTION_URL" => "",
"DEPTH_LEVEL" => "3",
"CACHE_TYPE" => "Y",
"CACHE_TIME" => "3600",
"SEF_BASE_URL" => "/company/",
"SECTION_PAGE_URL" => "#SECTION_CODE#/",
"DETAIL_PAGE_URL" => "#SECTION_CODE#/#ELEMENT_CODE#/"
),
false
);
$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks);
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment