В данной шпаргалке собран код для работы с свойствами инфоблока. Я покажу вам как получать данные из инфоблока, его свойства, параметры, 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);
}