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

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

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

<?php 
//    /bitrix/modules/intranet/classes/general/utils.phpCIntranetUtils::getSubStructure()
//    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, или иной формат общения, но проще всего воспользоваться штатным инструментом:

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