Здравствуйте уважаемые любители Bitrix. Сегодня тот день, когда можно найти немного интересного в классе «bitrix getlist»:
CIBlockElement::GetList
Вот этот простой гетлист(CIBlockElement::GetList), выводит массив с выбранными элементами инфоблока:
12345678910 $arSelect = Array("ID", "NAME");$arFilter = Array("IBLOCK_ID"=>IntVal($idIblock), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);while($ob = $res->GetNextElement()){$arFields = $ob->GetFields();$arElements[] = $arFields; // элементы}
Получаем список активных пользователей:
12345678910 $cUser = new CUser;$sort_by = "ID";$sort_ord = "ASC";$arFilter = array("ACTIVE" => 'Y');$dbUsers = $cUser->GetList($sort_by, $sort_ord, $arFilter);while ($arUser = $dbUsers->Fetch()) {$users[]=$arUser;}
Вызвав гетлист, методом GetPageNavStringEx помещаем в $pag хтмл код пагинации, в данном случае шаблон — modern:
1234 $res = CIBlockElement::GetList($arOrder, $arFilter, false, Array("nPageSize"=>20), $arSelect);$pag = $res->GetPageNavStringEx($navComponentObject, "", 'modern');
Вот здесь уже поинтереснее, API Bitrix обновилось и можно уже работать так:
В последних версиях битрикс, функция CIBlockElement::GetList довольно часто применяется для решения многих задач. В основном это связано с тем, что Битрикс заменили много старых функций, одной универсальной, которая позволяет выполнять те же самые задачи что и раньше при помощи других функций. Так как описание CIBlockElement::GetList есть полностью на сайте битрикса, здесь приведу лишь один из примеров ее использования для вывода различных свойств элементов инфоблока:
12 <!--?CModule::IncludeModule("iblock"); $arSelect = Array("ID", "NAME", "PREVIEW_PICTURE", "DETAIL_PICTURE", "PROPERTY_LINK"); $arFilter = Array("IBLOCK_ID"=&gt;10, "ACTIVE_DATE"=&gt;"Y", "ACTIVE"=&gt;"Y"); // $res = CIBlockElement::GetList(Array("SORT"=&gt;"ASC"), $arFilter, false, false, $arSelect); // Вызов while($ob = $res-&gt;GetNextElement()) { $arFields = $ob-&gt;GetFields(); echo 'Выводим путь к изображению превью: '.CFile::GetPath($arFields["PREVIEW_PICTURE"]).'" и имя: '.$arFields["NAME"].'.'; echo 'Выводим путь к детальному изображению: '.CFile::GetPath($arFields["DETAIL_PICTURE"]); echo 'Выводим пользовательсткое свойство инфоблока: '.$arFields["PROPERTY_LINK_VALUE"].'; } ?-->
GetList это метод, который используется а в классе инфоблока, например CiIblockElenent, давайте обо всем по порядку. Что это такое и как пользоваться, необходим этот метод для того чтобы, получить список элементов инфоблока, список новостей, к примеру, GetListов, их много, они используются в разных модулях, в разных классах, классов тоже очень много, на данный момент рассмотрим Модуль Инфоблоки, класс «Элементы Инфоблока», если посмотреть по документации, то у нас идет модуль «Информационные блоки», а потом перечисляются классы CBlock, CBlockElement…, Если зайдем например в CBlockElement, здесь тоже есть тоже GetList, но мы по нему получим другую информацию, мы получим список «Инфоблоков».
Далее, как мы используем данный метод, а применение его довольно простое, на этом примере я вам расскажу, как принципе пользоваться документацией, когда я ей пользуюсь, я захожу в интересующий меня метод, читаю о нем, внизу есть примеры, как его использовать, примеры различные и я вам рекомендую посмотреть разные примеры в документации, и применить именно тот который вам больше подходит, вот например по данному методу, я часто использую вот вот пример
12345678910 <? $arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*");//IBLOCK_ID и ID обязательно должны быть указаны, см. описание arSelectFields выше $arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>2), $arSelect);while($ob = $res->GetNextElement()){$arFields = $ob->GetFields();print_r($arFields);$arProps = $ob->GetProperties();print_r($arProps);}?>
Для вывода элементов инфоблока, необходимо указать ID этого инфоблока в строке: $arFilter = Array(«IBLOCK_ID»=>»4», «ACTIVE_DATE»=>»Y», «ACTIVE»=>»Y»);
В данном примере, как он есть с вероятностью 100% выведится ошибка, если просто скопировать и вставить данный участок кода на страницу, а происходит это именно потому что на странице не подключен модуль инфоблоков
12 <? if (CModule::IncludeModule("iblock")): // здесь необходимо использовать метода модуля "Информационные блоки" ... endif; ?>
Это классическая ошибка, необходимо разместить этот участок кода вначале и далее
стандарт вначале.
Таким образом у нас получается конструкция:
1234567891011 <? if (CModule::IncludeModule("iblock")) { $arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*");//IBLOCK_ID и ID обязательно должны быть указаны, см. описание arSelectFields выше $arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>2), $arSelect);while($ob = $res->GetNextElement()){$arFields = $ob->GetFields();print_r($arFields);$arProps = $ob->GetProperties();print_r($arProps);}}?>
Вот таким вот образом, информация выведется через print_r на странице, теперь для удобства можно обрамить это все в
1 |
... |
.
Теперь я распишу весь участок этого кода, для понимания.
1234567891011 <? if (CModule::IncludeModule("iblock")) { //здесь мы подключаем модуль Инфоблоки. Чтобы пользоваться классами какого-то определенного модуля, обязательно нужно этот модуль подключить. У каждого модуля свое подключение. Строка одинаковая, меняется только название модуля, вы можете подключить там Инфоблок, Магазин, Главный модуль он всегда подключается, вообщем то, что вы будете использовать. $arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*");//IBLOCK_ID и ID обязательно должны быть указаны, см. описание arSelectFields выше $arFilter = Array("IBLOCK_ID"=>IntVal($yvalue), "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>2), $arSelect);while($ob = $res->GetNextElement()){$arFields = $ob->GetFields();print_r($arFields);$arProps = $ob->GetProperties();print_r($arProps);}}?>
теперь разложим сам метод GetList на части.
12345678910111213141516171819202122232425262728 <? if (CModule::IncludeModule("iblock")) { //здесь мы подключаем модуль Инфоблоки. Чтобы пользоваться классами какого-то определенного модуля, обязательно нужно этот модуль подключить. У каждого модуля свое подключение. Строка одинаковая, меняется только название модуля, вы можете подключить там Инфоблок, Магазин, Главный модуль он всегда подключается, вообщем то, что вы будете использовать. $arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*"); //IBLOCK_ID и ID обязательно должны быть указаны, см. описание arSelectFields выше $arFilter = Array("IBLOCK_ID"=>"4", "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "GLOBAL_ACTIVE" => "Y");$res = CIBlockElement::GetList(Array(), // массив сортировки, либо сортировка данных, мы можем сортировать по любым полям и свойствам, таким образов в массиве, можно отсортировать данные по дате, таким образом, Н: Array("DATE_ACTIVE_FROM" => "ACS"), сортировка может быть двунаправленная, можно отсортировать по дате, а потом среди одинаковых дат можно отсортировать по полю SORT -поле сортировки. Н: Array("DATE_ACTIVE_FROM" => "ACS", "SORT" => "DESC"), по-убыванию$arFilter,// Массив фильтр, это те данные, которое мы можем фильтровать, если мы получаем данные из Инфоблока 4, выбираем только с активной датой, и у которых стоит галочка ACTIVE.false, // группировка, если данные будут группироваться, это может быть опять же поле или свойство.Array("nPageSize"=>2),// массив постраничной навигации, данные будут выдаваться по 2 элемента на страницу, можно не использовать постраничную навигацию и поставить ЛОЖЬ. Н: false,$arSelect// позволяет выводить, только тот перечень свойств и полей, которые необходимы в выборке, чтоб массив не был большим. свойств в данном примере нет, поэтому они и не выводятся.);while($ob = $res->GetNextElement()){ //Когда мы формировали объект, вот здесь мы формируем объект, который записывается в $res, нам необходимо перебрать все данные, которые в этот объект попали, то есть, в выборку из базы данных, то что мы получили, оно содержится в $res, перебирается с помощью методов GetNextElement, также можно использовать Fetch(), это более старый метод и он может не работать в данном случае, может не выводить свойства, поэтому рекомендую использовать GetNextElement(), далее здесь мы получаем из объекта поля, и здесь мы получаем свойства, и выводим, соответственно здесь мы уже можем с каждым элементом оперировать.$arFields = $ob->GetFields();print_r($arFields);$arProps = $ob->GetProperties();print_r($arProps);}}?>
Обычно я так и делаю, обычно делаю вывод один раз в конце
123456789101112 <? if (CModule::IncludeModule("iblock")) { $arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*"); $arFilter = Array("IBLOCK_ID"=>"4", "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>2), $arSelect);while($ob = $res->GetNextElement()){$arItem = $ob->GetFields();$arItem["PROPERTIES"] = $ob->GetProperties();$arResult() = $arItem;}print_r($arResult);}?>
Если нам необходимо выводить другие поля, то смотрите в документации в $arSelectFilds, например PREVIEW_TEXT и так далее, вы можете сами выбирать с помощью фильтров или сортировок как и какие поля выводить.
Надеюсь информация оказалась для вас полезной
Всем удачи!!!