Bitrix menu sections не работает

Пункты меню

Описание menu.sections

Компонент осуществляет дополнение созданного меню названиями разделов инфоблоков. Компонент является стандартным и входит в дистрибутив модуля.

В визуальном редакторе компонент расположен по пути: Служебные > Навигация > Пункты меню.

Компонент относится к модулю Информационные блоки.

Параметры

Поле Параметр Описание
Основные параметры
Включить режим совместимости с поддержкой ЧПУ IS_SEF [Y|N] При отмеченной опции включается режим поддержки ЧПУ.

Если режим поддержки ЧПУ включен, то необходимо настроить следующие параметры:

Каталог ЧПУ (относительно корня сайта) SEF_BASE_URL Каталог ЧПУ: путь до папки, с которой работает компонент. Этот путь может как совпадать с физическим путём, так и не совпадать.
Шаблон URL, ведущий на страницу с содержимым раздела SECTION_PAGE_URL Указывается шаблон пути, ведущий на страницу с содержимым раздела.
Шаблон URL, ведущий на страницу с элементом DETAIL_PAGE_URL Указывается шаблон пути, ведущий на страницу с элементом.

SEF_BASE_URL, SECTION_PAGE_URL, DETAIL_PAGE_URL.

Если режим поддержки ЧПУ выключен, то необходимо настроить следующие параметры:

ID элемента для подсветки пункта меню ID Указывается идентификатор элемента для подсветки пункта меню.
URL, ведущий на страницу с содержимым раздела SECTION_URL Указывается шаблон пути, ведущий на страницу с содержимым раздела.

ID, SECTION_URL. Тип информационного блока IBLOCK_TYPE Указывается идентификатор типа информационного блока. Код информационного блока IBLOCK_ID Для выбранного типа инфоблоков указывается идентификатор (код) инфоблока, на основе которого будет строиться меню. Источник данных Сколько уровней вложенности выводить DEPTH_LEVEL Задается глубина вложений, согласно которой будет строиться меню. Настройки кеширования Тип кеширования CACHE_TYPE Тип кеширования:

  • A — Авто + Управляемое: автоматически обновляет кеш компонентов в течение заданного времени или при изменении данных;
  • Y — Кешировать: для кеширования необходимо определить время кеширования;
  • N — Не кешировать: кеширования нет в любом случае.
Время кеширования (сек.) CACHE_TIME Время кеширования, указанное в секундах. По умолчанию поле содержит 3600 сек.

Пример вызова

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Источник

Компонент menu.sections — как сделать вывод элементов?

Задача: в меню left вывести значения элементов инфоблока в определенном разделе

.left.menu_ext.php прикрутил, вывод разделов работает, а как сделать вывод элементов в определенном разделе(в частности в корне).

Вот оригинальный код отображения разделов, что мне нужно модифицировать, чтобы получить нужный мне результат?

Заранее спасибо за помощь!

Цитата
Андрей пишет:
«ID» => $_REQUEST[«SECTION_ID»],
Цитата
Андрей пишет:
что мне нужно модифицировать, чтобы получить нужный мне результат?

ID инфоблока — 48, записи лежат в корне без всяких разделов.

Цитата
Андрей пишет:
Этот ответ я и боялся услышать..

У меня тоже возникла такая проблема. Решил ее следующим образом.

Делаем файл .left.menu_ext.php или на позиицию, где должно быть меню, инклюдим любой php файл, в котором находится компонент bitrix:catalog.section.

Настройки компонента позволяют задать сортировку пунктов меню.

Компонент должен быть кастомизирован (скопируйте его в шаблон) путем отрезания всего лишнего. Вот так:

Важно: без части кода

вся конструкция перестает работать вообще.

Еще важно. На странизу нужно передавать идентификатор раздела любым стандартным путем. Например, /index.php&SECTION_ID=#SECTION_ID# или при человекопонятных ссылках /#SECTION_ID#/

IncludeComponent(«bitrix:eshop.menu.sections», «», array(
«IBLOCK_TYPE_ID» => «catalog»,
«CACHE_TYPE» => «A»,
«CACHE_TIME» => «36000000»
😉 ,
false,
Array(‘HIDE_ICONS’ => ‘Y’)
);
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
>
?>

Вот у меня такой код.
Если меняю catalog например на news то меню пустое.
А в catalog у меня находится много торговых каталогов — Ноутбуки , Мобилки ,Планшеты.
Что поменять в коде , чтобы показывапло в меню именно мобилки и планшеты например?

Источник

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

Нужно создать меню. Есть инфоблок, в нем несколько разделов, в разделах — подразделы, а далее уже элементы.
то есть примерно такая структура:

инфоблок (каталог):
— Первый раздел
— Подраздел первого раздела
—Элемент 1
—Элемент 2
—Элемент 3
-Второй раздел
— Подраздел второго раздела
—Элемент 1
—Элемент 2
—Элемент 3

На примере демо сайта сделала так
— есть меню раздела
— в корне файл .left.menu_ext.php с таким кодом

Результат:
получаю меню из разделов инфоблока,
то есть так:
то есть примерно такая структура:

инфоблок (каталог):
— Первый раздел
— Подраздел первого раздела
-Второй раздел
— Подраздел второго раздела

А как получить 3-й уровень с элементами?

Помогите, пожалуйста, очень надо!
Это мое первое знакомство с Битриксом. Пока дается все с трудом.
Буду рада любому ответу

в интернете нашла такой код

Он выводить только элененты со всез разделов инфоблока
вот так:
—Элемент 1
—Элемент 2
.
—Элемент N

Возможно ли их как нибуть связать и получить нужный результат?

вот попробуйте этот код, когда-то давно использовал его, для подобной задачи, но наверняка сказать сейчас не могу — проверить негде. модифицированный компонент menu.sections из одного из проектов:

Теперь проблема с url.
Каталог находиться в разделе адрес_сайта//technika-chetra/
При нажатии на ссылку нет перехода на нужный раздел или элемент. Остается то же соджержание, что и на страницы адрес_сайта//technika-chetra/

в настройке инфоблока так
URL страницы информационного блока:
— /technika-chetra/

URL страницы раздела:
— /technika-chetra/?SECTION_ID=#ID#

URL страницы детального просмотра:
— /technika-chetra/?SECTION_ID=#ID#&ELEMENT_ID=#ID#

в файле .left.menu_ext.php такой код

что не так? не могу понять.
а если так прописывать
/technika-chetra/
/technika-chetra/#SECTION_ID#/
/technika-chetra/#SECTION_ID#/#ELEMENT_ID#/

то вообще ничего не выходит. белое окно браузера

Или напишите в скайп, bxdevs

Цитата
вот попробуйте этот код, когда-то давно использовал его, для подобной задачи, но наверняка сказать сейчас не могу — проверить негде. модифицированный компонент menu.sections из одного из проектов:

Спасибо, Дмитрий, за предложенный выше component.php.

Одно замечание.
в конце component.php нужно добавить вот эту строчку:

while($element = $arElements->GetNext()) <
$aMenuLinksNew[$parentIndex-1][3][«IS_PARENT»] = true;
$aMenuLinksNew[$menuIndex++] = array(
$element[«NAME»],
$element[«

DETAIL_PAGE_URL»],
array(),
array(
«FROM_IBLOCK» => true,
«IS_PARENT» => false,
«DEPTH_LEVEL» => $depth,
),
);
$previousDepthLevel = $depth;
>
>
>

Цитата
Дмитрий Зеленецкий написал:
StartResultCache())
<
if(!CModule::IncludeModule(«iblock»))
<
$this->AbortResultCache();
>
else
<
$arFilter = array(
«IBLOCK_ID»=>$arParams[«IBLOCK_ID»],
«GLOBAL_ACTIVE»=>»Y»,
«IBLOCK_ACTIVE»=>»Y»,
» $arParams[«DEPTH_LEVEL»],
);
$arOrder = array(
«left_margin»=>»asc»,
);

