private function getTemplateMenu($menues=array()){ //remove comment from next string for testing //unset($_SESSION['_site_cache']['nave_menu']); $DBC=DBC::getInstance(); require_once(SITEBILL_DOCUMENT_ROOT.'/template/frontend/realia/main/realia_menu_decorator.php'); require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_implements.php'); require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_manager.php'); $SM=new Structure_Manager(); $structure=$SM->loadCategoryStructure(); $DBC=DBC::getInstance(); $add_points=array(); $additional_menues=array(); $ids=array(); if(!empty($menues)){ foreach($menues as $m){ if($m['id']==0){ $m['href']=$this->getServerFullUrl().'/'; }else{ if(isset($_SESSION['_site_cache']['nave_menu'][$m['id']])){ $add_points[$m['id']]=$_SESSION['_site_cache']['nave_menu'][$m['id']]; }else{ $ids[]=$m['id']; } } $additional_menues[$m['id']]=$m; } if(!empty($ids)){ $query='SELECT * FROM '.DB_PREFIX.'_menu_structure WHERE menu_id IN ('.implode(',', $ids).') ORDER BY sort_order'; $stmt=$DBC->query($query); if($stmt){ while($ar=$DBC->fetch($stmt)){ $ar['url']=trim($ar['url']); if($ar['url']!='' && 0!==strpos($ar['url'], 'http:')){ $ar['url'] = trim($ar['url'], '/'); } $add_points[$ar['menu_id']][]=$ar; $_SESSION['_site_cache']['nave_menu'][$ar['menu_id']]=$add_points[$ar['menu_id']]; } } } } if(!empty($additional_menues)){ $behind=array(); $after=array(); foreach ($additional_menues as $k=>$ad_menu){ if($ad_menu['position']=='behind'){ $behind[]=$ad_menu; }else{ $after[]=$ad_menu; } } if(!empty($behind)){ $behind=array_reverse($behind); } $additional_menues=array_merge($behind, $after); foreach ($additional_menues as $ad_menu){ $k=$ad_menu['id']; $indexes=array_keys($structure['catalog']); sort($indexes); $last_index=end($indexes)+1; if($ad_menu['position']=='behind'){ array_unshift($structure['childs'][0], $last_index); }else{ $structure['childs'][0][]=$last_index; } if(isset($ad_menu['href']) && $ad_menu['href']!=''){ $href=trim($ad_menu['href'], '/'); }else{ $href='#'; } $structure['catalog'][$last_index]=array('url'=>$href, 'name'=>$ad_menu['title']); if(isset($add_points[$k]) && !empty($add_points[$k])){ $current_index=$last_index+1; foreach ($add_points[$k] as $ad_point){ $structure['catalog'][$current_index]=array('url'=>$ad_point['url'], 'name'=>$ad_point['name']); $structure['childs'][$last_index][]=$current_index; $current_index++; } } } } return Realia_Menu_Decorator::getMenu($structure); }