Advertisement
abushyk

Realia_getTemplateMenu_EXT2

Sep 26th, 2016
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. private function getTemplateMenu($menues=array()){
  2.     $cacheLive=86400; //жизнь кеша в секундах (сутки)
  3.     $useLang=false;
  4.     $ruAsDef=false;
  5.     $useCache=false; //использовать кеш. устанвовить true для использования
  6.     $refreshCache=false;
  7.     $cache_file=SITEBILL_DOCUMENT_ROOT.'/cache/cache.tplmenu.txt';
  8.    
  9.     if(1===intval($this->getConfigValue('apps.language.use_langs'))){
  10.         $curlang=$this->getCurrentLang();
  11.         $useLang=true;
  12.        
  13.         if(1===intval($this->getConfigValue('apps.language.use_default_as_ru')) && $curlang=='ru'){
  14.             $ruAsDef=true;
  15.         }
  16.     }
  17.  
  18.     $DBC=DBC::getInstance();
  19.  
  20.     require_once(SITEBILL_DOCUMENT_ROOT.'/template/frontend/realia/main/realia_menu_decorator.php');
  21.     require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_implements.php');
  22.     require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_manager.php');
  23.     $SM=new Structure_Manager();
  24.     $structure=$SM->loadCategoryStructure();
  25.    
  26.     $DBC=DBC::getInstance();
  27.    
  28.     $add_points=array();
  29.     $additional_menues=array();
  30.     $ids=array();
  31.            
  32.     if(!empty($menues)){
  33.         if($useCache){
  34.             if(file_exists($cache_file) && (time()-filemtime($cache_file))<$cacheLive){
  35.                 $precached=unserialize(file_get_contents($cache_file));
  36.             }else{
  37.                 $precached=array();
  38.                 $refreshCache=true;
  39.             }
  40.         }
  41.         foreach($menues as $m){
  42.             if($m['id']==0){
  43.                 $m['href']=$this->getServerFullUrl().'/';
  44.             }else{
  45.                 if(isset($precached[$m['id']])){
  46.                     $add_points[$m['id']]=$precached[$m['id']];
  47.                 }else{
  48.                     $ids[]=$m['id'];
  49.                 }
  50.             }
  51.             $additional_menues[$m['id']]=$m;
  52.         }
  53.        
  54.         if(!empty($ids)){
  55.             $query='SELECT * FROM '.DB_PREFIX.'_menu_structure WHERE menu_id IN ('.implode(',', $ids).') ORDER BY sort_order';
  56.             $stmt=$DBC->query($query);
  57.             if($stmt){
  58.                 while($ar=$DBC->fetch($stmt)){
  59.                     $ar['url']=trim($ar['url']);
  60.                    
  61.                     if($ar['url']!='' && 0!==strpos($ar['url'], 'http:')){
  62.                         $ar['url'] = trim($ar['url'], '/');
  63.                     }
  64.                     $add_points[$ar['menu_id']][]=$ar;
  65.                     $precached[$ar['menu_id']]=$add_points[$ar['menu_id']];
  66.                 }
  67.             }
  68.             if($useCache && $refreshCache){
  69.                 $f=fopen($cache_file, 'w');
  70.                 fwrite($f, serialize($precached));
  71.                 fclose($f);
  72.             }
  73.         }
  74.     }
  75.    
  76.     if(!empty($additional_menues)){
  77.         $behind=array();
  78.         $after=array();
  79.         foreach ($additional_menues as $k=>$ad_menu){
  80.             if($ad_menu['position']=='behind'){
  81.                 $behind[]=$ad_menu;
  82.             }else{
  83.                 $after[]=$ad_menu;
  84.             }
  85.         }
  86.         if(!empty($behind)){
  87.             $behind=array_reverse($behind);
  88.         }
  89.         $additional_menues=array_merge($behind, $after);
  90.         foreach ($additional_menues as $ad_menu){
  91.             $k=$ad_menu['id'];
  92.             $indexes=array_keys($structure['catalog']);
  93.             sort($indexes);
  94.             $last_index=end($indexes)+1;
  95.             if($ad_menu['position']=='behind'){
  96.                 array_unshift($structure['childs'][0], $last_index);
  97.             }else{
  98.                 $structure['childs'][0][]=$last_index;
  99.             }
  100.             if(isset($ad_menu['href']) && $ad_menu['href']!=''){
  101.                 $href=trim($ad_menu['href'], '/');
  102.             }else{
  103.                 $href='#';
  104.             }
  105.            
  106.             $structure['catalog'][$last_index]=array('url'=>$href, 'name'=>$ad_menu['title']);
  107.            
  108.             if(isset($add_points[$k]) && !empty($add_points[$k])){
  109.                 $current_index=$last_index+1;
  110.                 foreach ($add_points[$k] as $ad_point){
  111.                     $ad_point_title=$ad_point['name'];
  112.                     if($useLang){
  113.                         if($ruAsDef){
  114.                            
  115.                         }else{
  116.                             if($ad_point['name_'.$curlang]!=''){
  117.                                 $ad_point_title=$ad_point['name_'.$curlang];
  118.                             }
  119.                         }
  120.                     }
  121.                     $structure['catalog'][$current_index]=array('url'=>$ad_point['url'], 'name'=>$ad_point_title);
  122.                     $structure['childs'][$last_index][]=$current_index;
  123.                     $current_index++;
  124.                 }
  125.             }
  126.         }
  127.        
  128.     }
  129.    
  130.     return Realia_Menu_Decorator::getMenu($structure);
  131.        
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement