Вообщем суть такова. Использую компоненту. Там идет вывод разделов, но разделы выводятся все какие есть... Мне нужно оставить разделы первого уровня и для определенного первого уровня(тот в каком мы находимся) отдать в arResult остальные уровни. Т.е. первый уровень выводится полностью, а второй и далее только для того первого уровня в каком мы находимся, если мы не в каталоге - то выводим второй и далее уровни для первого первого уровня(о как)))...
вот сопстно компонента
В итоге без кеша все работает нормально, но с кешем он запоминает только то что он положил в кеш и когда мы ходим по меню первого уровня - то без кеша показываются нужные вторые и третьи уровни, а с кешем - только то что он уже сохранил в кеш и пофигу ему в каком первом уровне мы находимся... Всю голову сломал че делать и как с этим кешем работать... Подскажите плиз...
Кстати ссылки генерируются таким образом: /catalog/level1/level2/level3/level4/element/
вот сопстно компонента
Код |
---|
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $cache_id = md5( ($arParams['CHECK_PERMISSIONS']=="Y"?$USER->GetGroups():"")."|" // Группы пользователя если есть учет прав ); $cache_dir = "/my_sections/"; $url = explode('?', $_SERVER["REQUEST_URI"]); $urls = explode('/', $url[0]); $b = true; $arSect = Array(); if ($this->StartResultCache(false, $cache_id, $cache_dir)) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache($cache_dir); .. .//тут идет обработка компонента, генерированние масива и т.д. В итоге массив весь полностью со всеми уровнями создан, дальше мой код... пока реализован так $sect_id = false; if($urls[1]=="catalog" and $urls[2]!=""){ $arFilter = Array("IBLOCK_ID"=>$arParams['IBLOCK_ID'],'CODE'=>$urls[2]); $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true); if($ar_result = $db_list->GetNext()) { $sect_id=$ar_result["ID"]; } } foreach ($arResult['SECTIONS'] as $key => $section){ if ($section['DEPTH_LEVEL']==1){ $c++; if($section['HAS_CHILDS']){ if(($urls[1]=="catalog" and $urls[2]==$section['CODE']) or ($urls[1]=="catalog" and $urls[2]=="" and $b) or ($urls[1]!="catalog" and $b)): $section["IS_SELECT"] = "Y"; $arSect[$c] = $section; $op_sel=true;//Если мы перешли в раздел, с этим уровнем, то в дальнейшем мы выводим остальные уровни else: $arSect[$c] = $section; $op_sel=false;//Если первый уровень не нужно открывать - то открывать второй не нужно endif; }else{ $arSect[$c] = $section; $op_sel=false;//Если нет подразделов у первого уровня - то открывать второй не нужно } $b=false; }elseif ($section['DEPTH_LEVEL']>=2 and $op_sel){ $c++; $arSect[$c] = $section; } } $arResult['SECTIONS'] = Array(); $arResult['SECTIONS'] = $arSect; $this->SetResultCacheKeys(array( // указываем, какие ключи кешировать из $arResult 'SECTIONS', 'AJAX_CALL_ID', 'TOTAL_COUNT', 'CUSTOM_COUNT' )); $this->IncludeComponentTemplate(); $CACHE_MANAGER->RegisterTag("bexx_iblock_".$arParams['IBLOCK_ID']); if($sect_id){ $CACHE_MANAGER->RegisterTag("my_section_".$sect_id); } $CACHE_MANAGER->EndTagCache(); } return $arResult; |
Кстати ссылки генерируются таким образом: /catalog/level1/level2/level3/level4/element/