Бывают ситуации, когда нужно вывести список элементов или разделов конкретного информационного блока (инфоблока). Воспользуемся CIBlockElement::GetList для элементов и CIBlockSection::GetList для разделов соответственно.

Как вывести список элементов инфоблока в 1С-Битрикс

Для этого создадим тестовую страницу в корне нашего сайта, например test.php . Код нашего файла будет иметь следующий вид:

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("test");
?>

Text...

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Как видим, подключается header и footer (заголовок нам не нужен в принципе). Теперь напишем код CIBlockElement::GetList между подключением header и footer.

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>

<?
if (CModule::IncludeModule("iblock")):

$iblock_id = 14;
# show url my elements
$my_elements = CIBlockElement::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => $iblock_id),
false,
false,
Array('ID', 'NAME', 'DETAIL_PAGE_URL')
);

while($ar_fields = $my_elements->GetNext()) {
echo urldecode($ar_fields['DETAIL_PAGE_URL'])." ;<br>";
}

endif;
?>

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Код мы написали, теперь давайте посмотрим что мы делаем:

  • подключаем модуль iblock т.к. без него наш код может не работать;
  • задаем переменную, которая равна ID необходимого информационного блока (в моем случае это 14);
  • в переменную записываем CIBlockElement::GetList, иначе не сможем с ним работать;
  • в CIBlockElement::GetList есть массивы с данными:
    • Array(«ID» => «ASC») — массив для сортировки, в нашем случае это ID по возрастанию,
    • Array(«IBLOCK_ID» => $iblock_id) — массив для фильтрации — мы выбрали только по ID инфоблока,
    • false, false — тут можно задать массивы для группировки элементов и выбрать параметры постраничной навигации (как правило, они не нужны, ставим каждому false),
    • Array(‘ID’, ‘NAME’, ‘DETAIL_PAGE_URL’) — последний, но не менее важный массив, который вернет выбранные поля. В нашем случае он вернет ID, Имя элемента, полный путь к детальному элементу (его url).
  • выводим по очереди все наши элементы с помощью цикла.

urldecode — я использовал для правильного отображения кириллических урлов (да, их оказывается кто-то еще использует). $ar_fields[‘DETAIL_PAGE_URL’] — выведет вам в каждой строке ссылку на элемент, при желании, вы можете заменить DETAIL_PAGE_URL на ID или NAME и т.д. в зависимости от того, какая перед вами стоит задача.

Важно знать! Если вы не выбираете поля для последнего массива (который обычно называют arSelect), вы рискуете прилично загрузить ваш сервер, ведь он будет тащить для каждого элемента, значения всех его полей. Представьте сколько это запросов к БД.

Как узнать значения свойств инфоблока в Битриксе

Ну хорошо, мы выводим имя, id и ссылку — казалось бы, зачем весь этот цирк? А вот теперь рассмотрим случай, когда мы с помощью GetList можем узнать свойства инфоблока, конкретного элемента. Заменяем наш arSelect, он же массив с выбором полей на

Array(‘ID’, ‘NAME’, ‘DETAIL_PAGE_URL’, ‘PROREPTY_TITLE’)

где, TITLE — это символьный код вашего свойства (а приписка PROREPTY_ служит как раз для того чтобы это и указать).

Отобразить на экран свойство битрикса можно несколькими способами, в зависимости от его типа — строка это или список. Это может быть как

echo ar_fields['PROREPTY_TITLE']." ;<br>";

так и

echo $ar_fields['PROREPTY_TITLE_VALUE']." ;<br>";

Если у вас что-то не получается, давайте просто выведем список элементов массива:

<?
echo "<pre>";
print_r($ar_fields);
echo "</pre>";
?>

Кстати, если у вас много элементов в массиве, то для такой цели лучше вывести всего поля первого элемента (это может быть товар, новость и т.д.). Как это сделать? Либо дописать в GetList строку

Array ("nTopCount" => 1),

либо создать счетчик перед массивом и вывести для 1 элемента, примерно вот так:

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>

<?
if (CModule::IncludeModule("iblock")):

$iblock_id = 14;
$i = 0;
# show url my elements
$my_elements = CIBlockElement::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => $iblock_id),
false,
Array ("nTopCount" => 1),
Array('ID', 'NAME', 'DETAIL_PAGE_URL', 'PROREPTY_TITLE')
);

while($ar_fields = $my_elements->GetNext())
{
if($i == 0)
print_r($ar_fields);
$i++;
}
endif;
?>

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

P.S. Показал где писать nTopCount

Как вывести список разделов в 1С Битрикс

Описание почти такое же как и в предыдущим примере, но советую все же глянуть описание полей и возможных вариантов в официальной документации.

<?$my_sections = CIBlockSection::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => 14, "ACTIVE" => "Y"),
false,
Array('ID', 'NAME', 'CODE')
);

while($ar_fields = $my_sections->GetNext()) {
echo urldecode($ar_fields['CODE'])." ;<br>";
}?>

Если вы заметили, у нас теперь массив с выбором по порядку четвертый а не пятый и добавился параметр » ACTIVE» => «Y» , который выводит только активные «разделы»(это работает и для CIBlockElement, просто в данном скрипте нашими элеменами являются разделы инфоблока). Принцип работы с CIBlockSection::GetList почти такой же, как и с CIBlockElement. В данном скрипте мы выводим символьный код разделов, предварительно преобразовав в читаемую кириллицу.

Источник: http://forwww.com/bitrix-how-to-get-element-and-section-list/

⤧  Next post Как добавить и отобразить свойства у разделов в 1С-Битрикс ⤧  Previous post Как задавать мета свойства в 1С-Битрикс