Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Метод выбирает для указанной секции идентификаторы всех родительских секций
- * @param int $sectionId
- * @return array
- */
- protected function getParentDepartments(int $sectionId) : array
- {
- $result = [];
- if ($sectionId > 0 && Loader::includeModule('iblock'))
- {
- // Выбираем указанную секцию, ИД её родителя и её уровень вложенности
- if ($sInfo = \Bitrix\Iblock\SectionTable::getRow(['filter' => ['=ID' => $sectionId], 'select' => ['ID', 'IBLOCK_SECTION_ID', 'DEPTH_LEVEL']]))
- {
- $result[] = $sectionId; // DEPTH_LEVEL - 1
- if ($sInfo['DEPTH_LEVEL'] >= 2)
- {
- $result[] = (int) $sInfo['IBLOCK_SECTION_ID']; // DEPTH_LEVEL - 1
- // если уровень вложенности больше 2, тогда составим запрос, который будет джоинить все уровни вложености от 4 до конечной
- if ($sInfo['DEPTH_LEVEL'] >= 3)
- {
- $params = [
- 'filter' => ['=ID' => $sInfo['IBLOCK_SECTION_ID']],
- 'select' => ['ID', 'ISID_L3' => 'IBLOCK_SECTION_ID'],
- ];
- for ($i = 4; $i <= $sInfo['DEPTH_LEVEL']; $i++)
- {
- $params['select']["ISID_L$i"] = \str_repeat('PARENT_SECTION.', $i-3) . 'IBLOCK_SECTION_ID';
- }
- if ($s = \Bitrix\Iblock\SectionTable::getRow($params))
- {
- for ($i = 3; $i <= $sInfo['DEPTH_LEVEL']; $i++)
- $result[] = (int) $s["ISID_L$i"];
- }
- }
- }
- }
- }
- return $result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement