Меню на основе разделов и элементов в битрикс

Не в первый раз поступает задача по созданию меню на основе разделов и элементов инфоблока.
За основу я взял наработку, которую выложил Дмитрий Зеленецкий на форуме 1с-Битрикс.

Содержание:

  1. Настройка инфоблока<
  2. Кастомизация компонента
  3. Размещаем меню
  4. Результат

Настройка инфоблока

Предварительно подготовим инфоблок, который будет использовать меню. Пусть его ID=1.
Во-первых нужно настроить(рис. 1):

  • URL страницы раздела
  • URL страницы детального просмотра
настройки пути разделов и элементов

рис. 1

Далее настройка доступа — чтение для всех пользователей(рис.  2)

битрик настройка доступа

рис. 2

Кастомизация компонента

Для реализации потребуется перенести 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);
?>

Результат

битрикс меню из разделов и элементов

результат

Задумываетесь о защите данных для своего сайта? ssl сертификат — это то что вам нужно. Узнать цены на ssl сертификаты можно на сайте rus.gogetssl.com.

ПоделитьсяShare on Facebook1Share on VKShare on Google+0Tweet about this on TwitterShare on LinkedIn0Pin on Pinterest1

6 комментариев

  • Сергей:

    Если выставить «DEPTH_LEVEL» => «4» компонент что-то неправильно считает и присваивает IS_PARENT элементам.

  • Юра:

    Спасибо! Работает :)

  • Jack:

    Все сделал, как у вас, но ссылки-элементы каталога никуда не ведут (вылетаю на карты сайта). Что это может быть?

    • Павел:

      Перепроверьте, всё ли верно в компоненте my_namespace:menu.sections
      SEF_BASE_URL
      SECTION_PAGE_URL
      DETAIL_PAGE_URL

      И настройки инфоблока

  • Ситуация как и у Jack:
    «1 Ноябрь, 2016 в 14:50
    Все сделал, как у вас, но ссылки-элементы каталога никуда не ведут (вылетаю на карты сайта). Что это может быть?»

    При переходе в подраздел каталога, меню открывается и можно перейти по пунктах, но не по названию раздела выдает просто «#».

Добавить комментарий