- Выводим названия разделов инфоблоков в Битриксе
- Используем компонент «news.list»
- Если элемент входит в несколько разделов
- как получить название раздела, зная его ID
- Как в 1С-Битрикс вывести имя раздела и ссылку на него
- автор: Dmitriy
- 13 комментария
- GetElementGroups
- Описание
- Смотрите также
- Параметры вызова
- Возвращаемое значение
- Примеры использования
- Пользовательские комментарии
- Список элементов инфоблока с названиями разделов в качестве заголовков
- Первый способ – используем Bitrix Framework
- Второй способ – используем несколько стандартных компонентов и настраиваем их шаблоны.
Выводим названия разделов инфоблоков в Битриксе
Поддержка и сопровождение сайта, помимо обычного добавления информации (новости, статьи и т.д.) на веб-ресурс, часто подразумевает изменение или добавление какого-либо функционала. Для сайта «Детский МИР (музей истории русской) открытки» возникла потребность разделения новостного раздела на разделы (подкатегории) и последующий вывод названий этих разделов на странице списка всех новостей.
Используем компонент «news.list»
Для вывода списка новостей используется стандартный компонент «news.list». Шаблон компонента находится по адресу: /bitrix/templates/site-template/components/bitrix/news/news-template/bitrix/news.list/.default/template.php. Соответственно, для реализации задачи нам потребуется его редактирование. Обратимся к интернету. На профильном форуме для разработчиков «1С-Битрикс» находим нужное нам решение «Вывод названия раздела инфоблока» (http://dev.1c-bitrix.ru/support/forum/forum6/topic9567/) и конкретно код:
Далее мы будем использовать переменную
в нужном месте, которая будет выводит нам название раздела, к которому относится элемент инфоблока.
Если элемент входит в несколько разделов
Все бы ничего, но этот способ подходит только для случая, когда элемент инфоблока входит в состав одного раздела. В случае, если элементу необходимо вхождение в несколько разделов, указанный код выведет нам название только одного раздела с меньшим ID.
На упомянутом выше форуме находим еще одно решение «Список разделов элемента»: http://dev.1c-bitrix.ru/support/forum/forum6/topic34935/. Для вывода списка разделов используется функция CIBlockElement::GetElementGroups. Она возвращает группы, которым принадлежит элемент, по его коду ID:
В нашем случае мы будем использовать следующий код, при этом arResult заменим на arItem:
Готово! Теперь мы умеем узнавать название раздела, в который входит элемент инфоблока (функция, не предусмотренная стандартным функционалом Битрикс) и узнавать все названия разделов, если элемент инфоблока входит в состав более одного из них.
Источник
как получить название раздела, зная его ID
Помогите, пожалуйста, разобраться.
Имеется инфоблок (каталог товаров), элементы инфоблока — товары — располагаются в конечных папках (разделах).
Компонент bitrix:search.page (Стандартная страница поиска) выдает в результате поиска ссылку на элемент инфоблока, а как путь — путь к корневой папке инфоблока. Хотелось бы также выводить ссылку на раздел инфоблока, в котором размещается этот товар. Ссылка на раздел имеется (не сложно определить из атрибутов элемента инфоблока), а как получить название раздела — тут я затрудняюсь.
Вот такая задачка 🙂
Соберите все идентификаторы секций, затем 1м запросом выберете все с помощью CIBlockSection::GetList
https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getlist.php
Михаил, большое спасибо за отклик.
Я, наверное, не совсем точно сформулировал.
Поскольку мной используется ЧПУ и адрес страницы с элементом содержит также символьный код названия раздела, то в результате поиска я имею не ID раздела, а его символьный код.
Не понял что вы понимаете под идентификаторами секций и для чего нужно их все собирать.
Нельзя ли как-то проще сделать путем обращения к нужной таблице базы денных, которая возможно содержит информацию о разделе (его ID, символьный код и название), и выборки названия раздела по его символьному коду ?
Попробовал использовать следующий код
Директор по развитию в Progressive Media
Александр Живетьев,
Спасибо за отклик.
В настройках инфоблока это указано, т.к. необходимо для работы ЧПУ.
Поиск работает правильно, но в строке «Путь» выдает только путь к инфоблоку «Главная страница / Каталог товаров», а мне бы хотелось указать и конечный раздел, в котором товар расположен. (Например, «Главная страница / Каталог товаров / Телевизоры LG»)
символьный код раздела определить несложно из адреса страницы товара, который имеет вид /catalog/#SECTION_CODE#/#CODE#/. Я временно видоизменил цепочку «Путь», сейчас она имеет вид «Главная страница / Каталог товаров > > > подгруппа». (где подгруппа — ссылка к разделу товара)
А как правильно определить название раздела не знаю
Источник
Как в 1С-Битрикс вывести имя раздела и ссылку на него
Зная ID раздела, в битриксе очень просто вывести его имя, а также узнать, по какой ссылке он доступен.
Ссылка формируется из настроек инфоблока. Чтобы все ваши ссылки отображались корректно, настройки внутри инфоблока и вашего компонента должны совпадать.
Для того чтобы вывести имя раздела будем использовать API Битрикса.
$arItem[‘IBLOCK_SECTION_ID’] — ID раздела, имя которого мы хотим вывести
$ar_res[‘SECTION_PAGE_URL’] — ссылка на раздел
$ar_res[‘NAME’] — имя раздела
автор: Dmitriy
Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.
— Создание сайтов на 1С-Битрикс любой сложности
— Вёрстка макетов Figma, Photoshop, Zeplin
— Поддержка проектов на Битриксе
— Разработка нового функционала для сайта
— Парсинг данных
— Выгрузка \ Загрузка файлов в формате XML, YML, XLS, XLSX, CSV, JSON
— Интеграция по API со сторонними сервисами
и многое другое
13 комментария
Хочу сделать возможной вывод списка новостей принадлежащих только конкретному разделу. Как это сделать?
Во втором массиве, он же arFilter, вам нужно указать как минимум 3 параметра Array(«IBLOCK_ID» => $iblock_id, «ACTIVE» => «Y», «SECTION_ID» => $SECTION_ID), — где нужно указать id инфоблока и секции, а также указать что будем выбирать только активные элементы.
ПС извиняюсь что ответил с задержкой, спам фильтр жёстко работает 🙂
Ну вот сижу зациклился на разделах инфоблока и упорно пишу туда код раздела инфоблока, а не самого инфоблока. Поставил свой, толку мало, вижу на странице только название страницы содержание раздела инфоблока теперь не выводится.
Попробуйте перед кодом добавить
в более новых версиях битрикса есть выбор основного раздела, по которому и строится урл, плюс в настройках компонента вам нужно обязательно включить показ 404 страницы, чтобы при введении разных символов сервер отдавал 404. В настройках инфоблока, если я не путаю, можно найти выбор основного раздела
попробуйте перед подключить модуль инфоблока
Добрый день! Это не работает, если элемент относится сразу к двум разделам. Нашел решение:
Fetch()) <
$temp++; // Проверим, к какому количеству разделов принадлежит элемент
>
if ($temp == 1) < // Если элемент принадлежит только к одному разделу
$db_old_groups = CIBlockElement::GetElementGroups($arItem[‘ID’], false);
while($ar_group = $db_old_groups->Fetch()) <
echo ‘Раздел: ‘ . $ar_group[«NAME»];
>
>
else < // Если элемент принадлежит более чем к одному разделу
echo ‘Разделы: ‘;
$db_old_groups = CIBlockElement::GetElementGroups($arItem[‘ID’], false);
while($ar_group = $db_old_groups->Fetch()) <
echo $ar_group[«NAME»] . ‘ ‘;
>
>
?>
… но не могу понять как сделать ссылками эти разделы.
Добрый день, Дмитрий.
Не могу понять в чем ошибка.
С помощью GetList вывожу список папок инфоблока:
«ASC»),
Array(«IBLOCK_ID» => 5, «ACTIVE» => «Y»),
false,
Array(‘ID’, ‘NAME’, ‘CODE’, ‘SECTION_PAGE_URL’)
);
while($ar_fields = $my_sections->GetNext())
<
?>
При переходе на ссылку детального просмотра содержимого папки — отображается все содержимое инфоблока, плюс URL прописывается : » http://www.site.ru/kalendar/march/ «, т.е. index.php не дописывает.
В настройках комплексого компонента news включен режим ЧПУ:
Страница общего списка: #SECTION_CODE#/
Страница раздела: #SECTION_CODE#/
Страница детального просмотра: #SECTION_CODE#/#ELEMENT_CODE#/
В настройках инфоблока прописано:
URL страницы информационного блока: #SITE_DIR#/kalendar/
URL страницы раздела: #SITE_DIR#/kalendar/#SECTION_CODE#/
URL страницы детального просмотра: #SITE_DIR#/kalendar/#SECTION_CODE#/#ELEMENT_CODE#/
Подскажите пожалуйста в чем ошибка или какую информацию почитать?
ну не глядя 2 причины возможны:
1. возможно вам нужно внутри компонента включать настроку ЧПУ и там дополнительно прописать правила формирования (проверить что они добавились в файл urlrerwite.php)
2. возможно у ваших элементов не сгенерирован символьный код
Предыдущий код не корректно отобразился — продублировала.
«ASC»),
Array(«IBLOCK_ID» => 5, «ACTIVE» => «Y»),
false,
Array(‘ID’, ‘NAME’, ‘CODE’, ‘SECTION_PAGE_URL’)
);
Источник
GetElementGroups
Описание
Принимает массив идентификаторов элементов. Возвращает группы, которым принадлежит элемент, по его коду ID. Метод статический.
Смотрите также
Параметры вызова
Параметр | Описание | С версии |
---|---|---|
ID | ID элемента, либо массив ID элементов, для которых надо вернуть привязки к разделам. | |
bElementOnly | Не обязательный параметр. Указывает на необходимость выборки привязок и из свойств типа «Привязка к разделу». По умолчанию равен false и значения свойств будут выбраны. Если значения свойств не нужны, то значением параметра надо задать true. | 5.1.0 |
arSelect | Перечень возвращаемых полей. Допустимые поля: |
Поля, относящиеся к разделу:
- ID — ID раздела инфоблока;
- TIMESTAMP_X — дата последнего изменения параметров раздела;
- MODIFIED_BY — идентификатор пользователя, в последний раз изменившего раздел;
- DATE_CREATE — дата создания раздела;
- CREATED_BY — идентификатор пользователя, создавшего раздел;
- IBLOCK_ID — ID информационного блока;
- IBLOCK_SECTION_ID — ID раздела-родителя;
- ACTIVE — (Y|N) флаг активности раздела;
- GLOBAL_ACTIVE — (Y|N) флаг активности раздела, учитывая активность вышележащих (родительских) разделов;
- SORT — порядок сортировки;
- NAME — название раздела;
- PICTURE — код картинки раздела;
- LEFT_MARGIN — левая граница раздела;
- RIGHT_MARGIN — правая граница раздела;
- DEPTH_LEVEL — уровень вложенности раздела;
- DESCRIPTION — описание раздела;
- DESCRIPTION_TYPE — тип описания группы (text/html);
- SEARCHABLE_CONTENT — содержимое для поиска при фильтрации групп;
- CODE — символьный идентификатор;
- XML_ID — внешний код;
- EXTERNAL_ID — внешний код;
- TMP_ID — временный строковый идентификатор, используемый для служебных целей;
- DETAIL_PICTURE — код картинки детального просмотра раздела;
- SOCNET_GROUP_ID — группа Социальной сети.
Поля, относящиеся к инфоблоку раздела:
- LIST_PAGE_URL — шаблон URL-а к странице для публичного просмотра списка элементов информационного блока;
- SECTION_PAGE_URL -шаблон URL-а к странице для просмотра раздела;
- IBLOCK_TYPE_ID — код типа инфоблоков;
- IBLOCK_CODE — символьный код инфоблока;
- IBLOCK_EXTERNAL_ID — внешний код инфоблока.
Поля, относящиеся к элементу, для которого возвращаются разделы:
- IBLOCK_ELEMENT_ID — код элемента;
- ADDITIONAL_PROPERTY_ID — код свойства (не пусто, если элемент привязан к разделу через свойство).
По умолчанию возвращаются все поля.
Возвращаемое значение
Примеры использования
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Источник
Список элементов инфоблока с названиями разделов в качестве заголовков
Как известно в «1С-Битрикс» нет стандартного компонента, который бы выводил элементы инфоблока, расположенные в разделах, таким образом, чтобы название раздела было заголовком списка элементов из этого раздела. Однажды мне понадобилось вывести список проектов одной компании на страницу сайта описанным выше образом. Я нашел 2 способа решения этой задачи, о которых расскажу в этой статье.
Решать эту задачу я буду на демо-сайте CMS «1С-Битрикс. Управление сайтом» редакция «Стандарт». При установке демо-версии сайта и выбора типа решения для демонстрации, нужно выбрать версию для разработчиков. В версии для разработчиков существует инфоблок «Книги». Его элементы распределены по разделам. С ним я и буду работать.
Все файлы, созданные мной в процессе работы над задачей, я помещу в архив. Ссылка на загрузку архива находится в конце статьи.
Сначала, как обычно подготовительный этап: нужно создать новое свойство страницы (Настройки → Настройки продукта → Настройки модулей → Управление структурой). Оно понадобится в случае, когда элементы, которые нужно будет вывести на странице, находятся в подразделах какого-либо раздела. Назову этот раздел – «разделом первого уровня», хотя необязательно, что он будет находиться в дереве разделов инфоблока на первом уровне. В этом свойстве будет храниться идентификатор раздела первого уровня, в котором находятся разделы с элементами. Назовем его sect_id .
Также нужно создать 2 пустые страницы. Пусть они будут располагаться в папке test, расположенной в корне демо-сайта. Назовем первую list-1.php, а вторую list-2.php.
Первый способ – используем Bitrix Framework
Открываем страницу list-1.php и присваиваем созданному свойству sect_id значение 13 (в демо-версии сайта – это раздел под названием «Наука и образование»).
Я решил организовать код скрипта в виде функции под названием MakeElementsTree , для его повторного использования. Будет правильно размещать все написанные вами функции в файле \bitrix\php_interface\init.php. Вот код функции:
Внутри функции сначала проверяем, установлен ли в системе модуль «Информационные блоки». Если да – подключаем его. Теперь нам доступны все методы и функции класса. Далее сохраняем в переменной $eltype значение свойства sect_id страницы, установленное выше. Напомню, что это код раздела первого уровня, в нем находятся разделы с элементами, которые мы будем выводить на нашей странице. По коду раздела определяем код инфоблока и помещаем эти данные в массив $arFilter , который будет являться фильтром для выборки разделов (находящихся внутри раздела первого уровня).
Создаем пустой массив с именем $ar_result . Он будет «основным» в нашем скрипте, — то есть в него будет сохраняться вся информация о разделах и элементах, которые потом будут выведены на страницу сайта.
Получаем данные о разделах и сохраняем их в виде массивов в основной массив $ar_result . Ключами элементов массива будут идентификаторы подразделов с элементами. Внутри каждого массива будет элемент “NAME” с названием раздела.
Теперь обходим в цикле получившийся массив и дополняем его информацией об элементах из разделов. Используем для этого метод CIBlockElement::GetList , передаем ему в виде фильтра идентификаторы разделов. Далее получаем значения полей элементов CIBlockResult::GetNextElement — сохраняем необходимые данные в массиве. Массивы со значениями полей элементов, помещаем в массив $ar_result[код_раздела][“ITEMS”] .
Массив $ar_result заполнен информацией как было задумано в начале. Теперь можно вывести на страницу информацию из него. За это отвечает оставшаяся часть кода. Результат работы скрипта можно увидеть на рисунке:
Внешний вид списка можно настроить при помощи CSS или поправил ту часть скрипта, которая отвечает за вывод элементов массива $ar_result .
Небольшое ограничение: при указании раздела первого уровня, элементы, находящиеся в нем, в списке отображаться не будут, будут отображаться только элементы из подразделов раздела первого уровня. Я немного расширил скрипт так, что элементы внутри раздела первого уровня тоже отображаются в списке. Расширенная версия находится в файле list-1f.php.
С первым способом закончили, теперь можно перейти ко второму.
Второй способ – используем несколько стандартных компонентов и настраиваем их шаблоны.
Второй способ формирования списка элементов с заголовками из названия их разделов, заключается в использовании стандартных компонентов системы catalog.section и catalog.section.list , а именно в кастомизации шаблонов этих компонентов.
Открываем страницу list-2.php и присваиваем созданному свойству sect_id значение 13 (в демо-версии сайта – это раздел под названием «Наука и образование»).
Затем размещаем на странице код вызова компонента catalog.section.list со следующими параметрами: тип инфоблока – “books”, инфоблок – «Книги[6]», в поле «ID раздела» — указываем имя переменной $sect_id , в которой хранится идентификатор раздела первого уровня.
Далее нужно скопировать шаблон компонента в папку текущего шаблона. В архиве, который можно скачать по ссылке в конце этой статьи в папке templates находятся файлы шаблонов обоих компонентов. Скопируем шаблоны компонентов catalog.section.list и catalog.section в папку шаблона сайта. На демо-сайте это будет папка /bitrix/templates/books/components/bitrix/. В нее нужно скопировать обе папки и выбрать этот шаблон “projects” в настройках компонента на странице list-2.php.
Этот шаблон изменен таким образом, что если внутри раздела первого уровня нет дочерних разделов, то выводится список элементов, а если разделы существуют, то они обходятся в цикле и из них извлекаются дочерние элементы. В любом из перечисленных случаев элементы списка выводятся на страницу с помощью компонента catalog.section , вызов которого размещен в файле шаблона. В коде вызова этого компонента (при работе с демо-версией сайта) нужно указать следующие параметры:
Это нужно сделать в обоих блоках условной конструкции.
Шаблон компонента catalog.section также настроен для вывода списка в определенном виде.
Поэтому внешний вид обеих страниц будет одинаковым. Это можно заметить, если посмотреть на оба скриншота страниц.
На этом завершаю свою статью, задача успешно выполнена двумя способами. Какой из них более удобный выбирать вам, главное чтобы он был полезен вам при решении подобной задачи.
Источник