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>'; }
Денис Клоков
|
||
Как происходит фильтрация по пользовательским полям секций:
| ||
Jyrki Lindbloom
|
||
Простая запись для вытаскивания ID от одного элемента:
| ||
Антон Козлов
|
Способ "VALUE_ENUM_ID" для поля типа список не заработал. У нас фильтрация по списку заработала "UF_"код_поля => VALUE_ENUM_ID .
По фильтрации других типов полей информация от службы тех поддержки:
|
Александр
|
||||
Совет на случай, если нужно выводить пользовательское свойство типа "Видео".
Столкнулся с этой проблемой в компоненте catalog.section, но при ручном выборе через эту функцию было тоже самое. Значение свойства выводится как сереализованный массив, иными словами просто как оно в БД хранится. Восстановить можно функцией php unserialize(), потом подставить параметры в компонент плеера. Но есть одно но. Допустим ваше свойство называется UF_VIDEO. Вызов
Дело в том, что здесь битрикс уже применил, как я понимаю, что то вроде htmlspecialchars или htmlentities. Таким образом, кавычки, например, преобразованы в " Этого внешне не видно, пока не посмотришь не просто на страницу с print_r, а на её html-код Чтобы всё заработало используйте ~
| ||||
Владислав Ухов
|
||
Получить все родительские разделы для данного:
| ||
Алексей Попович
|
||
потратил много времени на решение простейшей задачи. Думаю, кому-то еще может пригодиться решение.
Задача: нужно найти список всех родителей раздела. Решение простейшее и основывается на функции
| ||
Роман Павленко
|
||
Для фильтрации по свойству элементов типа "список" надо передавать
| ||
Анатолий Кирсанов
|
Когда требуется выбрать пользовательское свойство, поле IBLOCK_ID фильтра должно быть скалярным значением (проще говоря, работает это при выборке по одному инфоблоку).
|
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.