Получение данных из инфоблока посекционно с кешированием, например, для лендинга
Последние записи
Достаточно часто меня просят сделать достаточно объемную страницу с контентом расположенном в инфоблоке. Где разделы это секции страницы, а элементы разделов это элементы списков секций или настройки. Привожу код, который я использую для большинства подобных случаев
if (CModule::IncludeModule("iblock")){
    $cntIBLOCK_List = 50;
    $cache = new CPHPCache();
    $cache_time = 3600*12*7; //кеш на неделю
    $cache_id = 'preferences'.$cntIBLOCK_List;
    $cache_path = 'preferences';
    if ($cache_time > 0 && $cache->InitCache($cache_time, $cache_id, $cache_path))
    {
        $res = $cache->GetVars();
        if (is_array($res["preferences"]) && (count($res["preferences"]) > 0)){
            $preferences = $res["preferences"];
        }
        $preferences['CACHE']='true';
    }
    if (!is_array($preferences))
    {
        $preferences['CACHE']='false';
        $arFilter = Array('IBLOCK_TYPE' => 'content', 'IBLOCK_ID' => $cntIBLOCK_List, 'GLOBAL_ACTIVE' => 'Y');
        $arSelect = array("ID", "IBLOCK_ID", "NAME", "CODE", "UF_*");
        $rsCityList = CIBlockSection::GetList(Array(), $arFilter, true, $arSelect);
        while ($item = $rsCityList->GetNext()) {
            $preferences[$item['ID']] = $item;
            $arSort = array('SORT' => 'ASC', 'ID' => 'DESC');
            $arFilter = array('ACTIVE' => 'Y', 'IBLOCK_ID' => $cntIBLOCK_List, 'IBLOCK_SECTION_ID' => $item['ID']);
            $arSelect = array('ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_TEXT');
            $res = CIBlockElement::getList($arSort, $arFilter, false, array(), $arSelect);
            while ($row = $res->fetch()) {
                $preferences[$item['ID']]['ITEMS'][]= $row;
            }
        }
        //////////// end cache /////////
        if ($cache_time > 0)
        {
            $cache->StartDataCache($cache_time, $cache_id, $cache_path);
            $cache->EndDataCache(array("preferences"=>$preferences));
        }
    }
}
        
        
        
		
	
Комментарии