битрикс меню для инфоблоков
Пункты меню из разделов инфоблока Битрикс
В принципе это стандартная возможность системы управления битрикс, но почему-то часто спрашивают как это сделать. Возможно в документации данный вопрос освещен не достаточно понятно. Постараюсь рассказать по простому, со скринами, как же вывести разделы инфоблока в меню.
Как это сделать, смотрите в видео
Добавляем разделы в инфоблок:
Предположим что нам нужно создать меню из подкатегорий новостей. У нас уже есть готовый инфоблок для новостей и он выведен на сайт. В общем новости работают. И наступил момент, что новостей стало достаточно много и пора их разбить на несколько категорий: «Спорт», «Финансы» и.т.д.
Для начала создаем эти разделы:
Теперь задача создать пункты выпадающего меню, которое автоматически будет брать разделы в качестве своих пунктов. Для этого нужно создать необходимый тип меню в Управлении структурой. В моем случае я создаю тип меню «Меню подраздела»
Создаем в нужном каталоге сайта этот тип меню и рядом с ним создаем такой же файл с приставкой _ext.php.
В моем примере я создаю блог на основе компонента новостей, потому каталог и соответствующий инфоблок называются blog
Настройка ext меню
В настройках компонента инфоблока также прописываем аналогичный путь к элементам и разделам инфоблока
В итоге все вновь создаваемые разделы инфоблока будут автоматически попадать в выпадающее меню (в моем случае, вы можете проделать эти манипуляции для любого типа меню)
Надеюсь объяснил наглядно и понятно, если остались вопросы или есть чем дополнить данную записку, прошу писать в комментариях. Всем успехов.
Меню из разделов инфоблока с элементами
В битриксе можно создавать меню из разделов инфоблока, для этого к компоненту menu подключается файл типа *.menu_ext.php, а в нем вызывается компонент menu.sections. Но нет возможности включать в меню элементы разделов, а это иногда бывает полезно. Так, кстати, сделано на этом сайте.
Для этого я сделал компонент menu.sections.elements, подключается он так же в файле *.menu_ext.php, коды я приведу ниже:
.parameters.php
component.php
.left.menu_ext.php (для примера)
Не забываем размещать свои компоненты в своем пространстве имен, в примере это max22
Комментарии:
Иван, в таком случае нужно получать элементы в цикле по найденым разделам, и ограничивать выборку 5-ю. Либо оставить как есть и уже после в цикле оставить по 5 элементов. Либо уже в шаблоне меню вывод ограничивать 5-ю элементами.
Варианты отличаются по типу создаваемой нагрузки на сервер, какой выбрать оптимальнее нужно смотреть по конкретной ситуации.
Может я не так делаю.
Создал папку /bitrix/components/Nick/menu.sections.elements
Nick, версия битрикса не причем.
Думаю вы к компоненту обращаетесь bitrix:menu.sections.elements или max22:menu.sections.elements, а нужно Nick:menu.sections.elements
Nick здесь это пространство имен компонентов.
раз папка у вас с большой буквы Nick, значит и в вызове компонента используйте большую Nick:menu.sections.elements
либо попробуйте переименовать папку и назвать все маленькими буквами, т.к. я например, не припомню чтобы видел названия пространств в большой буквы. Но врятли в этом дело.
Может быть, если с именами все ок, то просто у сервера прав на чтение не хватает, например, если апатч из под одного юзера работает, а вы папку из под рута создавали. Но это тоже врятли.
Думаю имеет место быть опечатка или что то в этом роде.
Действительно все дело в именах,а именно большая буква N. )))
Подключился компонент, но по-моему что то не так. Если в настройках я ставлю уровень вложенности 1 тогда получаю меню из списка разделов/элементов инфоблока + 1й пункт состоит из раздела/элемента + подразделы + элементы подраздела, т.е. это вроде как лишнее. Т.е. тогда уж и первый пункт должен быть не разворачивающийся.
Если ставлю глубину 2 тогда получаю меню из разделов/элементов и подразделов + элемент подраздела, это уже подходит, но как убрать элементы подразделов?
Nick, Элементы всегда будут подключаться, т.е. если глубина 1, то будут разделы 1-го уровня и их элементы. На выходе имеем 2-х уровневое меню. Если вам нужно другое поведение, то можно в коде компонента добавить необходимые условия.
Насчет ULR понял, у меня они настроены под стандартный компонент menu.sections от того и едет.
>Элементы всегда будут подключаться, т.е. если глубина 1, то будут разделы 1-го уровня и их элементы. На выходе имеем 2-х уровневое меню.
Если я не ошибаюсь, сейчас меню работает ни так. Не пойму как поправить код чтобы при глубине 1 не показывались элементы первого пункта меню, и почему именно первый в остальных же не показывает.
Вот скриншоты:
Все еще мучаю компонент. 🙂
В массиве нет поля Sort, как его туда добавить. Подскажите пожалуйста очень хочется настроить все как надо уж больно хороший компонент. 🙂
Nick, попробуйте заменить стороку
Оказывается это я намудрил с функцией сортировки, она выдавала ошибку.
Подскажите, вот у меня когда я нахожусь в каком нибудь разделе инфоблока меню разворачивает полностью все пункты меню до указанной в настройках глубины, это так задумано или у меня проблема с шаблоном?
При этом свернуть развернутые пункты я не могу при нажатии на пункт просто меняется значек напротив пункта,а сам пункт меню не сворачивается.
и в самой функции перед циклом перебора массивов добавил
if ($ft) <
$res[] = array(
htmlspecialchars($iblock[‘NAME’]),
$iblock[‘LINK’],
array(), //массив доп ссылок
array(
‘FROM_IBLOCK’ => true,
‘IS_PARENT’ => 1,
‘DEPTH_LEVEL’ => 1,
),
);
$ft = FALSE;
>
В шаблоне по этому параметру будете определять раздел это или нет.
PS Что за проблема была со ссылками? Шаблоны пути были не указаны в настройках инфоблока?
Для вашего меню пришлось поправить, но теперь вроде все заработало, осталось разобраться с внешним видом.
А вообще очень здорово вы сделали. Я перебрал 3 или 4 варианта этого кастомного компонента и ни один нормально не работал.
Я первым делам в шаблоне пишу:
‘;
Смотрю что приходит из компонента.
Посмотрела, похоже, что IS_SECTION все-таки заполняется правильно:
Но почему тогда при фильтрации они не различаются. Может, неправильно обращаюсь? Как писать:
или
Олег, для этого нужно изменить код:
Здравствуйте! посоветуйте пожалуйста.
что можно сделать пожалуйста подскажите
Подскажите,а как можно реализовать загрузку пунктов меню только по указанному разделу инфоблока?
Желательно чтобы можно было в коде файла меню указывать раздел инфоблока, например добавив SECTION_ID:
[. Код вырезал для экономии места. ]
К сожалению не очень дружу с php, если можно покажите пример кода.
Как добавить параметр в конпонент я разобрался, вроде бы сделал верно: «SECTION_ID» => array( «NAME» => GetMessage(«SECTION_ID_VARIABLE_PHR»), Не пойму как сделать фильтр в компоненте по этому параметры, компонент у меня измененный:
[. Много кода вырезал для экономии места. ]
Николай, фильтровать разделы с подразделами по разделу родителю нужно с помощью полей LEFT_MARGIN, RIGHT_MARGIN принцип следующий:
1. Получаете родительский раздел по SECTION_ID, у него получаете поля LEFT_MARGIN, RIGHT_MARGIN.
PS из начала убираем [ВАШ БЛОК С ПОЛУЧЕНИЕМ LEFT_MARGIN, RIGHT_MARGIN]
Битрикс меню для инфоблоков
Часто требуется сделать, чтобы подменю состояло из элементов конкретного инфоблока, мы рассмотрим как это сделать.
Рассмотрим на примере моего сайта
К главному меню под названием «Верхнее горизонтальное меню» к разделу «Услуги» мне надо вывести подменю из элементов инфоблока «Услуги по разработке».
В моем случае меня интересует инфоблок «Услуги по разработке», у которого ID равен 11.
Создаем тип меню «left_infoblock» с названием «Меню элементов инфоблока», конечно Вы можете указать удобное Вам наименование.
3) Теперь в папке, где будет размещаться инфоблок (согласно его настройке) создаем файлы отвечающие за меню.
Выбираем в типе меню только что нами созданное и нажимаем «Сохранить». Меню будет пустое, так как формироваться оно будет на основе инфоблока.
Теперь нам надо создать дополнительный обработчик данного меню. Для этого создается в этой же папке с меню файл под названием «.ваше_меню.menu_ext.php», а в моем случае «.left_infoblock.menu_ext.php»
В него мы скопируем следующий код:
Нам осталось в коде поправить переменную $IBLOCK_ID, в которой хранится ID нашего инфоблока. У меня ID = 11, следовательно $IBLOCK_ID = 11;
4) Выводим меню на страницу сайта.
И теперь настраиваем его. Выбираем «Тип меню для первого уровня» наше меню со ссылкой на раздел инфоблока, «Уровень вложенности меню» делаем 2 и в «Тип меню для остальных уровней» ставим «Меню элементов инфоблока».
Если все сделали правильно у Вас сформируется подменю из элементов инфоблока.
Заполните форму
Продолжая использовать этот сайт, Вы принимаете условия политики конфиденциальности и даёте согласие на обработку пользовательских данных. Подробнее
Продолжая использовать этот сайт, Вы принимаете условия политики конфиденциальности и даёте согласие на обработку пользовательских данных (файлов cookie), в том числе с использованием систем аналитики «Яндекс. Метрика» и «Google Analytics», (IP-адрес; версия ОС; версия веб-браузера; сведения об устройстве (тип, производитель, модель); разрешение экрана и количество цветов экрана; наличие программного обеспечения для блокирования рекламы; наличие Cookies; наличие JavaScript; язык ОС и Браузера; время, проведенное на сайте; глубина просмотра; действия пользователя на сайте; географические данные) в целях определения посещаемости сайта. Отказаться от обработки пользовательских данных и использования «cookie» можно, выбрав соответствующие настройки в браузере. Однако это может повлиять на работу некоторых функций сайта. Скрыть
Меню из разделов и элементов инфоблока
инфоблок (каталог):
— Первый раздел
— Подраздел первого раздела
—Элемент 1
—Элемент 2
—Элемент 3
-Второй раздел
— Подраздел второго раздела
—Элемент 1
—Элемент 2
—Элемент 3
Результат:
получаю меню из разделов инфоблока,
то есть так:
то есть примерно такая структура:
инфоблок (каталог):
— Первый раздел
— Подраздел первого раздела
-Второй раздел
— Подраздел второго раздела
А как получить 3-й уровень с элементами?
Помогите, пожалуйста, очень надо!
Это мое первое знакомство с Битриксом. Пока дается все с трудом.
Буду рада любому ответу
в интернете нашла такой код
Он выводить только элененты со всез разделов инфоблока
вот так:
—Элемент 1
—Элемент 2
.
—Элемент N
Возможно ли их как нибуть связать и получить нужный результат?
Теперь проблема с url.
Каталог находиться в разделе адрес_сайта//technika-chetra/
При нажатии на ссылку нет перехода на нужный раздел или элемент. Остается то же соджержание, что и на страницы адрес_сайта//technika-chetra/
в настройке инфоблока так
URL страницы информационного блока:
— /technika-chetra/
URL страницы раздела:
— /technika-chetra/?SECTION_ID=#ID#
URL страницы детального просмотра:
— /technika-chetra/?SECTION_ID=#ID#&ELEMENT_ID=#ID#
что не так? не могу понять.
а если так прописывать
/technika-chetra/
/technika-chetra/#SECTION_ID#/
/technika-chetra/#SECTION_ID#/#ELEMENT_ID#/
то вообще ничего не выходит. белое окно браузера
Или напишите в скайп, bxdevs
Спасибо, Дмитрий, за предложенный выше component.php.
Одно замечание.
в конце component.php нужно добавить вот эту строчку:
SECTION_PAGE_URL»],
);
$arResult[«ELEMENT_LINKS»][$arSection[«ID»]] = array();
>
$this->EndResultCache();
>
>
$aMenuLinksNew[$menuIndex++] = array(
htmlspecialchars($arSection[«
$aMenuLinksNew[$menuIndex++] = array(
$element[«NAME»],
$element[«
Спасибо! Работает, раньше ума хватало только «catalog.section.list» мастырить в таких случаях.
SECTION_PAGE_URL»],
);
$arResult[«ELEMENT_LINKS»][$arSection[«ID»]] = array();
>
$this->EndResultCache();
>
>
$aMenuLinksNew[$menuIndex++] = array(
htmlspecialchars($arSection[«
$aMenuLinksNew[$menuIndex++] = array(
$element[«NAME»],
$element[«
Битрикс меню для инфоблоков
Современные сайты наполняются содержанием с помощью специального программного обеспечения: CMS.
Для кого этот курс?
Курс Контент-менеджер адресован тем, кто работает с содержанием сайта: наполнение, изменение текста, загрузка и размещение картинок и так далее.
У нас часто спрашивают, сколько нужно заплатить
Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.
Баллы опыта
уроке.
Практика и тесты
При изучении курса рекомендуется повторять описываемые действия на демонстрационной версии сайта, установленной локально или в Виртуальной лаборатории.
После изучения курса пройдите тесты на сертификацию. При успешной сдаче последовательности тестов со страницы Моё обучение скачайте сертификат об успешном прохождении курса в формате PDF.
Для преподавания оффлайн
Если данный курс берётся в качестве основы для оффлайного преподавания, то рекомендуемая продолжительность: 2 дня (16 академических часов).
Если нет интернета
Скачать материалы курса в формате EPUB. Файлы формата EPUB Чем открыть файл на
Android:
EPUB Reader
CoolReader
FBReader
Moon+ Reader
eBoox
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome