Поддержка серверов

CIntranetUtils::getSubStructure: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=187470

//    CIntranetUtils::getSubStructure()
//    /bitrix/modules/intranet/classes/general/utils.php:857

    public static function getSubStructure($sectionId, $depth = false)
    {
        global $CACHE_MANAGER;

        static $structures;

        if (empty($structures[intval($sectionId)][intval($depth)]))
        {
            $iblockId = COption::GetOptionInt('intranet', 'iblock_structure', false);
            if ($iblockId <= 0)
                return;

            $cacheDir = '/intranet/structure/branches';
            $cacheId = 'intranet|structure|'.$iblockId.'|branch|'.intval($sectionId).'|'.intval($depth);

            $obCache = new CPHPCache();

            if ($obCache->InitCache(30*86400, $cacheId, $cacheDir))
            {
                $subStructure = $obCache->GetVars();
            }
            else
            {
                $obCache->StartDataCache();

                $CACHE_MANAGER->StartTagCache($cacheDir);

                $CACHE_MANAGER->RegisterTag('iblock_id_'.$iblockId);
                $CACHE_MANAGER->RegisterTag('intranet_users');
                $CACHE_MANAGER->RegisterTag('intranet_department_structure');

                $subStructure = array(
                    'TREE' => array(),
                    'DATA' => array(),
                );

                $arFilter = array(
                    'IBLOCK_ID' => $iblockId,
                    'ACTIVE' => 'Y'
                );

                if ($sectionId > 0)
                {
                    if ($depth == 1)
                    {
                        $arFilter['SECTION_ID'] = $sectionId;
                    }
                    else
                    {
                        $dbSection = CIBlockSection::GetList(
                            array('LEFT_MARGIN' => 'ASC'),
                            array('IBLOCK_ID' => $iblockId, 'ID' => $sectionId, 'ACTIVE' => 'Y'),
                            false,
                            array('DEPTH_LEVEL', 'LEFT_MARGIN', 'RIGHT_MARGIN')
                        );
                        if (!empty($dbSection) && ($currentSection = $dbSection->fetch()))
                        {
                            $arFilter['>=LEFT_MARGIN'] = $currentSection['LEFT_MARGIN'];
                            $arFilter['<=RIGHT_MARGIN'] = $currentSection['RIGHT_MARGIN'];
                            $arFilter['>DEPTH_LEVEL'] = $currentSection['DEPTH_LEVEL'];
                            if ($depth > 0)
                                $arFilter['<=DEPTH_LEVEL'] = $currentSection['DEPTH_LEVEL'] + $depth;
                        }
                    }
                }
                else if ($depth > 0)
                {
                    $arFilter['<=DEPTH_LEVEL'] = $depth;
                }

                $dbSections = CIBlockSection::GetList(
                    array('LEFT_MARGIN' => 'ASC'),
                    $arFilter,
                    false,
                    array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'UF_HEAD')
                );
                if (!empty($dbSections))
                {
                    while ($section = $dbSections->fetch())
                    {
                        if (empty($section['IBLOCK_SECTION_ID']))
                            $section['IBLOCK_SECTION_ID'] = 0;

                        if (!$subStructure['TREE'][$section['IBLOCK_SECTION_ID']])
                            $subStructure['TREE'][$section['IBLOCK_SECTION_ID']] = array();

                        $subStructure['TREE'][$section['IBLOCK_SECTION_ID']][] = $section['ID'];
                        $subStructure['DATA'][$section['ID']] = array(
                            'ID' => $section['ID'],
                            'NAME' => $section['NAME'],
                            'IBLOCK_SECTION_ID' => $section['IBLOCK_SECTION_ID'],
                            'UF_HEAD' => $section['UF_HEAD']
                        );
                    }
                }

                $CACHE_MANAGER->EndTagCache();
                $obCache->EndDataCache($subStructure);
            }

            if (!is_array($structures))
                $structures = array();
            if (!isset($structures[intval($sectionId)]) || !is_array($structures[intval($sectionId)]))
                $structures[intval($sectionId)] = array();
            $structures[intval($sectionId)][intval($depth)] = $subStructure;
        }

        return $structures[intval($sectionId)][intval($depth)];
    }

Блог разработчика

9 августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение