Была задача сделать в Битриксе меню. В этом статическом меню надо было по url раздела прописанным в самом меню, выхватывать элементы инфоблока и выводить их в подменю. Я написал такой код в result_modifier.php
<? if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
$arFilter = Array('IBLOCK_ID'=>$IBLOCK_ID, 'GLOBAL_ACTIVE'=>'Y');
$db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
while($ar_result = $db_list->GetNext())
{
foreach ($arResult as $key => $arItem) {
$test = explode('/', $arItem["LINK"]);
if ($test[(count($test) - 2)] == $ar_result["CODE"]) {
$arResult[$key]["CHILDREN"] = array();
$arSelect = Array("ID", "NAME", "DETAIL_PAGE_URL");
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y", "SECTION_ID" => $ar_result["ID"]);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$i=0;
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
$arResult[$key]["CHILDREN"][$i]["NAME"] = $arFields["NAME"];
$arResult[$key]["CHILDREN"][$i]["DETAIL_PAGE_URL"] = $arFields["DETAIL_PAGE_URL"];
$i ++;
}
}
}
}
Но старший разработчик сказал что здесь 25 запросов к БД и надо сделать только два запроса. Я по отладке посмотрел, запросов 9. Думал, думал и не придумал. Каким образом можно потимизировать код чтобы уменьшить кол-во запросов к БД?