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_*
Используйте лучше D7
Не переключайтесь в просмотреть, при написании нового комментария. Штука полу рабочая | ||
![]()
Сообщение не промодерировано, возможны ошибки и неточности.
|
Ебучие битриксойдные животные! Боги анала и гениальной мысли! Объясните мне тупой обезьяне какого хуя в вашей ублюдской документации написано черным по, блять, коричневому, что можно получить значение "UF_" св-в, добавив в CIBlockSection::GetList, массив $arSelect, и мало того, что этот $arSelect в вашей мусорной доке не указан в примере, в примере есть только $select, но это хуй с ним. $arSelect написал в комменте какой то рукожопый чорт, которому надо оторвать нахуй руки за эту табуляцию и переебанный до нечитаемости код. Повторив этот финт ушами, какого то хуя это не сработало, очень странно да?. Не сработало ни "UF_SEO" ни "UF_*". Выборка раздела происходит валидно, все передано валидно. Просто ебливые UF св-ва не выводятся и все.
Какого хуя, я должен башляя бабки за лицензию этого мусора, еще сидеть и рвать себе обоими руками очко, пытаясь через жопу вывести ебаное св-во в раздел, когда это по сути вопрос 5 минут. А я ебусь с этой драной задачей уже час, теряя деньги и время. Дока не рабочая, в поисковиках либо 0 инфы, видимо с этим убожеством просто мало кто работает, либо отсылки к доке, которая, блять, не рабочая. Насколько просто надо быть конченным моральным ублюдком, чтобы сука так спроектировать систему и так наотъебись сделать все, включая СВЯТОЕ - Документацию. Просто дайте адрес причастного конкретно к этой проблеме человека, я куда угодно приеду, ебальник ему набью сука. Чтобы этого дерьма больше не случалось ни с кем. P.S ебал в рот каждого, кто причастен к созданию этого мусора и написанию этой документации. Поставил галку чтоб постить смайлики, вот вам еще смайликов, пидарасища. ![]() ![]() ![]() ![]() ![]() ![]() P.P.S Проклинаю каждую блядскую наносекунду работы с этим дерьмом в своей жизни. |
![]()
Сообщение не промодерировано, возможны ошибки и неточности.
|
"Массив для сортировки, имеющий вид by1=>order1[, by2=>order2 [, ..]], где by1, ... "
если перевести на php, то выходит $sort = ("name"=>"ASC" array(, "LAST_NAME"=>"ASC") array() ) Я не понимаю, что имел в виду автор документации. Можно пояснить? |
![]()
Сообщение не промодерировано, возможны ошибки и неточности.
|
$arResDB = $DB->Query("SEL ECT `$ufFieldName` FR OM b_uts_iblock_" . $iblockId . "_section WHERE VALUE_ID = $sectionId"); Для получения значение пользовательского поле Раздела в Инфоблоке |
![]()
Сообщение не промодерировано, возможны ошибки и неточности.
|
Пожалуйста, замените в документации "Нестатический метод" на "Статический метод."
|
![]()
Олег Постоев
| ||||
Поиск по UF_* с отрицанием не работает, как это устроено при работе с элементами.
То есть, вместо:
нужно использовать:
| ||||
![]()
Виталий Савицкий
| ||||
Самая короткая запись, чтобы найти id раздела (секции) по символьному коду родительского информационного блока и символьному коду самого искомого раздела:
| ||||
![]()
Александр Николаев
| ||
Вывел картинку раздела по пользовательское полю раздела UF_FILE в catalog.section.list
| ||
![]()
ocpbbtx
| ||||
Сортировка разделов по пользовательскому свойству:
Это все можно передать в подключение компонента "bitrix:catalog.section.list" Там есть параметр: CUSTOM_SECTION_SORT
И вуаля, все отфильтруется! | ||||
Эдуард Пащенко
|
Если вы хотите выбрать подразделы раздела, то необходимо id основного раздела передавать с ключом SECTION_ID, а не IBLOCK_SECTION_ID (как указано в доке)
|
© «Битрикс», 2001-2025, «1С-Битрикс», 2025
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.