Ускоряем выборку в модуле «Информационные блоки» с помощью 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']);
}