<?
class profitkit {
/*Эта функция вспомогательная, чтоб смотреть подразделы*/
public function GetAllSectionInSel($SECTION_ID, $arParent)
{
$arR = array();
for ($i = 0, $k = count($arParent[$SECTION_ID]); $i < $k; $i++) {
array_push($arR, $arParent[$SECTION_ID][$i]);
if (isset($arParent[$arParent[$SECTION_ID][$i]])) { //Если ребёнок является родителем
$arR = array_merge($arR, GetAllSectionInSel($arParent[$SECTION_ID][$i], $arParent));
}
}
return $arR;
}
/*
$IBLOCK_ID ид инфоблока
$SECTION_ID ид каталога
$arFilter фильтр как в CIBlockSection::GetList
$arSelect что тянем как в CIBlockSection::GetList
*/
public function GetAllSectionIn($IBLOCK_ID, $SECTION_ID, $arFilter, $arSelect)
{
if ($arSelect == 'ID') { //если нужны только ид
$IDon = true;
$arSelect = array('ID', 'IBLOCK_SECTION_ID');
} else {
$arSelect = array_merge(array('ID', 'IBLOCK_SECTION_ID'), $arSelect);
}
$obSection = CIBlockSection::GetList(
array(),
array_merge(array('IBLOCK_ID' => $IBLOCK_ID), $arFilter),
false,
$arSelect,
false
);
$arAlId = array(); //Для хранения результатов
$arParent = array(); //Для хранения детей разделов
while ($arResult = $obSection->GetNext()) {
$arAlId[$arResult['ID']] = $arResult;
if (!is_array($arParent[$arResult['IBLOCK_SECTION_ID']])) { //Если родителя в списке нет, то добавляем
$arParent[$arResult['IBLOCK_SECTION_ID']] = array();
}
array_push($arParent[$arResult['IBLOCK_SECTION_ID']], $arResult['ID']);
}
unset($obSection);
$arR = $this->GetAllSectionInSel($SECTION_ID, $arParent); //Ид всех детей и правнуков
if (!$IDon) { //Если необходим не только ид
$arId = $arR;
$arR = array();
for ($i = 0, $k = count($arId); $i < $k; $i++) {
array_push($arR, $arAlId[$arId[$i]]);
}
}
return $arR;
}
}