Advertisement
wzline

Выбор всех ID родительских секция для указаной

Jan 24th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.58 KB | None | 0 0
  1. /**
  2.  * Метод выбирает для указанной секции идентификаторы всех родительских секций
  3.  * @param int $sectionId
  4.  * @return array
  5.  */
  6. protected function getParentDepartments(int $sectionId) : array
  7. {
  8.     $result = [];
  9.    
  10.     if ($sectionId > 0 && Loader::includeModule('iblock'))
  11.     {
  12.         // Выбираем указанную секцию, ИД её родителя и её уровень вложенности
  13.         if ($sInfo = \Bitrix\Iblock\SectionTable::getRow(['filter' => ['=ID' => $sectionId], 'select' => ['ID', 'IBLOCK_SECTION_ID', 'DEPTH_LEVEL']]))
  14.         {
  15.             $result[] = $sectionId; // DEPTH_LEVEL - 1
  16.             if ($sInfo['DEPTH_LEVEL'] >= 2)
  17.             {
  18.                 $result[] = (int) $sInfo['IBLOCK_SECTION_ID']; // DEPTH_LEVEL - 1
  19.                
  20.                 // если уровень вложенности больше 2, тогда составим запрос, который будет джоинить все уровни вложености от 4 до конечной
  21.                 if ($sInfo['DEPTH_LEVEL'] >= 3)
  22.                 {
  23.                     $params = [
  24.                         'filter' => ['=ID' => $sInfo['IBLOCK_SECTION_ID']],
  25.                         'select' => ['ID', 'ISID_L3' => 'IBLOCK_SECTION_ID'],
  26.                     ];
  27.                    
  28.                     for ($i = 4; $i <= $sInfo['DEPTH_LEVEL']; $i++)
  29.                     {                      
  30.                         $params['select']["ISID_L$i"] = \str_repeat('PARENT_SECTION.', $i-3) . 'IBLOCK_SECTION_ID';
  31.                     }
  32.                    
  33.                     if ($s = \Bitrix\Iblock\SectionTable::getRow($params))
  34.                     {
  35.                         for ($i = 3; $i <= $sInfo['DEPTH_LEVEL']; $i++)
  36.                             $result[] = (int) $s["ISID_L$i"];
  37.                     }
  38.                 }
  39.             }
  40.         }
  41.     }
  42.    
  43.     return $result;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement