Вообщем суть такова. Использую компоненту. Там идет вывод разделов, но разделы выводятся все какие есть... Мне нужно оставить разделы первого уровня и для определенного первого уровня(тот в каком мы находимся) отдать в 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/