Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private function getTemplateMenu($menues=array()){
- $cacheLive=86400; //жизнь кеша в секундах (сутки)
- $useLang=false;
- $ruAsDef=false;
- $useCache=false; //использовать кеш. устанвовить true для использования
- $refreshCache=false;
- $cache_file=SITEBILL_DOCUMENT_ROOT.'/cache/cache.tplmenu.txt';
- if(1===intval($this->getConfigValue('apps.language.use_langs'))){
- $curlang=$this->getCurrentLang();
- $useLang=true;
- if(1===intval($this->getConfigValue('apps.language.use_default_as_ru')) && $curlang=='ru'){
- $ruAsDef=true;
- }
- }
- $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)){
- if($useCache){
- if(file_exists($cache_file) && (time()-filemtime($cache_file))<$cacheLive){
- $precached=unserialize(file_get_contents($cache_file));
- }else{
- $precached=array();
- $refreshCache=true;
- }
- }
- foreach($menues as $m){
- if($m['id']==0){
- $m['href']=$this->getServerFullUrl().'/';
- }else{
- if(isset($precached[$m['id']])){
- $add_points[$m['id']]=$precached[$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;
- $precached[$ar['menu_id']]=$add_points[$ar['menu_id']];
- }
- }
- if($useCache && $refreshCache){
- $f=fopen($cache_file, 'w');
- fwrite($f, serialize($precached));
- fclose($f);
- }
- }
- }
- 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){
- $ad_point_title=$ad_point['name'];
- if($useLang){
- if($ruAsDef){
- }else{
- if($ad_point['name_'.$curlang]!=''){
- $ad_point_title=$ad_point['name_'.$curlang];
- }
- }
- }
- $structure['catalog'][$current_index]=array('url'=>$ad_point['url'], 'name'=>$ad_point_title);
- $structure['childs'][$last_index][]=$current_index;
- $current_index++;
- }
- }
- }
- }
- return Realia_Menu_Decorator::getMenu($structure);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement