Битрикс вывод инфоблоков в php

Битрикс: как узнать список разделов и элементов

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

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

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

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

  "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'])." ;
"; > endif; ?>

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

  • подключаем модуль 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']." ;
";
echo $ar_fields['PROREPTY_TITLE_VALUE']." ;
";

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

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

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

  "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; ?> 

ПС – показал где писать nTopCount 🙂

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

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

 "ASC"), Array("IBLOCK_ID" => 14, "ACTIVE" => "Y"), false, Array('ID', 'NAME', 'CODE') ); while($ar_fields = $my_sections->GetNext()) < echo urldecode($ar_fields['CODE'])." ;
"; >?>

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

Источник

if0rest / bitrix:news.sections.elements.md

Часто возникает необходимость вывести разделы инфоблока с элементами на одной странице. Для этой цели подойдет связка catalog.sections + news.list. Или можно обойтись одним bitrix:news.list, немного кастомизировав шаблон компонента. Пойдем вторым путем.

  1. Размещаем компонент bitrix:news.list на целевой странице.
  2. Копируем шаблон компонента в текущий шаблон сайта.
  3. Создаем в нем файл result_modifier.php с таким содержимым.
// Получаем все активные разделы ИБ $rsSections = CIBlockSection::GetList( Array("SORT" => "ASC"), Array( "=IBLOCK_ID" => $arParams["IBLOCK_ID"], "=ACTIVE" => "Y" ) ); // Собираем разделы в массив while ($arSection = $rsSections->GetNext()) $arSections[] = $arSection; // Фильтруем элементы по принадлежности к разделу // Получаем итоговый массив со структурой: [SECTION] => [ELEMENTS] foreach ($arSections as $arSection)< foreach ($arResult["ITEMS"] as $arItem)< if ($arItem["IBLOCK_SECTION_ID"] == $arSection["ID"]) $arSection["ELEMENTS"][] = $arItem; > $arElementGroups[] = $arSection; > $arResult["ITEMS"] = $arElementGroups;

В итоге получаем такую структуру:

