Пункты меню
Описание 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.
- A — Авто + Управляемое: автоматически обновляет кеш компонентов в течение заданного времени или при изменении данных;
- Y — Кешировать: для кеширования необходимо определить время кеширования;
- N — Не кешировать: кеширования нет в любом случае.
Пример вызова
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Источник
Компонент 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,
),
);
>
Источник