В данной шпаргалке собран код для работы с свойствами инфоблока. Я покажу вам как получать данные из инфоблока, его свойства, параметры, UF поля.
Со временем шпаргалка будет пополняться, поэтому добавь её в закладки!
Как получить все свойства инфоблока
$IBLOCK_ID = 4;
$properties = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("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(array(), Array("ACTIVE"=>"Y", "ID" => $propID, "IBLOCK_ID" => 4));
while($propData = $properties->GetNext()) {
$arrDataProps[$propData["ID"]] = $propData;
/* получаем значения свойства */
$property_enums = CIBlockPropertyEnum::GetList(Array(), Array("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(
Array('name' => 'asc'),
Array('IBLOCK_ID' => 4, 'SECTION_ID' => "", 'ACTIVE' => 'Y')
);
while ($arParentSection = $rsParentSection->GetNext()) {
$arrFullListSection[] = $arParentSection;
$arFilter = array(
'IBLOCK_ID' => $arParentSection['IBLOCK_ID'],
'>LEFT_MARGIN' => $arParentSection['LEFT_MARGIN'],
'<RIGHT_MARGIN' => $arParentSection['RIGHT_MARGIN'],
'>DEPTH_LEVEL' => $arParentSection['DEPTH_LEVEL']
);
/* делаем запрос внутри запроса по id подраздела */
$rsSect = CIBlockSection::GetList(array('left_margin' => 'asc'), $arFilter);
while ($arSect = $rsSect->GetNext()){
$arrFullListSection[] = $arSect;
}
}
Получить элементы из инфоблока
$arSelect = Array("ID", "NAME", "DATE_ACTIVE_FROM", "PREVIEW_TEXT", "PROPERTY_RATING", "PROPERTY_EMAIL", "PROPERTY_IMG_LIST");
$arFilter = Array("IBLOCK_ID"=>6, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "PROPERTY_CML2_LINK"=>array($arResult['ID']));
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement()) {
$elem = $ob->GetFields();
$arProducts[] = $elem;
}
Как получить количество активных элементов в конкретном разделе инфоблока
Для получения количества элементов в разделе, используем метод CIBlockSection::GetSectionElementsCount, где в качестве первого параметра указываем id раздела, а вторым параметром указываем массив для фильтрации.
$activeElements = CIBlockSection::GetSectionElementsCount($sectionId, Array("CNT_ACTIVE"=>"Y"));
Получение количества элементов с помощью метода GetList
$arFilter = Array(
"IBLOCK_ID" => 4,
"SECTION_ID" => $sectionId,
"ACTIVE"=>"Y",
"INCLUDE_SUBSECTIONS" => 'Y'
);
$res = CIBlockElement::GetList(Array("SORT"=>"ASC"), $arFilter, Array("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);
}