Шпаргалка по Bitrix. Работа с данными инфоблока — PROG-TIME

Шпаргалка по Bitrix. Работа с данными инфоблока

05.05.2022
Содержание:

В данной шпаргалке собран код для работы с свойствами инфоблока. Я покажу вам как получать данные из инфоблока, его свойства, параметры, UF поля.

Со временем шпаргалка будет пополняться, поэтому добавь её в закладки!

Как получить все свойства инфоблока

$IBLOCK_ID = 4;
$properties = CIBlockProperty::GetList(
    [
        "sort" => "asc", 
        "name" => "asc"
    ], 
    [
        "ACTIVE" => "Y", 
        "IBLOCK_ID" => $IBLOCK_ID
    ]
);
while ($prop_fields = $properties->GetNext()) {
    $arrListProps[] = $prop_fields;
}

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

/* массив с id свойств инфоблока */
$arrIdProps = [
    993,
    994,
    995,
];

foreach($arrIdProps as $propID) {
    /* получаем данные по свойству */
    $properties = CIBlockProperty::GetList(
        [], 
        [
            "ACTIVE" => "Y", 
            "ID" => $propID, 
            "IBLOCK_ID" => 4
        ]
    );

    while($propData = $properties->GetNext()) {
        $arrDataProps[$propData["ID"]] = $propData;

        /* получаем значения свойства */
        $property_enums = CIBlockPropertyEnum::GetList(
            [], 
            [
                "IBLOCK_ID" => 4, 
                "CODE" => $propData["CODE"]
            ]
        );

        while ($enum_fields = $property_enums->GetNext()) {
            $arrDataProps[$propData["ID"]]["LIST_VALUE"][] = [
                "ID" 	=> $enum_fields["ID"],
                "VALUE" => $enum_fields["VALUE"]
            ];
        }
    }
}

Получить все разделы и подразделы инфоблока

$rsParentSection = CIBlockSection::GetList(
    ['name' => 'asc'],
    ['IBLOCK_ID' => 4, 'SECTION_ID' => "", 'ACTIVE' => 'Y']
);

while ($arParentSection = $rsParentSection->GetNext()) {

    $arrFullListSection[] = $arParentSection;
    $arFilter = [
        'IBLOCK_ID' => $arParentSection['IBLOCK_ID'],
        '>LEFT_MARGIN' => $arParentSection['LEFT_MARGIN'],
        '<RIGHT_MARGIN' => $arParentSection['RIGHT_MARGIN'],
        '>DEPTH_LEVEL' => $arParentSection['DEPTH_LEVEL']
    ];

    /* делаем запрос внутри запроса по id подраздела */
    $rsSect = CIBlockSection::GetList(
        [
            'left_margin' => 'asc'],
            $arFilter
    );

    while ($arSect = $rsSect->GetNext()){
        $arrFullListSection[] = $arSect;
    }
}

Получить элементы из инфоблока

$arSelect = [
    "ID", 
    "NAME", 
    "DATE_ACTIVE_FROM", 
    "PREVIEW_TEXT", 
    "PROPERTY_RATING", 
    "PROPERTY_EMAIL", 
    "PROPERTY_IMG_LIST"
];
$arFilter = [
    "IBLOCK_ID" => 6, 
    "ACTIVE_DATE" => "Y", 
    "ACTIVE" => "Y", 
    "PROPERTY_CML2_LINK" => [$arResult['ID']]
];
$res = CIBlockElement::GetList([], $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement()) {
    $elem = $ob->GetFields();
    $arProducts[] = $elem;
}

Как получить количество активных элементов в конкретном разделе инфоблока

Для получения количества элементов в разделе, используем метод CIBlockSection::GetSectionElementsCount, где в качестве первого параметра указываем id раздела, а вторым параметром указываем массив для фильтрации.

$activeElements = CIBlockSection::GetSectionElementsCount(
    $sectionId, 
    ["CNT_ACTIVE"=>"Y"]
);

Получение количества элементов с помощью метода GetList

$arFilter = [
    "IBLOCK_ID" => 4,
    "SECTION_ID" => $sectionId,
    "ACTIVE" => "Y",
    "INCLUDE_SUBSECTIONS" => 'Y'
];

$res = CIBlockElement::GetList(["SORT"=>"ASC"], $arFilter, ["ID"]);
if($count = $res->SelectedRowsCount()){
    $activeElements = $count;
}

Получение раздела по названию

$arFilterSection = [
    "IBLOCK_ID"	=> 4,
    "NAME" 	=> "Название раздела",
];

$dbSect = CIBlockSection::GetList(false, $arFilterSection, false);
while($arSect = $dbSect->GetNext()) {
    var_dump($arSect); 
}

Получение раздела по ID

$res = CIBlockSection::GetByID($_GET["ID"]);
if($arCategory = $res->GetNext()) {
    var_dump($arCategory);
}
На этом всё!
Больше интересных статей в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime
Наши планы
  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube