<?
//////////////////////////////////////////////////////////
// Функции для работы с инфоблоками на основе API Битрикс
// (примеры использования API)
//////////////////////////////////////////////////////////
// Получить ID элемента или раздела по символьному коду
function getIdByCode($code, $iblock_id, $type){
if(CModule::IncludeModule("iblock")){
if($type=='IBLOCK_ELEMENT'){
$arFilter=array("IBLOCK_ID"=>$iblock_id,"CODE"=>$code);
$res=CIBlockElement::GetList(array(),$arFilter,false,array("nPageSize"=>1),array('ID'));
$element=$res->Fetch();
if($res->SelectedRowsCount()!=1) {
return false;
} else {
return $element["ID"];
}
} else if($type=='IBLOCK_SECTION'){
$res=CIBlockSection::GetList(array(),array('IBLOCK_ID'=>$iblock_id,'CODE'=>$code));
$section=$res->Fetch();
if($res->SelectedRowsCount()!=1) {
return false;
} else {
return $section["ID"];
}
} else {
return false;
}
}
}
$IBLOCK_ID = 49;
$ELEMENT_ID = getIdByCode("type-zerkala", $IBLOCK_ID, 'IBLOCK_ELEMENT');
$SECTION_ID = getIdByCode("type-divany", $IBLOCK_ID, 'IBLOCK_SECTION');
// Возвращает сгруппированные данные (Раздел 1 уровень - Элементы)
function getSectionMenu($IBLOCK_ID){
$arrElements = array();
$arrGroupElements = array();
$resElements = CIBlockElement::GetList(Array("SORT"=>"ASC"),
array('IBLOCK_ID'=>$IBLOCK_ID, "ACTIVE"=>"Y", "INCLUDE_SUBSECTIONS"=>"Y"), false, false,
array("IBLOCK_ID", "ID", 'NAME', 'SECTION_ID', 'DETAIL_PAGE_URL', 'PROPERTY_*'));
$j = 0;
while($obElem = $resElements->GetNextElement()){
$arFields = $obElem->GetFields();
$arProps = $obElem->GetProperties();
$arrElements[$j] = $arFields;
$arrElements[$j]["PROPERTIES"] = $arProps;
$j++;
}
array_walk($arrElements, function($item, $key) use (&$arrGroupElements) {
$arrGroupElements[$item['IBLOCK_SECTION_ID']][] = $item;
});
$arrSections = array();
$resSections = CIBlockSection::GetList(array("SORT"=>"ASC"),array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y"),false,
array("IBLOCK_ID","ID","NAME", "SECTION_PAGE_URL", "UF_*"), false);
$i = 0;
while ($obSec = $resSections->GetNext()) {
$arrSections[$i] = $obSec;
$arrSections[$i]["ITEMS"] = $arrGroupElements[$obSec["ID"]];
$i++;
}
return $arrSections;
}
// Возвращает количество элементов по фильтру
function getCntElementsByFilter($IBLOCK_ID, $arFilter = array()){
$arOrder = Array("SORT"=>"ASC");
$arFilter = array_merge(array('IBLOCK_ID'=>$IBLOCK_ID, "ACTIVE"=>"Y", "INCLUDE_SUBSECTIONS"=>"Y"), $arFilter);
$arSelect = Array("IBLOCK_ID", "ID", 'NAME', 'SECTION_ID');
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
return $res->SelectedRowsCount();
}
// Возвращает список ID элементов по фильтру
function getElementsIDbyFilter($IBLOCK_ID, $arFilter = array()){
$arOrder = Array("SORT"=>"ASC");
$arFilter = array_merge(array('IBLOCK_ID'=>$IBLOCK_ID, "ACTIVE"=>"Y", "INCLUDE_SUBSECTIONS"=>"Y"), $arFilter);
$arSelect = Array("IBLOCK_ID", "ID", 'NAME', 'SECTION_ID');
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
$arID = array();
while($ob = $res->GetNextElement()){
$arFields = $ob->GetFields();
$arID[] = $arFields["ID"];
}
return $arID;
}
// Возвращает список элементов по фильтру (поля и свойства)
function getElementsByFilter($IBLOCK_ID, $arFilter = array()){
$arRes = array();
$arOrder = Array("SORT"=>"ASC");
$arFilter = array_merge(array('IBLOCK_ID'=>$IBLOCK_ID, "ACTIVE"=>"Y", "INCLUDE_SUBSECTIONS"=>"Y"), $arFilter);
$arSelect = Array("IBLOCK_ID", "ID", 'NAME', 'SECTION_ID');
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
$i = 0;
while($ob = $res->GetNextElement()){
$arFields = $ob->GetFields();
$arRes[$i] = $arFields;
$arProps = $ob->GetProperties();
$arRes[$i]["PROPS"] = $arProps;
$i++;
}
return $arRes;
}
// возвращает данные дочерних разделов по ID раздела родителя
function getSectionsByParentID($IBLOCK_ID, $ID) {
$arOrder = array("SORT"=>"ASC");
$arFilter = array("IBLOCK_ID"=>$IBLOCK_ID, "SECTION_ID"=>$ID);
$arSelect = array("IBLOCK_ID","ID","NAME", "IBLOCK_SECTION_ID", "DEPTH_LEVEL", "SECTION_PAGE_URL", "CODE");
$resList = CIBlockSection::GetList($arOrder,$arFilter,false,$arSelect, false);
$arrSections = array();
while ($ob = $resList->GetNext()) {
$arrSections[] = $ob;
}
return $arrSections;
}
// Возвращает список свойств инфоблока по ID инфоблока
function getPropertyListByIblockID($IBLOCK_ID){
$arRes = array();
$arOrder = Array("sort"=>"asc", "name"=>"asc");
$properties = CIBlockProperty::GetList($arOrder, Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$IBLOCK_ID));
while ($fields = $properties->GetNext())
{
// echo $fields["ID"]." - ".$fields["CODE"]." - ".$fields["NAME"]." - ".$fields["PROPERTY_TYPE"]."<BR/>";
$arRes[] = $fields;
}
return $arRes;
}
// Возвращает значения свойств типа список по ID свойства
function getEnumListByPropertyID($PropID){
$arRes = array();
$rsEnum = CIBlockProperty::GetPropertyEnum($PropID, array('SORT'=>'asc', 'value'=>'asc'));
while($arEnum = $rsEnum->Fetch()){
$arRes[] = $arEnum;
}
return $arRes;
}
// Возвращает минимальную и максимальную цену в соответствии с ID торговых предложений
function getMinMaxPricesByProducts($arProduct){
$arRez = array();
CModule::IncludeModule("catalog");
$priceOrder = array("PRICE"=>"ASC");
$priceFilter = array("PRODUCT_ID"=>$arProduct, "CAN_BUY"=>"Y" );
$db_res = CPrice::GetList($priceOrder, $priceFilter);
$arPrices = array();
while($ob = $db_res->Fetch()){
$arPrices[] = $ob["PRICE"];
// echo CurrencyFormat($ob["PRICE"], $ob["CURRENCY"])."\n";
// d($ob);
}
$lastNum = count($arPrices)-1;
$arRez["MIN_PRICE"] = $arPrices[0];
$arRez["MAX_PRICE"] = $arPrices[$lastNum];
return $arRez;
}