SaveText.Ru

Без имени
  1. <?
  2. class profitkit {
  3.     /*Эта функция вспомогательная, чтоб смотреть подразделы*/
  4.     public function GetAllSectionInSel($SECTION_ID, $arParent)
  5.     {
  6.         $arR = array();
  7.         for ($i = 0, $k = count($arParent[$SECTION_ID]); $i < $k; $i++) {
  8.             array_push($arR, $arParent[$SECTION_ID][$i]);
  9.             if (isset($arParent[$arParent[$SECTION_ID][$i]])) { //Если ребёнок является родителем
  10.                 $arR = array_merge($arR, GetAllSectionInSel($arParent[$SECTION_ID][$i], $arParent));
  11.             }
  12.         }
  13.         return $arR;
  14.     }
  15.  
  16.     /*
  17.     $IBLOCK_ID ид инфоблока
  18.     $SECTION_ID ид каталога
  19.     $arFilter фильтр как в CIBlockSection::GetList
  20.     $arSelect что тянем как в CIBlockSection::GetList
  21.     */
  22.     public function GetAllSectionIn($IBLOCK_ID, $SECTION_ID, $arFilter, $arSelect)
  23.     {
  24.  
  25.         if ($arSelect == 'ID') { //если нужны только ид
  26.             $IDon = true;
  27.             $arSelect = array('ID', 'IBLOCK_SECTION_ID');
  28.         } else {
  29.             $arSelect = array_merge(array('ID', 'IBLOCK_SECTION_ID'), $arSelect);
  30.         }
  31.  
  32.         $obSection = CIBlockSection::GetList(
  33.             array(),
  34.             array_merge(array('IBLOCK_ID' => $IBLOCK_ID), $arFilter),
  35.             false,
  36.             $arSelect,
  37.             false
  38.         );
  39.  
  40.         $arAlId = array(); //Для хранения результатов
  41.         $arParent = array(); //Для хранения детей разделов
  42.         while ($arResult = $obSection->GetNext()) {
  43.  
  44.             $arAlId[$arResult['ID']] = $arResult;
  45.             if (!is_array($arParent[$arResult['IBLOCK_SECTION_ID']])) { //Если родителя в списке нет, то добавляем
  46.                 $arParent[$arResult['IBLOCK_SECTION_ID']] = array();
  47.             }
  48.             array_push($arParent[$arResult['IBLOCK_SECTION_ID']], $arResult['ID']);
  49.  
  50.         }
  51.         unset($obSection);
  52.  
  53.         $arR = $this->GetAllSectionInSel($SECTION_ID, $arParent); //Ид всех детей и правнуков
  54.  
  55.         if (!$IDon) { //Если необходим не только ид
  56.             $arId = $arR;
  57.             $arR = array();
  58.             for ($i = 0, $k = count($arId); $i < $k; $i++) {
  59.                 array_push($arR, $arAlId[$arId[$i]]);
  60.             }
  61.         }
  62.  
  63.         return $arR;
  64.     }
  65. }

Share with your friends:

Print