Array ( // Разделы [0] => Array ( [ID] => 17 [NAME] => Юридические вопросы [CODE] => yuridicheskie-voprosy [SECTION_PAGE_URL] => /faq/yuridicheskie-voprosy/ [ELEMENTS] => Array ( // Элементы [0] => Array [1] => Array [2] => Array ) ) [1] => Array [2] => Array . )

В template.php выводим так:

foreach ($arResult["ITEMS"] as $arSection):?> h4>$arSection["NAME"]?>h4> if ($arSection["ELEMENTS"]):?> ul> foreach ($arSection["ELEMENTS"] as $arItem):?>  $this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT")); $this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM'))); ?> li id pl-ent">$this->GetEditAreaId($arItem['ID']);?>"> a href pl-ent">$arItem["DETAIL_PAGE_URL"]?>">$arItem["NAME"]?>a> li> endforeach?> ul> endif?> endforeach?>

Не нравится мне имя ключа $arResult[«ITEMS»], напрашивается «SECTIONS», но пока оставлю, как есть.

Однако есть вариант лучше, который избавит нас от вложенного foreach.

$rsSections = CIBlockSection::GetList( Array("SORT" => "ASC"), Array( "=IBLOCK_ID" => $arParams['IBLOCK_ID'], "=ACTIVE" => "Y" ) ); // Тут вместо инкрементного индекса, ID раздела while ($arSection = $rsSections->GetNext()) $arSections[$arSection['ID']] = $arSection; // По нему производим неявную фильрацию foreach($arResult["ITEMS"] as $arItem) < $arSections[$arItem['IBLOCK_SECTION_ID']]['ITEMS'][] = $arItem; > $arResult["SECTIONS"] = $arSections;
Array ( // Разделы [18] => Array ( [ID] => 18 [NAME] => Вопросы по доставка и оплате [CODE] => voprosy-po-dostavka-i-oplate [SECTION_PAGE_URL] => /faq/voprosy-po-dostavka-i-oplate/ [IBLOCK_TYPE_ID] => references [ITEMS] => Array ( // Элементы [0] => Array ( [ID] => 331 [IBLOCK_SECTION_ID] => 18 [NAME] => Как изменить номер телефона в личном кабинете? [DETAIL_PAGE_URL] => /faq/voprosy-po-dostavka-i-oplate/kak-izmenit-nomer-telefona/ ) [1] => Array [2] => Array

В template.php аналогичная верстка, лишь переименуем ключи $arResult.

foreach ($arResult["SECTIONS"] as $arSection):?> h4>$arSection["NAME"]?>h4> ul> foreach ($arSection["ITEMS"] as $arItem):?> li id pl-ent">$this->GetEditAreaId($arItem['ID']);?>"> a href pl-ent">$arItem["DETAIL_PAGE_URL"]?>">$arItem["NAME"]?>a> li> endforeach?> ul> endforeach?>

image

— Написано на основе данных постов:

Источник

Создание инфоблока в BITRIX. news.list, news.detail

Создание инфоблока

Для вывода элементов инфоблока используется bitrix:news.list в index.php. Минимальный набор параметров для вызова:

IncludeComponent( "bitrix:news.list", "tour", // шаблон array( "IBLOCK_TYPE" => "content", // тип информационного блока "IBLOCK_ID" => "1", // ID информационного блока "NEWS_COUNT" => "10", // колличество выводимых элементов "INCLUDE_IBLOCK_INTO_CHAIN" => "N", "ADD_SECTIONS_CHAIN" => "N", "SET_TITLE" => "N", "PROPERTY_CODE" => array( 0 => "NAME", // включить свойство из инфоблока ), ), false ); ?>

Список всех возможных параметров для компонента bitrix:news.list смотрите по ссылке

Если необходима фильтрация, есть параметр FILTER_NAME. Над вызовом компонента bitrix:news.list создаем глобальную переменную, с параметром фильтрации.

1]; // Не выведутся те элементы, в свойстве которых OLD установлено значение 1 ?>

а в bitrix:news.list передаем фильтр.

Настройка urlrewrite

В urlrewrite.php необходимо прописать параметры обработки URL.

 '#^/tury/(.*)/.*#', // Обработка детальной страницы 'RULE' => 'ELEMENT_CODE=$1', 'ID' => 'bitrix:news', 'PATH' => '/tury/detail.php', 'SORT' => 100, ), array ( 'CONDITION' => '#^/tury/#', // Обработка главной страницы раздела 'RULE' => '', 'ID' => 'bitrix:news', 'PATH' => '/tury/index.php', 'SORT' => 100, ), );

Вывод детальной страницы

Для вывода детальной страницы в detail.php используется bitrix:news.last. Минимальный набор параметров для вызова:

IncludeComponent( "bitrix:news.detail", "tour", // шаблон Array( "IBLOCK_ID" => "1", // ID информационного блока "IBLOCK_TYPE" => "content", // тип информационного блока "ELEMENT_CODE" => $_REQUEST["ELEMENT_CODE"], // параметр передаваемой страницы "INCLUDE_IBLOCK_INTO_CHAIN" => "N", "ADD_SECTIONS_CHAIN" => "N", "SET_BROWSER_TITLE" => "Y", "SET_META_DESCRIPTION" => "Y", "SET_TITLE" => "Y", "ADD_ELEMENT_CHAIN" => "Y", "PROPERTY_CODE" => array( 0 => "NAME", // включить свойство из инфоблока ), ), false );?>

Вывод изображений из свойств инфоблока

Вывести фото, которые находятся в свойствах элемента ИБ, не так уж и просто. В массиве данных детальной страницы мы увидим тольео ID фотографий, а не путь к этим файлам. Поэтому, в файле result_modifier.php необходимо обработать вывод этих фотографий.

В папке шаблона, в файле result_modifier.php делаем обход массива фотографий:

$photo) < $photo_small = CFile::ResizeImageGet($photo, array('width'=>200, 'height'=>200), BX_RESIZE_IMAGE_PROPORTIONAL, true); $photo_original = CFile::ResizeImageGet($photo, array('width'=>800, 'height'=>800), BX_RESIZE_IMAGE_PROPORTIONAL, true); $arResult['PHOTOS'][] = Array ( 'original' => $photo_original['src'], 'small' => $photo_small['src'], ); >

А в файле template.php уже выводим сами фото:

Источник

Читайте также:  Арифметические операции python math
Оцените статью