noganno
11/20/2015 - 12:45 PM

Ускоряем выборку в модуле «Информационные блоки» с помощью GetList в 10 раз https://www.olegpro.ru/post/1c_bitriks_uskoryaem_vyborku_v_modul

Ускоряем выборку в модуле «Информационные блоки» с помощью GetList в 10 раз https://www.olegpro.ru/post/1c_bitriks_uskoryaem_vyborku_v_module_informacionnye_bloki_s_pomoshchyu_getlist_v_10_raz.html

<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
 
// подключаем модуль «Информационные блоки»
CModule::IncludeModule('iblock');
 
// определяем настройки
$arParams = array(
    'IBLOCK_ID' => 2,
);
 
// сюда будем складывать все категории
global $sections;
 
// этой функцией будем стоить урл
function makeUrl($parentId = 0){
 
    global $sections;
 
    $sefFolder = '/katalog/';       
 
    $codes = array();
 
    while (isset($parentId)) {
        $codes[] = $sections[$parentId]['CODE'];
        if(isset($sections[$parentId])){
            $parentId = $sections[$parentId]['IBLOCK_SECTION_ID'];
        }else{
            $parentId = null;
        }
    }
 
    if (sizeof($codes)) {
        return $sefFolder . implode('/', array_reverse($codes));
    } else {
        return null;
    }   
}
 
$sections = array();
 
$resCatalog = CIBlockSection::GetList(
    array(
        'LEFT_MARGIN' => 'ASC'
    ), 
    array(
        'IBLOCK_ID' => $arParams['IBLOCK_ID'], 
        'ACTIVE' => 'Y', 
        'GLOBAL_ACTIVE' => 'Y',
    ), 
    false, 
    array(
        'IBLOCK_ID', 
        'IBLOCK_SECTION_ID', 
        'NAME', 
        'SECTION_PAGE_URL', 
        'UF_*'
    )
);
 
while($arCatalog = $resCatalog->Fetch()){
    $sections[$arCatalog['ID']] = $arCatalog;
}
 
foreach($sections as &$section){
    $section['SECTION_PAGE_URL'] = makeUrl($section['ID']);
}