$rsSections = CIBlockSection::GetList($arOrder, $arFilter, false, array(
«ID»,
«DEPTH_LEVEL»,
«NAME»,
«SECTION_PAGE_URL»,
));
if($arParams[«IS_SEF»] !== «Y»)
$rsSections->SetUrlTemplates(«», $arParams[«SECTION_URL»]);
else
$rsSections->SetUrlTemplates(«», $arParams[«SEF_BASE_URL»].$arParams[«SECTION_PAGE_URL»]);
while($arSection = $rsSections->GetNext())
<
$arResult[«SECTIONS»][] = array(
«ID» => $arSection[«ID»],
«DEPTH_LEVEL» => $arSection[«DEPTH_LEVEL»],
«

SECTION_PAGE_URL»],
);
$arResult[«ELEMENT_LINKS»][$arSection[«ID»]] = array();
>
$this->EndResultCache();
>
>

//In «SEF» mode we’ll try to parse URL and get ELEMENT_ID from it
if($arParams[«IS_SEF»] === «Y»)
<
$componentPage = CComponentEngine::ParseComponentPath(
$arParams[«SEF_BASE_URL»],
array(
«section» => $arParams[«SECTION_PAGE_URL»],
«detail» => $arParams[«DETAIL_PAGE_URL»],
),
$arVariables
);
if($componentPage === «detail»)
<
CComponentEngine::InitComponentVariables(
$componentPage,
array(«SECTION_ID», «ELEMENT_ID»),
array(
«section» => array(«SECTION_ID» => «SECTION_ID»),
«detail» => array(«SECTION_ID» => «SECTION_ID», «ELEMENT_ID» => «ELEMENT_ID»),
),
$arVariables
);
$arParams[«ID»] = intval($arVariables[«ELEMENT_ID»]);
>
>

$aMenuLinksNew = array();
$menuIndex = 0;
$previousDepthLevel = 1;
foreach($arResult[«SECTIONS»] as $arSection)
<
if ($menuIndex > 0)
$aMenuLinksNew[$menuIndex — 1][3][«IS_PARENT»] = $arSection[«DEPTH_LEVEL»] > $previousDepthLevel;
$previousDepthLevel = $arSection[«DEPTH_LEVEL»];

$aMenuLinksNew[$menuIndex++] = array(
htmlspecialchars($arSection[«

SECTION_PAGE_URL»],
$arResult[«ELEMENT_LINKS»][$arSection[«ID»]],
array(
«FROM_IBLOCK» => true,
«IS_PARENT» => false,
«DEPTH_LEVEL» => $arSection[«DEPTH_LEVEL»],
),
);

$sectionFilter = array(
«IBLOCK_ID» => $arParams[«IBLOCK_ID»],
«SECTION_ID» => $arSection[«ID»],
«GLOBAL_ACTIVE»=> «Y»,
«IBLOCK_ACTIVE»=> «Y»,
«INCLUDE_SUBSECTIONS» => «N»
);

$arElements = CIblockElement::GetList(array(), $sectionFilter);
$depth = $arSection[«DEPTH_LEVEL»] + 1;
$parentIndex = $menuIndex;

while($element = $arElements->GetNext()) <
$aMenuLinksNew[$parentIndex-1][3][«IS_PARENT»] = true;

$aMenuLinksNew[$menuIndex++] = array(
$element[«NAME»],
$element[«

DETAIL_PAGE_URL»],
array(),
array(
«FROM_IBLOCK» => true,
«IS_PARENT» => false,
«DEPTH_LEVEL» => $depth,
),
);
>

return $aMenuLinksNew;
?>

Цитата
Дмитрий Зеленецкий написал:
вот попробуйте этот код, когда-то давно использовал его, для подобной задачи, но наверняка сказать сейчас не могу — проверить негде. модифицированный компонент menu.sections из одного из проектов:

Спасибо! Работает, раньше ума хватало только «catalog.section.list» мастырить в таких случаях.

Цитата
Дмитрий Зеленецкий написал:
StartResultCache())
<
if(!CModule::IncludeModule(«iblock»))
<
$this->AbortResultCache();
>
else
<
$arFilter = array(
«IBLOCK_ID»=>$arParams[«IBLOCK_ID»],
«GLOBAL_ACTIVE»=>»Y»,
«IBLOCK_ACTIVE»=>»Y»,
» $arParams[«DEPTH_LEVEL»],
);
$arOrder = array(
«left_margin»=>»asc»,
);

