GetList
Описание
CIBlockResult CIBlockSection::GetList( array arOrder = Array("SORT"=>"ASC"), array arFilter = Array(), bool bIncCnt = false, array Select = Array(), array NavStartParams = false );
Возвращает список разделов, отсортированных в порядке arOrder по фильтру arFilter. Нестатический метод.
Смотрите также
Параметры вызова
Параметр | Описание | С версии |
---|---|---|
arOrder | Массив для сортировки, имеющий вид by1=>order1[, by2=>order2 [, ..]], где by1, ... - поле сортировки, может принимать значения:
Кроме того, сортировка возможна и по пользовательским свойствам UF_XXX. Значение по умолчанию Array("SORT"=>"ASC") означает, что результат выборки будет отсортирован по возрастанию. Если задать пустой массив Array(), то результат отсортирован не будет. | |
arFilter | Массив вида array("фильтруемое поле"=>"значение" [, ...]). Фильтруемое поле может принимать значения:
Значения фильтра одиночное значение или массив. Важно! Чтобы фильтрация выполнялась по пользовательским свойствам, необходимо обязательно передавать в фильтр IBLOCK_ID. Само свойство надо указывать в виде UF_... Необязательное. По умолчанию записи не фильтруются. | |
bIncCnt | Возвращать ли поле ELEMENT_CNT - количество элементов в разделе. При этом arFilter дополнительно обрабатывает следующие фильтруемые поля:
Примечание: в случае если в фильтре есть ключ PROPERTY то в количестве элементов вернется то значение, которое попадает под этот фильтр по значению свойств. | |
arSelect | Массив для выборки.
| 6.0.3 |
arNavStartParams | Массив для постраничной навигации. Может содержать следующие ключи:
| 11.0.0 |
Возвращаемое значение
Возвращается объект CIBlockResultПримечание №1: для вывода пользовательских свойств обязательно должен быть передан IBLOCK_ID и в arSelect код необходимых свойств UF_XXX. Если необходимо вывести все пользовательские свойства, то в arSelect необходимо передать UF_*.
Примечание №2: поле для сортировки left_margin, так называемая "сквозная" сортировка, высчитывается на основании поля sort, уровня вложенности и сортировкой верхнего уровня. Отличие полей sort и left_margin в том, что sort указывается пользователем, для сортировки разделов между собой в пределах одного раздела-родителя, а вычисляемое left_margin предназначено для сортировки во всем информационном блоке.
Примечание №3: нет возможности фильтровать разделы в выборке по количеству элементов.
Дополнительно
Выбор пользовательских свойств разделов возможен только при передаче в ключ фильтра IBLOCK_ID одиночного значения.
Примеры использования
Пример 1:
<? $arIBTYPE = CIBlockType::GetByIDLang($type, LANGUAGE_ID); if($arIBTYPE!==false) { // выборка только активных разделов из инфоблока $IBLOCK_ID, в которых есть элементы // со значением свойства SRC, начинающееся с https:// $arFilter = Array('IBLOCK_ID'=>$IBLOCK_ID, 'GLOBAL_ACTIVE'=>'Y', 'PROPERTY'=>Array('SRC'=>'https://%')); $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true); $db_list->NavStart(20); echo $db_list->NavPrint($arIBTYPE["SECTION_NAME"]); while($ar_result = $db_list->GetNext()) { echo $ar_result['ID'].' '.$ar_result['NAME'].': '.$ar_result['ELEMENT_CNT'].'<br>'; } echo $db_list->NavPrint($arIBTYPE["SECTION_NAME"]); } ?>
Пример 2:
//пример выборки дерева подразделов для раздела $rsParentSection = CIBlockSection::GetByID(ID_необходимой_секции); if ($arParentSection = $rsParentSection->GetNext()) { $arFilter = array('IBLOCK_ID' => $arParentSection['IBLOCK_ID'],'>LEFT_MARGIN' => $arParentSection['LEFT_MARGIN'],'<RIGHT_MARGIN' => $arParentSection['RIGHT_MARGIN'],'>DEPTH_LEVEL' => $arParentSection['DEPTH_LEVEL']); // выберет потомков без учета активности $rsSect = CIBlockSection::GetList(array('left_margin' => 'asc'),$arFilter); while ($arSect = $rsSect->GetNext()) { // получаем подразделы } }
Пример 3:
//в шаблоне меню, построенного по структуре инфоблока, менять ссылку на элемент, если заполнено пользовательское поле <? //внутри цикла построения меню $uf_iblock_id = 1; //ID инфоблока $uf_name = Array("UF_PAGE_LINK"); //пользовательское поле UF_PAGE_LINK preg_match('/\?ID=([0-9]+)\&?/i', $arItem["LINK"], $matches); //SEF отключен, поэтому спокойно берем SECTION_ID из ссылки по шаблону ID=#SECTION_ID# $uf_section_id = $matches[1]; if(CModule::IncludeModule("iblock")): //подключаем модуль инфоблок для работы с классом CIBlockSection $uf_arresult = CIBlockSection::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID" => $uf_iblock_id, "ID" => $uf_section_id), false, $uf_name); if($uf_value = $uf_arresult->GetNext()): if(strlen($uf_value["UF_PAGE_LINK"]) > 0): //проверяем что поле заполнено $arItem["LINK"] = $uf_value["UF_PAGE_LINK"]; //подменяем ссылку и используем её в дальнейшем endif; endif; endif; ?>
Пример 4:
//рассмотрим разницу использования фильтра по LEFT_MARGIN, RIGHT_MARGIN и LEFT_BORDER, RIGHT_BORDER //допустим, что у некоторого раздела LEFT_MARGIN (значение в базе) = 10, RIGHT_MARGIN (значение в базе) = 40 //в первом примере кода будет выбран как сам раздел, так и все его подразделы, //поскольку всегда LEFT_MARGIN раздела-потомка > LEFT_MARGIN раздела-родителя //и RIGHT_MARGIN раздела-потомка < RIGHT_MARGIN раздела-родителя $arFilter = array('IBLOCK_ID' => 10, 'LEFT_MARGIN' => 10, 'RIGHT_MARGIN' => 40); $rsSections = CIBlockSection::GetList(array('LEFT_MARGIN' => 'ASC'), $arFilter); while ($arSection = $rsSections->Fetch()) { echo htmlspecialcharsbx($arSection['NAME']).' LEFT_MARGIN: '.$arSection['LEFT_MARGIN'].' RIGHT_MARGIN: '.$arSection['RIGHT_MARGIN'].'<br>'; } //во втором примере кода будет возвращена только одна запись - сам раздел $arFilter = array('IBLOCK_ID' => 10, 'LEFT_BORDER' => 10, 'RIGHT_BORDER' => 40); $rsSections = CIBlockSection::GetList(array('LEFT_MARGIN' => 'ASC'), $arFilter); while ($arSction = $rsSections->Fetch()) { echo htmlspecialcharsbx($arSection['NAME']).' LEFT_MARGIN: '.$arSection['LEFT_MARGIN'].' RIGHT_MARGIN: '.$arSection['RIGHT_MARGIN'].'<br>'; }
Сообщение не промодерировано, возможны ошибки и неточности.
|
Пожалуйста, замените в документации "Нестатический метод" на "Статический метод."
|
Олег Постоев
|
||||
Поиск по UF_* с отрицанием не работает, как это устроено при работе с элементами.
То есть, вместо:
нужно использовать:
| ||||
Виталий Савицкий
|
||||
Самая короткая запись, чтобы найти id раздела (секции) по символьному коду родительского информационного блока и символьному коду самого искомого раздела:
| ||||
Александр Николаев
|
||
Вывел картинку раздела по пользовательское полю раздела UF_FILE в catalog.section.list
| ||
ocpbbtx
|
||||
Сортировка разделов по пользовательскому свойству:
Это все можно передать в подключение компонента "bitrix:catalog.section.list" Там есть параметр: CUSTOM_SECTION_SORT
И вуаля, все отфильтруется! | ||||
Эдуард Пащенко
|
Если вы хотите выбрать подразделы раздела, то необходимо id основного раздела передавать с ключом SECTION_ID, а не IBLOCK_SECTION_ID (как указано в доке)
|
Антон Царук
|
Фильтрация разделов по пользовательскому свойству типа "Дата" производится "в формате сайта", а не в формате БД. То есть, в фильтре надо писать даты в формате d.m.Y, а не Y-m-d, как следует из логики...
|
Пётр Громов
|
Если в arFilter нет фильтрации по IBLOCK_ID, а например, только айдишник секции, все выборки UF_(
|
Алексей Сучков
|
||||
Если вам нужно вывести постраничную навигацию разделов (для старта отлично подойдёт компонет news.list):
Если у вас не трансформируется "SECTION_PAGE_URL" и выводится вида #SITE_DIR#/какой-то путь/#SECTION_CODE_PATH#/ и вы в селекте указали все необходимые поля ("ID","IBLOCK_ID","IBLOCK_TYPE_ID","IBLOCK_SECTION_ID","CODE" скорее всего вы делаете выборку через Fetch, попробуйте заменить его на GetNext:
| ||||
Дмитрий Гуров
|
||||
Получаем разделы и вложенные подразделы в иерархическом виде:
Пример использования:
| ||||
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.