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>'; }
© «Битрикс», 2001-2024, «1С-Битрикс», 2024