$rsSections = CIBlockSection::GetList($arOrder, $arFilter, false, array(
«ID»,
«DEPTH_LEVEL»,
«NAME»,
«SECTION_PAGE_URL»,
));
if($arParams[«IS_SEF»] !== «Y»)
$rsSections->SetUrlTemplates(«», $arParams[«SECTION_URL»]);
else
$rsSections->SetUrlTemplates(«», $arParams[«SEF_BASE_URL»].$arParams[«SECTION_PAGE_URL»]);
while($arSection = $rsSections->GetNext())
<
$arResult[«SECTIONS»][] = array(
«ID» => $arSection[«ID»],
«DEPTH_LEVEL» => $arSection[«DEPTH_LEVEL»],
«

SECTION_PAGE_URL»],
);
$arResult[«ELEMENT_LINKS»][$arSection[«ID»]] = array();
>
$this->EndResultCache();
>
>

//In «SEF» mode we’ll try to parse URL and get ELEMENT_ID from it
if($arParams[«IS_SEF»] === «Y»)
<
$componentPage = CComponentEngine::ParseComponentPath(
$arParams[«SEF_BASE_URL»],
array(
«section» => $arParams[«SECTION_PAGE_URL»],
«detail» => $arParams[«DETAIL_PAGE_URL»],
),
$arVariables
);
if($componentPage === «detail»)
<
CComponentEngine::InitComponentVariables(
$componentPage,
array(«SECTION_ID», «ELEMENT_ID»),
array(
«section» => array(«SECTION_ID» => «SECTION_ID»),
«detail» => array(«SECTION_ID» => «SECTION_ID», «ELEMENT_ID» => «ELEMENT_ID»),
),
$arVariables
);
$arParams[«ID»] = intval($arVariables[«ELEMENT_ID»]);
>
>

$aMenuLinksNew = array();
$menuIndex = 0;
$previousDepthLevel = 1;
foreach($arResult[«SECTIONS»] as $arSection)
<
if ($menuIndex > 0)
$aMenuLinksNew[$menuIndex — 1][3][«IS_PARENT»] = $arSection[«DEPTH_LEVEL»] > $previousDepthLevel;
$previousDepthLevel = $arSection[«DEPTH_LEVEL»];

$aMenuLinksNew[$menuIndex++] = array(
htmlspecialchars($arSection[«

SECTION_PAGE_URL»],
$arResult[«ELEMENT_LINKS»][$arSection[«ID»]],
array(
«FROM_IBLOCK» => true,
«IS_PARENT» => false,
«DEPTH_LEVEL» => $arSection[«DEPTH_LEVEL»],
),
);

$sectionFilter = array(
«IBLOCK_ID» => $arParams[«IBLOCK_ID»],
«SECTION_ID» => $arSection[«ID»],
«GLOBAL_ACTIVE»=> «Y»,
«IBLOCK_ACTIVE»=> «Y»,
«INCLUDE_SUBSECTIONS» => «N»
);

$arElements = CIblockElement::GetList(array(), $sectionFilter);
$depth = $arSection[«DEPTH_LEVEL»] + 1;
$parentIndex = $menuIndex;

while($element = $arElements->GetNext()) <
$aMenuLinksNew[$parentIndex-1][3][«IS_PARENT»] = true;

$aMenuLinksNew[$menuIndex++] = array(
$element[«NAME»],
$element[«

DETAIL_PAGE_URL»],
array(),
array(
«FROM_IBLOCK» => true,
«IS_PARENT» => false,
«DEPTH_LEVEL» => $depth,
),
);
>

Источник

Читайте также:  Как настроить корона конвертер
Оцените статью