daily pastebin goal
43%
SHARE
TWEET

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

wzline Jan 24th, 2019 (edited) 83 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.                         // на первом уровне (по нашей логике последнем) вложенности нужно брать ID секции, а не ID родительской секции
  31.                         $params['select']["ISID_L$i"] = \str_repeat('PARENT_SECTION.', $i-3) . (($i < $sInfo['DEPTH_LEVEL']) ? 'IBLOCK_SECTION_ID' : 'ID');
  32.                     }
  33.                    
  34.                     if ($s = \Bitrix\Iblock\SectionTable::getRow($params))
  35.                     {
  36.                         for ($i = 3; $i <= $sInfo['DEPTH_LEVEL']; $i++)
  37.                             $result[] = (int) $s["ISID_L$i"];
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.     }
  43.    
  44.     return $result;
  45. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top